返回

Look At 矩阵: 观察世界的窗口

前端

Look At 矩阵的原理

Look at矩阵是一个4x4的矩阵,它将世界坐标系中的点转换为摄像机坐标系中的点。转换过程包括以下三个步骤:

  1. 将世界坐标系中的点平移到摄像机的位置。
  2. 绕着摄像机坐标系的y轴旋转点,使摄像机指向目标位置。
  3. 绕着摄像机坐标系的x轴旋转点,使摄像机的上向量与世界坐标系的上向量对齐。

这三个步骤可以用以下公式表示:

Look At = Translate(-Eye) * RotateY(-θ) * RotateX(-φ)

其中,

  • Eye是摄像机的位置。
  • θ是摄像机绕着y轴旋转的角度。
  • φ是摄像机绕着x轴旋转的角度。

在OpenGL中使用Look At矩阵

在OpenGL中,可以使用glm库来实现look at矩阵。glm库是一个开源的C++数学库,提供了各种各样的数学函数和矩阵操作。

要使用glm库来实现look at矩阵,可以使用以下代码:

glm::mat4 lookAt(glm::vec3 eye, glm::vec3 target, glm::vec3 up) {
  glm::vec3 zaxis = glm::normalize(eye - target);
  glm::vec3 xaxis = glm::normalize(glm::cross(up, zaxis));
  glm::vec3 yaxis = glm::cross(zaxis, xaxis);

  glm::mat4 translate = glm::translate(glm::mat4(1.0f), -eye);
  glm::mat4 rotateX = glm::rotate(glm::mat4(1.0f), -φ, xaxis);
  glm::mat4 rotateY = glm::rotate(glm::mat4(1.0f), -θ, yaxis);

  return translate * rotateY * rotateX;
}

其中,

  • eye是摄像机的位置。
  • target是摄像机指向的目标位置。
  • up是摄像机的上向量。

通过调用lookAt()函数,可以得到一个look at矩阵。然后,可以使用这个矩阵将世界坐标系中的点转换为摄像机坐标系中的点。

结论

Look at矩阵是一种非常重要的变换矩阵,它可以控制摄像机观察世界的角度和位置。在OpenGL中,可以使用glm库来实现look at矩阵。通过调用lookAt()函数,可以得到一个look at矩阵,然后可以使用这个矩阵将世界坐标系中的点转换为摄像机坐标系中的点。