2017-08-27 80 views
0

這是我目前的片段着色器的主要部分。如果我在光線計算中不使用lightDot,那麼照明是一個很好的圓形,每個方向均勻地呈現白色。但是,一旦我添加lightDot它似乎使另一半的對象只是黑色。

Screenshot

據我所知,當世界位置和光線之間的角度接近表面法線並使角度越大時,光線越暗,點積應使光線明亮。爲什麼我的3d產品將它在另一個方向變成黑色?

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); 
} 

回答

1

dot產品已簽名。只需插入一些值:

(0,1) dot (0,1) = 1 
(0,-1) dot (0,1) = -1 

通常在着色器中,您將其設爲0,因爲我們試圖近似不能爲負值的入射光。

0

問題實際上是在模型導入程序中將Y和Z軸交換到幾何體而不是法線。我想通過想知道爲什麼X軸向一個方向移動會減少點產品,就好像它正在遠離法線一樣。

相關問題