所有你好,我正在做一个雾着色器并尝试添加光源。
最近我问如何正确确定光源的位置,问题解决了,但另一个问题出来了,对于雾我使用了#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
现在一切正常!