相机/视图矩阵

Camera/View matrix

本文关键字:视图 相机      更新时间:2023-10-16

读完这篇文章(http://3dgep.com/?p=1700)后,似乎暗示我的视图矩阵是错误的。下面是我如何计算视图矩阵;

Mat4 Camera::Orientation() const
{
    Quaternion rotation;
    rotation = glm::angleAxis(mVerticalAngle, Vec3(1.0f, 0.0f, 0.0f));
    rotation = rotation * glm::angleAxis(mHorizontalAngle, Vec3(0.0f, 1.0f, 0.0f));
    return glm::toMat4(rotation);
}

Mat4 Camera::GetViewMatrix() const
{
    return Orientation() * glm::translate(Mat4(1.0f), -mTranslation); 
}

假设,我要对这个结果矩阵求逆,但到目前为止我还没有,而且到目前为止它工作得很好,我也没有做任何逆。我是不是漏掉了什么?

您已经完成了反转。视图矩阵是定位相机的模型变换的逆。这是:

ModelCamera = Translation(position) * Rotation

所以倒数是

ViewMatrix = (Translation(position) * Rotation)^-1
           = Rotation^-1 * Translation(position)^-1

通过抵消偏移量来反转翻译:

           = Rotation^-1 * Translation(-position)

这就给我们留下了反转旋转。我们可以假设旋转是反向的。因此,相机模型的原始旋转为

Rotation^-1 = RotationX(verticalAngle) * RotationY(horizontalAngle)
Rotation    = (RotationX(verticalAngle) * RotationY(horizontalAngle))^-1
            = RotationY(horizontalAngle)^-1 * RotationX(verticalAngle)^-1
            = RotationY(-horizontalAngle) * RotationX(-verticalAngle)

所以你指定的角度实际上是会旋转摄像机的倒角度。如果增大horizontalAngle,摄像机应该向右转(假设是右手坐标系)。这只是定义的问题。