3

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

这些方法中的代码是我需要帮助的地方。旋转存储在 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;

但这并不顺利。

4

1 回答 1

3

假设你有upVector,lookAtVectorrightVector3D 向量指向上,看你的相机的方向和右边。然后,要正确增加音高,您应该按如下方式进行计算:

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);
}

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

于 2013-03-05T06:26:52.487 回答