Java GLSL着色器、gl_ModelViewMatrix不正确?
所以我试着制作一个着色器,随着时间的推移,我的水晶的颜色发生了一点变化,一切都很顺利,直到我注意到它离光源越远,颜色并没有变暗(现在默认的opengl灯光!)。所以我试着用离光线的距离来调低颜色值,但是没有用。后来我发现(如果顶点在世界坐标中的x位置大于某个值,则将颜色设置为红色),顶点.x值大约为0。虽然应该是87.0左右Java GLSL着色器、gl_ModelViewMatrix不正确?,java,opengl,glsl,shader,lwjgl,Java,Opengl,Glsl,Shader,Lwjgl,所以我试着制作一个着色器,随着时间的推移,我的水晶的颜色发生了一点变化,一切都很顺利,直到我注意到它离光源越远,颜色并没有变暗(现在默认的opengl灯光!)。所以我试着用离光线的距离来调低颜色值,但是没有用。后来我发现(如果顶点在世界坐标中的x位置大于某个值,则将颜色设置为红色),顶点.x值大约为0。虽然应该是87.0左右 void main() { vec3 vertexPosition = vec3(gl_ModelViewMatrix * vertexPos); vec3
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语句!)
gl\u ModelViewMatrix
将转换为眼睛空间。固定函数GL从来没有“世界空间”。@derhass我该如何将其转换为世界坐标?您需要将GL\u模型视图
拆分为视图
(用于世界到眼睛)和模型
(用于对象到世界)部分。没有内置的矩阵。然而,你需要世界空间做什么?眼睛的空间通常会好的。@derhass好的,谢谢,我知道了。通过将我的变换作为统一矩阵传递,并将其乘以,谢谢!