C++ 为什么我的3d点状产品在另一个方向变成黑色?
这是我当前片段着色器的主要部分。如果我不在灯光计算中使用lightDot,灯光在各个方向上都是一个漂亮的圆形,均匀地淡出白色。但一旦我添加了lightDot,它似乎会使对象的另一半变成黑色C++ 为什么我的3d点状产品在另一个方向变成黑色?,c++,opengl,glsl,lighting,C++,Opengl,Glsl,Lighting,这是我当前片段着色器的主要部分。如果我不在灯光计算中使用lightDot,灯光在各个方向上都是一个漂亮的圆形,均匀地淡出白色。但一旦我添加了lightDot,它似乎会使对象的另一半变成黑色 据我所知,当世界位置和光之间的角度接近表面法线时,点积应该使光变亮,并且当角度越大时,使光越暗 void main() { vec3 lightDir=normalize(lightPosition-worldPosition); float lightDot=dot(worldNormal
据我所知,当世界位置和光之间的角度接近表面法线时,点积应该使光变亮,并且当角度越大时,使光越暗
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) dot (0,1) = 1
(0,-1) dot (0,1) = -1
通常在着色器中,钳制为0,因为我们尝试近似入射光,而入射光不能为负 问题实际上在于模型导入器交换几何体上的Y轴和Z轴,而不是法线。我想知道为什么X轴在一个方向上移动会减少点积,就好像它在远离法线一样