代码之家  ›  专栏  ›  技术社区  ›  Franck Freiburger

更改顶点明暗器中顶点的颜色

  •  4
  • Franck Freiburger  · 技术社区  · 16 年前

    是否可以使用glsl顶点着色程序设置单个顶点的颜色,就像gl_位置更改顶点的位置一样?

    1 回复  |  直到 8 年前
        1
  •  9
  •   meetar    8 年前

    对于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扩展规范。

    正面颜色 背景色 是采用标准化浮点标量的4D rgba向量。

    但是这个会 全部的 顶点变为红色,而不仅仅是一个顶点。这是因为对所有顶点运行相同的顶点明暗器。如果您想设置单独的颜色,请使用 glColorPointer glDrawArrays , glDrawElements , glDrawRangeElements glMultiDrawElements . 顶点颜色由 GL颜色指针 可以理解为 gl_Color 在顶点明暗器中。 GL颜色 在顶点明暗器中是逐顶点属性。

    要读取在顶点着色程序中写入的颜色,请在片段着色程序中读取内置的 GL颜色 . 完成的片段应写入 gl_FragColor .

    顶点着色示例:

    void main()
    {
        gl_FrontColor = gl_Color;
        gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    }
    

    片段明暗器示例:

    void main()
    {
        gl_FragColor = gl_Color;
    }
    

    另外,要使顶点明暗器像OpenGL固定函数管道一样设置变量,请调用函数ftTransform()。

    void main()
    {
        ftransform();
    }
    
    推荐文章