Open GLES 2.0 - индексы вершин в вершинных шейдерах - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть некоторые данные, которые я не могу контролировать (предоставленные клиентом), которые указывают:

вершины

индексы

a "colorPalette" (8 разныхцвета vec4, всего 32 значения)

массив "vertexColors", который определяет, какие вершины должны иметь какой цвет из примененного к ним colorPalette.например, 0,0,1280 в этом массиве означает, что "color '0' из colorPalette должен применяться ко всем вершинам с индексом от 0 до 1280."

Мне кажется, что когда я определяю свою вершину GLSLШейдер, мне нужно иметь доступ к индексу текущей вершины, чтобы я мог определить, используя vertexColors, какой цвет из colorPalette применить и передать в шейдер фрагментов, используя переменную.

Как мне найти индекс текущей вершины?

Спасибо за любую помощь,

Фил.

PS Я очень новичок в Open GLES2.0, никогда ранее не использовал OpenGL или OpenGLES и пользуюсь всеми моими советами из "Руководства по программированию OpenGLES 2.0" и всего, что я могу найти в Интернете.

PPS Мне кажется, что Open GLES 1.x выглядел очень многопроще :)

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Используйте gl_VertexID встроенный атрибут.

Честно говоря, я не вижу, как вы собираетесь искать цвет (с учетом индекса) в вашем цветовом массиве.

Вместо этого,Я хотел бы создать специальный буферный объект для цвета вершины и нарисовать в нем цветной буфер (связанный как целевой объект Texture Buffer).В этом случае геометрический шейдер будет генерировать линейные полосы нужного цвета, например: - создать точку в 0 - создать точку в 1280 - получить цвет из палитры, передать его фрагментному шейдеру

Эта операция довольно дешеваядля HW даст точный цвет для каждой вершины на основе предоставленных вами данных палитры.

0 голосов
/ 21 февраля 2011

Есть ли шанс, что вы можете применить другой шейдер непосредственно, когда нужно применить новую палитру вместо попытки подсчета индексов вершин, которые могут быть недоступны?Честно говоря, я не верю, что GL обеспечивает индекс, который вы ищете, но я ни в коем случае не эксперт в этой области.Я бы сделал, как я предлагаю, и вместо этого использовал бы несколько шейдеров и определил бы какое-то другое логическое среднее значение для применения этих значений.

...