OpenGL摄像机俯仰,偏航和滚动旋转

时间:2013-03-04 18:09:22

标签: c++ opengl camera rotation trigonometry

我正在尝试创建一个类来控制OpenGL中的摄像头。 我有三种方法来改变相机的俯仰偏航和滚动。 这些方法使用float参数作为要添加的旋转量。

这些方法中的代码是我需要帮助的地方。旋转存储在Vector3中。 到目前为止,对于改变音高法,我有:

void changePitch(float degrees)
{
    float rads = MathHelp::degreesToRadians(degrees);
    m_rotation.x += cos(m_rotation.y) * rads;
}

这是我自己可以得到的。它有点工作,相机在面向上或向下z轴时向上和向下看,而不是向下看x轴。我尝试添加z旋转:

m_rotation.z += sin(m_rotation.y) * rads;

但这并没有很顺利。

1 个答案:

答案 0 :(得分:3)

假设您有upVectorlookAtVectorrightVector 3D向量指向上方,查看相机的方向和右侧。然后,为了正确地增加音高,你应该按如下方式进行计算:

void changePitch(angle) {
    angle = DegreeToRadian(angle);

    // Rotate lookAtVector around the right vector
    // This is where we actually change pitch
    lookAtVector = Normalize3dVector(viewDir * cos(angle) + UpVector * sin(angle));

    // Now update the upVector
    upVector = CrossProduct(rightVector, lookAtVector);
}

在上面的摘录中,任意使用的函数的名称都是不言自明的。