0

恐怕我Gimbal lock在尝试在 OpenGL 中实现第一人称相机时会遇到这种情况。

rotateFPS_OY(float angle){
    forward = forward * cos(angle) + right * sin(angle);
    right = forward.CrossProduct(up);

}
rotateFPS_OX(float angle){
    up = up * cos(angle) + forward * sin(angle); 
    forward = up.CrossProduct(right);
}

稍后,我调用 gluLookAt:

    Vector3D center = position + forward;
    gluLookAt(position.x, position.y, position.z, 
              center.x, center.y, center.z,
              up.x, up.y, up.z);

在测试这一点时,似乎在几次移动之后,相机滚动(改变了正确的矢量)。计算似乎是正确的,我只是不知道哪里出了问题。

4

2 回答 2

0

计算后归一化向量

于 2012-12-01T15:18:08.453 回答
0

通过将 forward.y 和 right.y 保持为 0 并独立于前/右/上向量计算lookAt 向量,我成功地实现了相机。

于 2012-12-18T07:50:16.057 回答