2011-12-06 15 views
0

私は平面オブジェクトを持っています。前方に移動して左右に回転できるようにしたいと思います。私は、飛行機が直面している方向に進むようにしたい。OpenGLで問題を回転して翻訳する

これは私が持っているコードですが、動作しません。どこが間違っていますか?

directionX=sin(heading*M_PI/180.0); 
    directionZ=-cos(heading*M_PI/180.0); 

    if(keys['W']){ 
     eyeX += directionX; 
     eyeZ += directionZ; 
    } 
    if(keys['S']){ 
     eyeX -= directionX; 
     eyeZ -= directionZ; 
    } 
    if(keys[VK_LEFT]) 
     heading -= 1; 
    if(keys[VK_RIGHT]) 
     heading += 1; 

面が見出しを使用して回転させ、そしてeyeX & EYEZを用いて翻訳されます。

//Aircraft 
     glPushMatrix(); 
      glRotatef(-heading, 0,1,0); 
      glTranslatef(eyeX,eyeY,eyeZ); 
      model.speedDisplayFaceNormals(); 
      //model.drawBoundingBox(); 
      //model.drawOctreeLeaves(); 
     glPopMatrix(); 
+1

どのように機能していないのかをより明確に説明する必要があります。同様に座標軸の向きをどのように設定したかを記述することは理にかなっています。 – unwind

+0

また、あなたのglRotate/glTranslateコード、またはこの物が実際にあなたのマトリックスに影響を与えるコードを投稿してください。 –

+0

Iveはその使い方を追加しました。 – user195257

答えて

2

これは、あなたが取得している実際の行動を知らずに暗闇の中でショットの一種ですが、glRotatefglTranslatefへの呼び出しの順序を切り替えてみてください。

+0

これはほとんど間違いなく問題です。彼のコードでは、最初にオブジェクトを「目」に移動し、(0、0、0)にあるY軸の周りを回転します。目が原点から遠い場合、オブジェクトは巨大アーク。 –

0

OpenGLでは、目は0,0,0にあり、負のZ軸を見下ろしています。したがって、目とカメラの調整をベースにしたシステムを使用する場合は、最初に次の順番で2つの作業を行う必要があります。

1 - システムのカメラの方向に基づいてシーンを回転します。 2 - glTranslatef(-EyeX、-EyeY、-EyeZ)シーン座標系の0,0,0に移動します。

次に、オブジェクトの位置に翻訳し、それに応じてオブジェクトを回転してレンダリングすることができます。私はこれを数年前に書きました。これは、プレイヤーの位置のファーストパーソンスタイルを表すアイ座標を見たときのやり方です。