2016-05-01 42 views
1

我目前正面臨這個問題,即使我重複檢查了傳遞給我的方向矢量,我的聚光燈似乎總是面向我的世界的中心着色器。聚光燈似乎總是指向世界的中心

具有相同代碼的點光源(但不限制基於其允許的角度和方向的光線)工作正常。所以我的光矢量和一切似乎都奏效。

這裏的這一行爲的照片:

enter image description here

在光線朝上的世界,而不是到無人機所面臨的權利中心的圖片。藍色的指示燈在那裏證明照明看起來似乎有效。

我計算視覺空間我的燈和通過以下的着色器:

SpotLightPositionViewSpace[spotLightNum] = Vector3.Transform(l.getPosition(), viewMatrix); 
… 
SpotLightDirectionViewSpace[spotLightNum] = Vector3.Normalize(Vector3.Transform(l.getLightDirection(), viewMatrix)); 
SpotLightAngleCos[spotLightNum] = (float)Math.Cos((double)(l.getLightAngleRad()/2f)); 

在着色器我不光的像素,如果光方向與光矢量之間的點積比光的最大允許角的餘弦值大(會更加順暢,儘快做到這一點,因爲它的工作原理):

lightDirection = normalize(SpotLightPositionViewSpace[j] - pin.PositionViewSpace.xyz); 

if (intensityBasedOnDistance > 0.0 
&& (intensity = max(dot(surfaceNormal, lightDirection), 0.0)) > 0.0 
&& dot(-lightDirection, SpotLightDirectionViewSpace[j]) > SpotLightAngleCos[j]) 
{ 
diffuseColor += float4(SpotLightColor[j] * intensity * intensityBasedOnDistance * SpotLightIntensity[j], 0.0); 
} 

回答

0

嘗試了幾個小時改變

後0

SpotLightDirectionViewSpace[spotLightNum] = Vector3.Normalize(Vector3.Transform(l.getForward(), viewMatrix.Rotation)); 

解決它......不知道爲什麼,但現在的工作。

如果有人能解釋這一點,我將非常感激。