gpt4 book ai didi

matrix - 三.js shader 点光源位置

转载 作者:行者123 更新时间:2023-12-05 06:40:20 29 4
gpt4 key购买 nike

我正在尝试编写我的着色器并添加光源,我想通了并做到了。

但是有个问题,光源的位置没有确定正确,当相机旋转或移动时,会发生一些难以想象的事情。

所以我得到了顶点着色器的位置

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

最佳答案

您的问题在于 vPos。目前你做的:

vPos = (modelMatrix * vec4(position, 1.0)).xyz

相反,您需要将位置与 modelViewMatrix 相乘:

vPos = (modelViewMatrix * vec4(position, 1.0)).xyz;

您需要使用 modelViewMatrix 因为 PointLight.position 是相对于相机的。

关于matrix - 三.js shader 点光源位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42838965/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com