Вопрос

Представьте, что у вас есть один из этих парней:

alt text
(источник: codeampler.com)

Он же GL_TRIANGLE_STRIP.Если вы хотите раскрасить его разными цветами, вы можете использовать:

glColorPointer(4, GL_UNSIGNED_BYTE, 0, colorArray);
glEnableClientState(GL_COLOR_ARRAY);

Где каждый «элемент» в цветовом массиве соответствует точке вершины полосы.Но что, если цвета просто чередуются между двумя разными цветами?Кажется ненужным определять цвет для каждой вершины, если есть только два «реальных» разных цвета.Итак, мой вопрос заключается в том, можно ли определить colorArray всего с двумя цветами в нем и каким-то образом заставить opengl чередовать эти два цвета при циклическом обходе массива вершин.

И да, я полный нуб в opengl, так что, возможно, это глупый вопрос...

Это было полезно?

Решение

Вы можете сделать это, используя Индексный режим цвета OpenGL.Однако имейте в виду, что, по моему опыту, на большинстве современных видеокарт это происходит медленнее, чем просто указание цвета каждой вершины.

В режиме цветового индекса вы отправляете отдельный массив цветов, затем каждая вершина указывает индекс в массиве вместо полного rgb/rgba.Он более эффективно использует память, но не так оптимизирован в большинстве драйверов оборудования.

Другие советы

Для этого можно использовать вершинный шейдер, отправив для каждой вершины логический флаг, описывающий, какой цвет должен быть.На самом деле самое простое и быстрое — это, вероятно, просто указать цвет для каждой вершины.

Если бы opengl имел возможность иметь несколько потоков вершин и индексов, это могло бы работать (но, вероятно, оно того не стоило бы).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top