【发布时间】:2014-11-07 16:44:44
【问题描述】:
我遇到了一些非常非常奇怪的事情。
我有一个非常简单的程序,它使用以下着色器管道渲染一个简单的全屏广告牌:
顶点着色器:
#version 430
layout(location = 0) in vec2 pos;
out vec2 tex;
void main()
{
gl_Position = vec4(pos, 0, 1);
tex = (pos + 1) / 2;
}
片段着色器:
#version 430
in vec2 tex;
out vec3 frag_color;
void main()
{
frag_color = vec3(tex.x, tex.y, 1);
}
程序总是在正确的位置渲染四边形(所以我已经排除了 VAO 是罪魁祸首),但由于某种原因忽略了我为 tex 设置的任何值并总是将其设置为 vec2(0,0),渲染一个蓝色的盒子。
这里有什么我遗漏的吗?我之前做过很多opengl应用程序,我从来没有遇到过这种情况。 :/
【问题讨论】:
-
pos+1的元素总是小于2吗?
-
是的。框的边界从 (-1,-1) 到 (1,1)。我也可以直接赋值(例如:tex = vec2(0.5,0.5); ),还是不行。
-
我以为它是在做整数除法,但如果直接赋值仍然给你同样的问题,也许不会。
-
使用制服,我可以在片段着色器中设置颜色。 Uniforms 在顶点着色器中不起作用(就像直接赋值一样)...
-
您是否启用了 Alpha 通道?如果是这样,您应该从片段着色器输出
vec4。检查您的格式。此外,frag_color应该有layout(location = 0),但这不应该是问题。
标签: opengl glsl shader fragment-shader vertex-shader