我将尝试为我的旧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代码中还有其他可能导致这种行为的内容吗?