【问题标题】: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); 
}

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

【问题讨论】:

    标签: c++ opengl matrix trigonometry


    【解决方案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,相机应该向右转(假设是右手坐标系)。这只是定义问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多