2010-03-04 116 views
6

我想向我的旧的OpenGL程序添加一些着色器,绘制大量GL_POINTS和一些GL_LINES。带片段着色器的GLSL只呈现黑色GL_POINTS

我创建了这两个着色器:

顶点着色器:

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在顶点着色器中使用该罪移位。但问题是如果背景颜色不是黑色,我只能看到我的GL_POINTS和GL_LINES,因为所有点和线都呈现为黑色。看起来在渲染代码中用glColor3f设置的所有颜色都被忽略。如果我取消注释片段着色器中的注释行,我可以将所有行和点设为红色,但是不应该将gl_Color与每个点使用glColor3f设置的颜色相对应?

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

回答

11

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

gl_FrontColor = gl_Color; 
+0

谢谢!现在工作!我不知道我是如何错过教程中的那部分。:) – ivans 2010-03-04 23:16:28

+1

另请参阅此处的答案以获取更多信息:http://stackoverflow.com/questions/6430154/what-is-the-relationship-between-gl-色和-GL-frontcolor合两个顶点和 - FR – 2011-09-19 16:26:57