Измените цвет вершины в вершинном шейдере
-
23-09-2019 - |
Вопрос
Можно ли установить цвет одной вершины, используя программу шейдера GLSL Vertex, так же, как GL_POSTION изменяет положение вершины?
Решение
Для версий GLSL предварительной версии 1.30 вы хотите написать в gl_FrontColor
или же gl_BackColor
Встроенные встроенные вкладки, доступные в вершине шейдера. Читайте о вариантах в спецификации GLSL 1.10 (http://www.opengl.org/registry/doc/glslangspec.full.1.10.59.pdf) узнать больше о них или спецификации расширения GL_ARB_VERTEX_SHADER.
gl_FrontColor
а также gl_BackColor
4D -векторы RGBA, которые принимают нормализованные скаляры с плавающей запятой.
Но это будет установлено все Вершины с красным, а не только одна вершина. Это потому, что один и тот же вершинный шейдер запускается для всех вершин. Если вы хотите установить отдельные цвета, используйте glColorPointer
вместе с glDrawArrays
, glDrawElements
, glDrawRangeElements
или же glMultiDrawElements
. Анкет Цвет вершины, установленный glColorPointer
можно прочитать как gl_Color
В вершине шейдера. gl_Color
В вершинном шейдере находится атрибут для переносчика.
Чтобы прочитать цвет, который вы написали в вершинном шейдере, в фрагментной шейдере, прочитайте встроенное изменение gl_Color
. Анкет Завершенные фрагменты должны быть написаны на gl_FragColor
.
Пример вершины -шейдера:
void main()
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Пример фрагмента Шейдер:
void main()
{
gl_FragColor = gl_Color;
}
Кроме того, чтобы заставить вершин-шейдер установить варианты, как и конвейер с фиксированной функцией OpenGL, вызовите функцию ftransform ().
void main()
{
ftransform();
}