所以我试图制作一个着色器,随着时间的推移改变了我的水晶的颜色,一切都很好,直到我注意到它离光源越远越暗(默认值) opengl现在亮了!)。因此,我尝试将颜色值调低距离光线的距离,但这不起作用。后来我发现(如果世界坐标中顶点的x位置大于某个值,则将颜色设置为红色),即vertex.x值大约为0.即使它应该是大约87.0。
void main()
{
vec3 vertexPosition = vec3(gl_ModelViewMatrix * vertexPos);
vec3 surfaceNormal = (gl_NormalMatrix * normals).xyz;
vec3 lightDirection = normalize(gl_LightSource[0].position.xyz - vertexPosition);
float diffuseLI = max(0.0, dot(surfaceNormal, lightDirection));
vec4 texture = texture2D(textureSample, gl_TexCoord[0]);
if(vertexPosition.x > 0)gl_FragColor.rgba = vec4(1, 0, 0, 1);
/*And so on....*/
}
据我所知gl_ModelViewMatrix * gl_Vertex应该给出顶点的世界坐标。我只是愚蠢还是什么? (我也尝试使用光线位置正确的if语句!)