Three.js着色点亮到全球位置

时间:2017-03-18 10:13:29

标签: three.js glsl shader

所有你好,我正在做一个雾着色器并尝试添加光源。

最近我问如何正确确定光源的位置,问题解决了,但另一个问题出来了,对于雾我使用了#include <stdio.h> void main () { int a,b,sum; printf(""); scanf("%d",&a); printf(""); scanf("%d",&b); printf("enter 1 to add,2 to sub,3 to divi,4 to mul"); scanf("%d",&sum); int add = a+b, sub =a-b,divi=a/b,mul=a*b; if(sum==1) printf("add of two values= %d",add); if(sum==2) printf("sub of two values=%d",sub); if(sum==3) printf("divi of two values=%d",divi); if(sum==4) printf("mul of two values=%d",mul); } 的位置

modelMatrix

为了计算光的强度,我使用从光源到雾点的距离的计算。

vec3 fogVPosition = (modelMatrix * vec4( position, 1.0 )).xyz

但是我怎么知道光源的位置是相对于相机传输的,所以我无法正确计算距离,如果我给相机移动,光源就会改变它的位置。

以下是我所做的http://codepen.io/korner/pen/BWJLrq

的示例

在此示例中,可以看到光源未正确定位在表面上。

我的目标在此屏幕上完成:http://dt-byte.ru/f97dc222.png

如果您手动设置光源的全局位置,这是有效的,我只需要以某种方式将光源的位置置于全局位置float diffuseCoefficient = max( 1.0 - (distance(pointLights[i].position,fogVPosition) / plDistance), 0.0)

问题解决了!

原谅我的朋友,我走了,我没有意识到你可以添加pointLights[i].position

我又添加了一个变量modelViewMatrix

ligVPosition

然后将fogVPosition = (modelMatrix * vec4( position, 1.0 )).xyz; ligVPosition = (modelViewMatrix * vec4( position, 1.0 )).xyz; 更改为fogVPosition

ligVPosition

现在一切正常!

0 个答案:

没有答案