OpenGL glColorPointer повторять цвета? - PullRequest
6 голосов
/ 21 августа 2009

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 21 августа 2009

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

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

3 голосов
/ 21 августа 2009

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

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

...