OpenGLでは、ポイントを中心にカメラを回転させようとしています。カメラはポイントから距離rにあり、回転するとポイントに向かいます。つまり、中心から半径rの円の円周に沿ってカメラを移動させ、円周に沿った任意の点でカメラを中心に向けます。
3D空間で円の中心が(3、0、3)であるとしましょう。
私はもう試した:
// move to center of circle
glTranslatef(-3, 0, -3)
// move a distance away from the circle
glTranslatef(0, 0, r);
// rotate along the y "up" axis
glRotatef(CameraAngle, 0, 1, 0);
cameraAngleは、円の周りを移動する度数です。
私の最終結果は、カメラが円の中心ではなく、まだ原点に沿って回転していることです。誰かがこの問題を解決するのを手伝ってくれる?ありがとう!
次のいずれかを行う必要があります。
または:
gluLookAt
を使用して、カメラを円の中心に向け続ける(*)回転機能は通常、原点を中心に回転します。別の点を中心に回転するにはP
する必要があります:
それは少し混乱しますが、私はあなたがすべきだと思います:
// move camera a distance r away from the center
glTranslatef(0, 0, -r);
// rotate
glRotatef(angley, 0, 1, 0);
glRotatef(anglex, 1, 0, 0);
// move to center of circle
glTranslatef(-cx, -cy, -cz)
順序を変更しないでください。
カメラを回転させてシーン自体を回転させないという煩わしさを気にするのはなぜですか?
はるかに簡単です。 Originを中心にモデルビュー行列を回転させるだけです。まったく同じ結果が得られます。
このような問題は、gluLookAt()で解決する方がはるかに簡単です。カメラのパスを定義し(円は簡単です!)、「中心」点を固定します(つまり、見ているもの)。
考えられる唯一のトリックは、良好なアップベクトルを定義することですが、通常、あまり多くの作業を行わないでください。パスとターゲットポイントが同じ平面にある場合、毎回同じアップベクトルを使用できます。