Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GLSL着色器、gl_ModelViewMatrix不正确?_Java_Opengl_Glsl_Shader_Lwjgl - Fatal编程技术网

Java GLSL着色器、gl_ModelViewMatrix不正确?

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

所以我试着制作一个着色器,随着时间的推移,我的水晶的颜色发生了一点变化,一切都很顺利,直到我注意到它离光源越远,颜色并没有变暗(现在默认的opengl灯光!)。所以我试着用离光线的距离来调低颜色值,但是没有用。后来我发现(如果顶点在世界坐标中的x位置大于某个值,则将颜色设置为红色),顶点.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语句!)

gl\u ModelViewMatrix
将转换为眼睛空间。固定函数GL从来没有“世界空间”。@derhass我该如何将其转换为世界坐标?您需要将
GL\u模型视图
拆分为
视图
(用于世界到眼睛)和
模型
(用于对象到世界)部分。没有内置的矩阵。然而,你需要世界空间做什么?眼睛的空间通常会好的。@derhass好的,谢谢,我知道了。通过将我的变换作为统一矩阵传递,并将其乘以,谢谢!