0

Gimbal lockOpenGlに一人称カメラを実装しようとしているときに経験しているのではないかと思います。

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に保ち、forward / right / upベクトルとは独立してlookAtベクトルを計算することで、カメラを正常に実装できました。

于 2012-12-18T07:50:16.057 に答える