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

Fra*_*ger 4 opengl glsl vertex-shader

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

小智 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_FrontColor并且gl_BackColor是采用标准化浮点标量的4D RGBA向量.

但是这会将所有顶点设置为红色,而不仅仅是一个顶点.这是因为为所有顶点运行相同的顶点着色器.如果要设置单独的颜色,使用glColorPointer一起glDrawArrays,glDrawElements,glDrawRangeElementsglMultiDrawElements.设置的顶点颜色glColorPointer可以gl_Color在顶点着色器中读取.gl_Color在顶点着色器中是每顶点属性.

要读取您在顶点着色器中编写的颜色,请在片段着色器中读取内置变量gl_Color.应该写完成的片段gl_FragColor.

顶点着色器示例:

void main()
{
    gl_FrontColor = gl_Color;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器示例:

void main()
{
    gl_FragColor = gl_Color;
}
Run Code Online (Sandbox Code Playgroud)

另外,要使顶点着色器像OpenGL固定函数管道一样设置变化,请调用函数ftransform().

void main()
{
    ftransform();
}
Run Code Online (Sandbox Code Playgroud)