我目前面临的问题是,我的聚光灯似乎总是面对我的世界的中心,即使我仔细检查了我传递给着色器的方向向量。
具有相同代码的点光源(但不会根据其允许的角度和方向限制光源)工作正常。所以我的光矢量和所有东西似乎都起作用了。
下面是这种行为的一张图片:

在图片上,灯光朝向世界的中心,而不是无人机面对的右侧。蓝色的点灯是为了证明照明在其他方面似乎是有效的。
我正在计算视图空间中的灯光,并将以下内容传递给着色器:
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);
}发布于 2016-05-02 09:47:15
在尝试了几个小时之后
SpotLightDirectionViewSpace[spotLightNum] = Vector3.Normalize(Vector3.Transform(l.getLightDirection(), viewMatrix));至
SpotLightDirectionViewSpace[spotLightNum] = Vector3.Normalize(Vector3.Transform(l.getForward(), viewMatrix.Rotation));解决了..。不知道为什么,但它现在起作用了。
如果有人能解释这一点,我将不胜感激。
https://stackoverflow.com/questions/36969934
复制相似问题