阅读完本文(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);
}
据说,我要反转这个结果矩阵,但我还没有到目前为止,它到目前为止工作得很好,而且我也没有做任何反转的管道。我在这里缺少什么吗?
答案 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
,相机应向右转(假设右手坐标系)。这只是一个定义问题。