相机/视图矩阵
Camera/View matrix
读完这篇文章(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
,摄像机应该向右转(假设是右手坐标系)。这只是定义的问题。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 视图中的参数推导失败:take_while
- 了解 GLM- openGL 中的相机转换
- OpenGL相机和相机空间转型的困惑
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- OpenVR:向视图方向移动
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 将所选值(通过视图)从 boost::multi_array 复制到另一个数组 (C++)
- 如何在不使用滚动条的情况下使视图更改
- 通过 API 控制 DJI 相机
- 如何使用gluLookAt围绕OpenGL中的点旋转相机视图
- 基于Quaternion的第一人称视图相机
- GlviewPort问题 - 获得伸展的相机视图
- 嵌入UI视图内部现场相机视图BlackBerry 10
- 计算相机视图矩阵
- GLFW - 用鼠标旋转相机的视图矩阵使其旋转
- 在OpenGL中保存一个特定的相机视图为图像
- 相机/视图矩阵