GLSL与片段着色器仅呈现黑色GL_POINTS

6

我将尝试为我的旧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个回答

11

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

gl_FrontColor = gl_Color;

谢谢!现在可以了!我不知道怎么错过了教程中的那一部分.. :) - ivans
1
此外,更多信息请参见此处的答案:https://dev59.com/Lmw15IYBdhLWcg3wu-M9 - Alec Jacobson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接