相机/视图矩阵

时间:2014-03-24 20:30:09

标签: c++ opengl matrix trigonometry

阅读完本文(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); 
}

据说,我要反转这个结果矩阵,但我还没有到目前为止,它到目前为止工作得很好,而且我也没有做任何反转的管道。我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:4)

你已经完成了倒置。视图矩阵是定位摄像机的模型变换的反转。这是:

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,相机应向右转(假设右手坐标系)。这只是一个定义问题。