0

で3Dゲームを作っていLWJGLます。このゲームでは、矢印キーを押すたびに、現在の向きに関係なく、その方向に画面が回転するようにします。これをコードに実装するのに苦労しています。glRotatef回転 vector3f に基づく3 つの関数を使用しても、これは実現しません。が最初に呼び出されるため、上下の回転glRotatef(rotation.x, 1, 0, 0)が機能しますが、左右は上または下を向いていない場合にのみ機能します。そうであれば、ユニバーサル y 軸を中心に回転し、カメラが回転します。別の実装で を使用できることgluLookAt()がわかりましたが、同じ問題が発生すると思います。

EDIT 回転させたい方向に応じてglRotatef()が呼び出される順序を変更することで問題を解決したと思いました。私のゲームでは、一度に 1 つの軸だけを回転させるので、これでうまくいくと思いました。ある程度は機能しましたが、向きによっては機能しません。

      if(updown){
             glRotatef(rotation.x, 1, 0, 0);
             glRotatef(rotation.y, 0, 1, 0);
        } else if(leftright){
             glRotatef(rotation.y, 0, 1, 0);
             glRotatef(rotation.x, 1, 0, 0);
        }
        glTranslatef(position.x, position.y, position.z);
4

2 に答える 2

0

gluLookAt を使用すると、おそらくはるかに早くそこに到達できますが、原点座標を中心に目の座標を手動で回転させる必要があります。gluLookAt を使用して、3 つの軸すべてを中心に回転する場合は、アップ ベクトルも計算する必要があります。

glRotate を実行する前に glTranslate を追加するだけで、カメラが何かを周回できるようになる予感があります。

いくつかのコードを表示すると、より多くのヘルプが得られる場合があります。

于 2013-03-28T03:20:53.900 に答える