Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 634699)
Контекстум
.
Инженерный журнал: наука и инновации  / №11 2014

Методы оптимизации под OPENGL (100,00 руб.)

0   0
Первый авторДикан
ИздательствоМ.: Изд-во МГТУ им. Н.Э. Баумана
Страниц11
ID279826
АннотацияРассмотрены основные методы оптимизации графических приложений, написанных с использованием OpenGL. Описаны методы низкоуровневой оптимизации, в том числе использующие различные расширения OpenGL. Приведены улучшенные методы отрисовки графических объектов. Изложены методы изменения формата графических объектов для повышения производительности конечных приложений.
УДКУДК 004.925
Дикан, И.В. Методы оптимизации под OPENGL / И.В. Дикан // Инженерный журнал: наука и инновации .— 2014 .— №11 .— URL: https://rucont.ru/efd/279826 (дата обращения: 24.04.2024)

Предпросмотр (выдержки из произведения)

УДК 004.925 Методы оптимизации под OPENGL © И.В. Дикан, Ю.С. Белов КФ МГТУ им. <...> Н.Э. Баумана, Калуга, 248000, Россия Рассмотрены основные методы оптимизации графических приложений, написанных с использованием OpenGL. <...> Описаны методы низкоуровневой оптимизации, в том числе использующие различные расширения OpenGL. <...> Изложены методы изменения формата графических объектов для повышения производительности конечных приложений. <...> Оптимизация рендеринга является важным этапом разработки конечного приложения, поскольку позволяет увеличить число кадров в секунду, снизить требования к аппаратному обеспечению в приложениях реального времени, а для рендеров — уменьшить время, затрачиваемое на отрисовку конечной сцены. <...> Рассмотрим основные методы оптимизации приложений: низкоуровневые, рисования моделей и оптимизации моделей. <...> К тому же в новых версиях OpenGL эти функции объявлены как deprecated. <...> От них следует отказаться в пользу новых расширений типа ARB_vertex_buffer_object (VBO), позволяющих хранить вертексы в одном буфере в памяти GPU. <...> Следующий пример демонстрирует разницу старого и нового подходов: struct Vertex { float x, y, z; } 1 И.В. Дикан, Ю.С. Белов void drawOldWay(ref const Vertex[] vertices) { // старый стиль отрисовки Begin(GL_TRIANGLES); foreach(v; vertices) // все вертексы каждый раз передаются // из оперативной памяти в память GPU Vertex3f(v.x, v.y, v.z); End(); } uint createVBO(ref const Vertex[] vertices) {// функция создания VBO uint id; // создаётся буфер GenBuffers(1, &id); // привязывается к текущему контексту BindBuffer(GL_ARRAY_BUFFER, id); // данные загружаются в быструю память GPU BufferData(GL_ARRAY_BUFFER, Vertex.sizeof * vertices.length, vertices.ptr, GL_STATIC_DRAW); return id; } void bindVBO(uint id) { // включается нулевой атрибут, // по которому обычно располагаются координаты EnableVertexAttribArray(0); BindBuffer(GL_ARRAY_BUFFER, id); // OpenGL уведомляется о содержимом буфера VertexAttribPointer( 0, 3, // номер атрибута (обычно это 0) // количество элементов GL_FLOAT, // тип элементов GL_FALSE, // элементы не нуждаются в нормализации 0, // все элементы идут друг за другом null // базовое смещение отсутствует ); } void unbindVBO() { DisableVertexAttribArray(0 <...>