这是我目前的片段着色器的主要内容。如果我在灯光计算中不使用lightDot,那么灯光就是一个漂亮的圆形,在每个方向均匀地褪色。但是,一旦我添加lightDot,它似乎使对象的另一半只是黑色。
。
据我所知,当世界位置和光线之间的角度接近表面法线时,点积应该使光线变亮,并且当角度越大时,光线越暗。
void main()
{
vec3 lightDir=normalize(lightPosition-worldPosition);
float lightDot=dot(worldNormal,lightDir);
float dist=distance(lightPosition,worldPosition);
vec3 light=lightDot*materialDiffuse/(dist*dist);
fragmentColor=vec4(pow(light.x,gamma),pow(light.y,gamma),pow(light.z,gamma),1);
}
答案 0 :(得分:1)
点积已签名。只需插入一些值:
(0,1) dot (0,1) = 1
(0,-1) dot (0,1) = -1
通常在着色器中,您将其钳制为0,因为我们正在尝试近似不能为负的入射光。
答案 1 :(得分:0)
问题实际上是模型导入器在几何体上交换Y轴和Z轴而不是法线。我想通过想知道为什么X轴在一个方向上移动会减少点积,就好像它正在远离法线一样。