相机/视图矩阵
Posted
技术标签:
【中文标题】相机/视图矩阵【英文标题】:Camera/View matrix 【发布时间】:2014-03-24 20:30:08 【问题描述】:阅读完这篇文章 (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】:您已经进行了反转。视图矩阵是定位相机的模型变换的逆矩阵。这是:
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
,相机应该向右转(假设是右手坐标系)。这只是定义问题。
【讨论】:
以上是关于相机/视图矩阵的主要内容,如果未能解决你的问题,请参考以下文章