4

是否可以使用 GLSL 顶点着色器程序设置单个顶点的颜色,就像 gl_Position 改变顶点的位置一样?

4

1 回答 1

10

对于 1.30 之前的 GLSL 版本,您希望写入gl_FrontColorgl_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使用。可以像在顶点着色器中一样读取设置的顶点颜色。在顶点着色器中是逐顶点属性。glDrawArraysglDrawElementsglDrawRangeElementsglMultiDrawElementsglColorPointergl_Colorgl_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();
}
于 2010-03-31T16:08:56.253 回答