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