是否可以使用GLSL顶点着色器程序设置单个顶点的颜色,就像gl_Position改变顶点位置一样?
答案 0 :(得分:9)
对于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向量,它们采用标准化浮点标量。
但是这会将 all 的顶点设置为红色,而不仅仅是一个顶点。这是因为为所有顶点运行相同的顶点着色器。如果您想设置单独的颜色,请将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();
}