更改顶点着色器中顶点的颜色

时间:2010-03-31 12:03:59

标签: opengl glsl vertex-shader

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

1 个答案:

答案 0 :(得分:9)

对于GLSL早期版本1.30的版本,您希望写入gl_FrontColorgl_BackColor内置函数,这些内置函数可在顶点着色器中访问。阅读GLSL 1.10规范(http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.10.59.pdf)中的变化以了解有关它们的更多信息,或GL_ARB_vertex_shader扩展规范。

gl_FrontColorgl_BackColor是4D RGBA向量,它们采用标准化浮点标量。

但是这会将 all 的顶点设置为红色,而不仅仅是一个顶点。这是因为为所有顶点运行相同的顶点着色器。如果您想设置单独的颜色,请将glColorPointerglDrawArraysglDrawElementsglDrawRangeElementsglMultiDrawElements一起使用。由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();
}