2011-12-27 13 views
0

このシナリオで私を助けてもらえますか?私は3D世界を持っており、カメラを一人称の方法で配置したいと考えています(実際の目的は一人称小惑星ベルトを通過しながら宇宙船の内側からの視界)。この場合、glulookatのパラメータは何ですか?私は考えました:glulookat()usage-openglとC++

gluLookAt(30, 30, 30, 0, 0, 0, 0, 1, 0);//the up vector would be normal y axis 

これは間違いないでしょうか?

カメラを船に沿って移動させたい場合は、どうすればいいですか?船を動かすとき、私はまた、目の座標を氷塊から動かすべきですか?目の座標(glulookatの最初の3つのパラメタ)のようなものは、船の座標と同じにする必要がありますか?

+1

通常、upはyの方向にあります。 z軸は「画面内」を指しています。 –

+0

これをクリアしていただきありがとうございます。 – biggdman

答えて

1

あなたが提案するgluLookAt呼び出しは、カメラを(30,30,30)に置き、原点をポイントします。

gluLookAt(Ship_Position_X,Ship_Position_Y,Ship_Position_Z, 
      Ship_Forward_X,Ship_Forward_Y,Ship_Forward_Z, 
      0,1,0); 

これはもっと必要なものです。カメラが船の動きに従うように、フレームごとに呼び出す必要があります。あなたがバレルロールを行うには、アップベクトルを追跡するための追加の変数が必要です。

私はそれらを取るためにgl関数をオーバーロードすることができ、より短い関数呼び出しを書くことができるように、座標を保持するための何らかの構造体を持っています。

// roll your own glVec, or use a co-ordinate class provided by a library you happen to be using. 
inline void gluLookAt(glVec position, glVec forward, glVec up) 
{ 
    gluLookAt(position.x,position.y,position.z,forward.x,forward.y,forward.z,up.x,up.y,up.z); 
} 
関連する問題