Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的3d点状产品在另一个方向变成黑色?_C++_Opengl_Glsl_Lighting - Fatal编程技术网

C++ 为什么我的3d点状产品在另一个方向变成黑色?

C++ 为什么我的3d点状产品在另一个方向变成黑色?,c++,opengl,glsl,lighting,C++,Opengl,Glsl,Lighting,这是我当前片段着色器的主要部分。如果我不在灯光计算中使用lightDot,灯光在各个方向上都是一个漂亮的圆形,均匀地淡出白色。但一旦我添加了lightDot,它似乎会使对象的另一半变成黑色 据我所知,当世界位置和光之间的角度接近表面法线时,点积应该使光变亮,并且当角度越大时,使光越暗 void main() { vec3 lightDir=normalize(lightPosition-worldPosition); float lightDot=dot(worldNormal

这是我当前片段着色器的主要部分。如果我不在灯光计算中使用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) dot (0,1) = 1
(0,-1) dot (0,1) = -1

通常在着色器中,钳制为0,因为我们尝试近似入射光,而入射光不能为负

问题实际上在于模型导入器交换几何体上的Y轴和Z轴,而不是法线。我想知道为什么X轴在一个方向上移动会减少点积,就好像它在远离法线一样