Irb*_*bis 4 opengl 3d glm-math
我想为垂直地看着地面的相机创建一个视图矩阵:
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));
Run Code Online (Sandbox Code Playgroud)
最后一个参数是全局向上向量,所以一切似乎都是正确的,但我得到了跟随matirx:
-nan -nan -0 0
-nan -nan 1 0
-nan -nan -0 0
nan nan -1 1
Run Code Online (Sandbox Code Playgroud)
我想我得到了nan,因为看向量与向量平行,但是如何使用glm :: lookAt函数构建正确的视图矩阵.
问题出在相机的位置或向上矢量上.
你的相机是1单位(0,1,0),向下看原点(0,0,0).向上矢量表示摄像机的向上方向,而不是世界空间.例如,如果你期待,向上矢量将是+ Y. 如果你向下看,头顶朝向+ X,那么向上矢量对你来说是+ X. 它必须是与摄像机的位置矢量完全不平行的东西.
解决方案:
不可能lookAt使观察方向和向上矢量朝同一方向看。如果您想要一个沿着负 y 轴观察的相机,您必须调整向上向量,例如调整为[0,0,1]。在向上向量中指定的方向控制相机如何围绕视图轴旋转。