Opengl GLM 观察奇怪的行为

Opengl GLM lookAt strange behaviour

目前我正在尝试在我的游戏中实现太阳的阴影贴图。为此,我需要使用 glm 的 look at 函数从太阳的角度渲染场景。这是我的代码:

projection = glm::ortho<float>(-200, 200, -200, 200, -200, 400);
view = glm::lookAt(sun_pos_modelspace, -target_position_modelspace, glm::vec3(0, 1, 0)); // target needs to be negative for correct camera direction
final_matrix = projection * view; 

这很好用,因为场景是在游戏开始时从太阳的角度渲染的。但是当我平移目标时,视图矩阵似乎从它原来的眼睛位置(也就是太阳的位置)移动了。我根本不想让眼睛移动,我只想让相机坐在太阳的位置,直视目标矢量。

我应该使用其他一些 glm 函数来解决这个问题吗?还是我看错了?

glm::lookAt 的三个参数是 eyecenterup。所以,你把眼睛放在你想要的地方,它不应该自己移动。将它设置为太阳的位置看起来是正确的(但要确保它在世界坐标中)

你的中心参数看起来有点可疑。它应该是相机应该注视的点。否定其中的某些世界地位对我来说没有意义:)

尽管否定,但屏幕上仍有任何内容的原因可能是您的近平面(glm::ortho 中的倒数第二个参数)。通常这是您希望物体在相机前可见的距离。使用负值,您将看到相机后面的对象。

编辑:澄清一下,在正射投影中有负近平面是有意义的,我只是认为将太阳放在某个遥远的位置然后让它渲染它前面的一切会更容易。这可能会使这在概念上更容易。

长话短说,尽量不要否定目标位置并为近平面使用一些正值。