我正在尝试为我的旧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代码中是否还有其他可能导致此行为的内容?
答案 0 :(得分:11)
你需要在顶点着色器中传递颜色。
gl_FrontColor = gl_Color;