为什么两条不相关的代码行会改变GLSL着色器颜色?

时间:2015-07-02 13:22:45

标签: opengl glsl lwjgl

我有一个工作正常的GLSL顶点着色器:

void main(void){

gl_Position = ftransform();
gl_FrontColor = gl_Color;
pass_textureCoords = textureCoords;
}

与片段着色器(与此问题无关)一起,它们输出纹理模型,这是我所期望的。

enter image description here

但是,当我添加两行不相关的代码时:

void main(void){

gl_Position = ftransform();
gl_FrontColor = gl_Color;
pass_textureCoords = textureCoords;
surfaceNormal = normal; //Sets an out vec3 called surfaceNormal to normal.
toLightVector = lightPosition - position; //Does the same as the above.
}

一切似乎都变黑了。

enter image description here

我无法找到任何理由。代码根本不会影响任何着色器输出的颜色。事实上,在他们自己的上,两行(据我所知)绝对无用并且没有

虽然与问题不太相关,但这里是片段着色器:

in vec2 pass_textureCoords;
in vec3 surfaceNormal;
in vec3 toLightVector;

out vec4 out_Color;

uniform sampler2D textureSampler;

uniform vec3 lightColour;

void main(void){
vec4 colour = gl_Color;
vec4 textureColor = texture(textureSampler, pass_textureCoords);
if(textureColor.a<0.5){
    discard;
}
out_Color = vec4(textureColor.r, textureColor.g, textureColor.b, 1);

}

这里出了什么问题,为什么我的模型变黑了?

更新     toLightVector = lightPosition - position; 实际上是问题的界限。另一条线与此问题无关。

0 个答案:

没有答案