是否可以使用 GLSL 顶点着色器程序设置单个顶点的颜色,就像 gl_Position 改变顶点的位置一样?
1 回答
对于 1.30 之前的 GLSL 版本,您希望写入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();
}