2009-08-21 2 views
6

Представьте себе, что у вас есть один из этих парней:OpenGL glColorPointer повторяет цвета?

alt text http://www.codesampler.com/d3dbook/chapter_05/chapter_05_files/image007.jpg

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

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

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

И да, я полный нуб в OpenGL, так может быть, это глупый вопрос ...

ответ

3

Вы можете сделать это с помощью OpenGL Color Index Mode. Однако имейте в виду, что, по моему опыту, на большинстве современных графических карт это на самом деле медленнее, чем просто указание каждого цвета вершин.

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

3

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

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

Смежные вопросы