OpenGL быстро текстурирует рисунок с буферными объектами вершины. Действительно ли это - способ сделать это?

Я делаю 2D игру с OpenGL. Я хотел бы ускорить свой рисунок структуры при помощи VBOs.

В настоящее время я использую непосредственный режим. Я генерирую свои собственные координаты, когда я поворачиваю и масштабирую структуру. У меня также есть функциональность округления углов структуры, с помощью полигона, примитивного для привлечения их.

Я думал, будет это быть самым быстрым для создания VBO с вершинами для сторон структуры без смещения включенным, таким образом, я смогу затем использовать glTranslate, glScale и glRotate для перемещения положения рисунка для моей структуры. Затем я могу использовать тот же VBO без изменений для рисования структуры каждый раз. Я мог только изменить VBO, когда я должен добавить координаты для скругленных углов.

Это - лучший способ сделать это? Какие вещи я должен высматривать при выполнении его? Это является действительно самым быстрым для использования GL_TRIANGLES вместо GL_QUADS в современных видеокартах?

Спасибо за любой ответ.

5
задан Matthew Mitchell 31 May 2010 в 19:45
поделиться

1 ответ

Для повышения производительности не следует использовать рендеринг в немедленном режиме, а вместо этого использовать буфер вершин (на CPU или GPU) и рисовать с использованием методов glDrawArrays и т. Д. Масштабирование / поворот координат текстуры путем изменения множителя матрицы текстуры не является проблемой производительности, вы просто устанавливаете небольшие значения для всей сетки. Самым важным узким местом здесь является передача данных для каждой вершины (таких как цвет, положение И координаты текстуры) на GPU, и именно в этом могут сильно помочь объекты буфера вершин на GPU.

Если сетка, которую вы хотите отобразить на экране, является статической, то есть вы устанавливаете ее один раз и вам не нужно изменять ее (части) позже, вы можете сгенерировать координаты текстуры для всей сетки, включая все углы. ) только один раз. Позже вы можете изменить координаты текстуры для всей сетки, используя множитель матрицы текстуры. Однако, если вы хотите изменить разные части сетки, используя разные преобразования, вам придется разделить сетку на части. Из того, что вы описали, я понимаю, что вы хотите нарисовать прямоугольник с закругленными углами, который содержит изображение внутри, что может быть выполнено с использованием одной статической сетки (списка данных для каждой вершины).

Наконец, GL_QUADS также устарел в современных спецификациях OpenGL. В любом случае они не предлагают большой функциональности, поэтому вам следует переключить QUADS на треугольники или треугольные полосы / вееры.

4
ответ дан 14 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: