我正在尝试编写我的着色器并添加光源,我已经有点想通了并且完成了。
但是存在问题,光源的位置确定不正确,当相机旋转或移动时,会发生一些难以想象的事情。
因此,我获取了顶点着色器的位置。
vec3 vGlobalPosition = (modelMatrix * vec4(position, 1.0 )).xyz
现在我正在尝试制作一个照明区域
float lightDistance = pointLights[ i ].distance;
vec3 lightPosition = pointLights[ i ].position;
float diffuseCoefficient = max(
1.0 - (distance(lightPosition,vGlobalPosition) / lightDistance ), 0.0);
gl_FragColor.rgb += color.rgb * diffuseCoefficient;
但是,正如我之前所写的那样,如果你旋转相机,光照区域会移动到不同的位置。
我手动设置了灯光位置,一切就恢复正常了。
vec3 lightPosition = vec3(2000,0,2000);
...
问题是如何获得正确的光源位置?我需要一个全局位置,但光源中包含的位置我不知道。
添加了一个示例:http://codepen.io/korner/pen/XMzEaG