Xna 聚光灯似乎总是指向世界的中心

Xna 聚光灯似乎总是指向世界的中心,xna,shader,monogame,hlsl,lighting,Xna,Shader,Monogame,Hlsl,Lighting,我目前面临的问题是,我的聚光灯似乎总是面向我的世界中心,即使我仔细检查了我传递给着色器的方向向量 具有相同代码的点光源(但不基于其允许的角度和方向限制光源)工作正常。所以我的光向量和所有的东西似乎都起作用了 下面是这种行为的图片: 在这张照片上,光线向上朝向世界中心,而不是无人驾驶飞机所面对的右侧。蓝点灯是用来证明照明在其他方面似乎是有效的 我正在计算视图空间中的灯光,并将以下内容传递给着色器: SpotLightPositionViewSpace[spotLightNum] = Vector

我目前面临的问题是,我的聚光灯似乎总是面向我的世界中心,即使我仔细检查了我传递给着色器的方向向量

具有相同代码的点光源(但不基于其允许的角度和方向限制光源)工作正常。所以我的光向量和所有的东西似乎都起作用了

下面是这种行为的图片:

在这张照片上,光线向上朝向世界中心,而不是无人驾驶飞机所面对的右侧。蓝点灯是用来证明照明在其他方面似乎是有效的

我正在计算视图空间中的灯光,并将以下内容传递给着色器:

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));
在着色器中,如果光方向和光向量之间的点积大于最大允许光角度的余弦,我不会照亮像素(一旦工作,将更平滑):


在尝试了几个小时之后

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

解决了它。。。不知道为什么,但它现在起作用了


如果有人能解释这一点,我将非常感激。

在尝试了几个小时后

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

解决了它。。。不知道为什么,但它现在起作用了

如果有人能解释这一点,我将非常感激

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