glm :: lookAt返回带有nan元素的矩阵

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函数构建正确的视图矩阵.

Ale*_*lex 7

问题出在相机的位置或向上矢量上.

你的相机是1单位(0,1,0),向下看原点(0,0,0).向上矢量表示摄像机的向上方向,而不是世界空间.例如,如果你期待,向上矢量将是+ Y. 如果你向下看,头顶朝向+ X,那么向上矢量对你来说是+ X. 它必须是与摄像机的位置矢量完全不平行的东西.

解决方案:

  • 将向上矢量更改为沿XZ平面的任何内容
  • 或投射到XZ平面上时不是(0,0,0)的东西
  • 移动相机,使其沿Y轴移动


BDL*_*BDL 5

不可能lookAt使观察方向和向上矢量朝同一方向看。如果您想要一个沿着负 y 轴观察的相机,您必须调整向上向量,例如调整为[0,0,1]。在向上向量中指定的方向控制相机如何围绕视图轴旋转。