1
我目前正面臨這個問題,即使我重複檢查了傳遞給我的方向矢量,我的聚光燈似乎總是面向我的世界的中心着色器。聚光燈似乎總是指向世界的中心
具有相同代碼的點光源(但不限制基於其允許的角度和方向的光線)工作正常。所以我的光矢量和一切似乎都奏效。
這裏的這一行爲的照片:
在光線朝上的世界,而不是到無人機所面臨的權利中心的圖片。藍色的指示燈在那裏證明照明看起來似乎有效。
我計算視覺空間我的燈和通過以下的着色器:
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);
}