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

时间:2015-11-24 08:13:18

标签: 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));

最后一个参数是全局向上矢量,所以一切似乎都是正确的,但我得到了关注matirx:

-nan    -nan    -0  0   
-nan    -nan     1  0   
-nan    -nan    -0  0   
 nan     nan    -1  1

我想我得到了nan因为看向量与向上矢量并行,但是如何使用glm :: lookAt函数构建正确的视图矩阵。

2 个答案:

答案 0 :(得分:6)

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

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

解决方案:

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

答案 1 :(得分:3)

lookAt中,无法使观察方向和向上看向同一方向。如果您想要一个沿负y轴观察的摄像机,则必须调整向上矢量,例如调整到[0,0,1]。在向上矢量中指定的方向控制相机如何围绕视轴旋转。