OpenGL glColorPointer повторяет цвета?

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

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

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

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

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

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


person quano    schedule 21.08.2009    source источник


Ответы (2)


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

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

person Reed Copsey    schedule 21.08.2009

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

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

person fuzzy-waffle    schedule 21.08.2009