OpenGL - 第一人称相机

时间:2012-12-01 15:06:25

标签: opengl

当我试图在OpenGl中实现第一人称相机时,我担心我遇到Gimbal lock

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

测试时,似乎在几次移动后,相机会滚动(更改右矢量)。计算似乎是正确的,我只是不知道出了什么问题。

2 个答案:

答案 0 :(得分:0)

计算后标准化矢量

答案 1 :(得分:0)

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