我有一个工作正常的GLSL顶点着色器:
void main(void){
gl_Position = ftransform();
gl_FrontColor = gl_Color;
pass_textureCoords = textureCoords;
}
与片段着色器(与此问题无关)一起,它们输出纹理模型,这是我所期望的。
但是,当我添加两行不相关的代码时:
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.
}
一切似乎都变黑了。
我无法找到任何理由。代码根本不会影响任何着色器输出的颜色。事实上,在他们自己的上,两行(据我所知)绝对无用并且没有。
虽然与问题不太相关,但这里是片段着色器:
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; 实际上是问题的界限。另一条线与此问题无关。