2

私は一種のスペース シューターに取り組んでおり、x、y、z 軸の周りで船を回転させて、任意の方向に撃つことができます。船を回転させるには (私は c++ で openGL を使用しています)、x、y、または z 軸を中心に 0 ~ 360 度回転します。カメラは常に同じ方向を向いています (「デフォルト」のように z 軸に沿って下向き)。船が回転しているのを見るだけです。

例: glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); 上記の例では、x 軸を中心に船を -90 度回転させます。通常のスペース シューターのように、ローテーション前に船が正の y 軸に沿って上を向いていた場合、船は回転後に負の z 軸に沿ってインを指します。

私が理解するのに苦労しているのは、いつでも船の「方向」を計算し、それを vector3d (vector3d と呼ばれるクラス内の x、y、z) に変換できるようにする方法です。

現在の位置 (xyz) を vector3d にも格納されている速度に加算して、移動オブジェクトの位置 (別の vector3d、単純に x、y、z) を計算し、それにデルタ時間 (最後のフレーム/更新からの時間) を掛けます。 )。宇宙船から発射体を発射するとき、私が計算するのと同じ方法で発射体の位置を計算できるように、発射体の速度の基礎として船の方向ベクトルを使用したい現在の発射体の位置を速度に deltatime を掛けた値に加算するだけで、他のオブジェクトの位置を計算できます。

私は船の方向を x、y、z の周りの回転の形で持っているので、何らかの方法でこれをベクトル形式で同じ方向を表す vector3d に変換することが可能でなければならないと考えています (それが理にかなっている場合)。

4

1 に答える 1

2

関心のある方向のベクトルを取ります。たとえば、元の回転していない船のz軸です。これはのようなベクトルです(0,0,1)glRotateドキュメントにあるように、回転の行列を適用します。原点を中心に回転しているだけなので、この行列の最後の行と列は無視してかまいません。この行列×ベクトルの乗算の結果は、指定された回転行列の下のベクトルの画像になります。

于 2012-09-09T01:02:13.660 に答える