我想为垂直地看着地面的相机创建一个视图矩阵:
glm::mat4 matrix = glm::lookAt(glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
最后一个参数是全局向上矢量,所以一切似乎都是正确的,但我得到了关注matirx:
-nan -nan -0 0
-nan -nan 1 0
-nan -nan -0 0
nan nan -1 1
我想我得到了nan因为看向量与向上矢量并行,但是如何使用glm :: lookAt函数构建正确的视图矩阵。
答案 0 :(得分:6)
问题出在相机的位置或向上矢量上。
你的相机向上一个单位(0,1,0),俯视原点(0,0,0)。向上矢量表示摄像机的向上方向,而不是世界空间。例如,如果你向前看,向上矢量将是+ Y.如果你向下看,头顶朝向+ X,那么向上矢量对你来说是+ X.它必须与摄像机的位置矢量并不完全平行。
解决方案:
答案 1 :(得分:3)
在lookAt
中,无法使观察方向和向上看向同一方向。如果您想要一个沿负y轴观察的摄像机,则必须调整向上矢量,例如调整到[0,0,1]
。在向上矢量中指定的方向控制相机如何围绕视轴旋转。