Nit*_*x88 7 opengl shader lighting glsl coordinate-systems
我正在使用着色器开发一个OpenGL 2.1应用程序,我的每片段光照有问题.当我的场景初始加载时,照明是正确的,但是当我在场景中导航时,灯光会随着"相机"移动,而不是停留在静态位置.例如,如果我将光线照射到右侧,则物体的右侧将被照亮.如果我然后将相机移动到物体的另一侧并指向相反的方向,则光线仍然位于物体的右侧(而不是像现在一样在左侧).我假设我在错误的坐标系中计算光照,这导致了错误的行为.我按照以下方式计算照明......
在顶点着色器中......
ECPosition = gl_ModelViewMatrix * gl_Vertex;
WCNormal = gl_NormalMatrix * vertexNormal;
Run Code Online (Sandbox Code Playgroud)
其中vertexNormal是对象/模型空间中的法线.
在片段着色器中......
float lightIntensity = 0.2; //ambient
lightIntensity += max(dot(normalize(LightPosition - vec3(ECPosition)), WCNormal), 0.0) * 1.5; //diffuse
Run Code Online (Sandbox Code Playgroud)
例如,LightPosition是(100.0,10.0,0.0),如上所述,它将光照在世界的右侧.我不确定的部分是gl_NormalMatrix部分.我不确定这个矩阵是什么以及它将我的法线放入什么样的坐标空间(我假设世界空间).如果将法线放入世界空间,那么我认为问题在于ECPosition在眼睛空间中而LightPosition和WCN在世界空间中.关于这一点似乎不对,但我无法弄清楚.我也尝试将ECPosition放入世界空间我乘以我自己的modelMatrix,它只包含我为使坐标进入世界空间所做的转换,但这不起作用.如果我需要提供有关我的着色器或代码的其他信息,请告诉我.
归档时间: |
|
查看次数: |
507 次 |
最近记录: |