2016-05-01 14 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)); 

には、それを解決していない...それが動作するようになりまし理由が、全く分から。

誰かがこれを説明できるなら、私は非常に感謝します。

関連する問題