带片段着色器的GLSL仅渲染黑色GL_POINTS

时间:2010-03-04 20:08:13

标签: opengl shader glsl

我正在尝试为我的旧OpenGL程序添加一些着色器,这些程序会吸引大量GL_POINTS和一些GL_LINES。

我创建了这两个着色器:

顶点着色器:

void main()
{ 
    vec4 v = vec4(gl_Vertex);
    v.z = v.z + sin(v.x*v.x + v.y*v.y)/10.0;
    gl_Position = gl_ModelViewProjectionMatrix * v;
}

片段着色器:

#version 120 

void main()
{
    vec4 myOutputColor = gl_Color;
    gl_FragColor = myOutputColor;
    //gl_FragColor.r = 0.5;
}

这两个着色器编译和链接没有问题。并且顶点着色器工作得很好,我可以看到GL_POINTS在顶点着色器中使用该sin移位。但问题是,如果背景颜色不是黑色,我只能看到我的GL_POINTS和GL_LINES,因为所有的点和线都呈现为黑色。似乎忽略了渲染代码中使用glColor3f设置的所有颜色。如果我取消注释片段着色器中的注释行,我可以将所有的行和点都设置为红色,但是gl_Color不应该对应于每个点使用glColor3f设置的颜色吗?

我的OpenGL代码中是否还有其他可能导致此行为的内容?

1 个答案:

答案 0 :(得分:11)

你需要在顶点着色器中传递颜色。

gl_FrontColor = gl_Color;