| 0からのゲームプログラミング > 回転 |
| Back Next |
| 更新日 2004.04.24 |
| 回転 |
| 今回は、ヘリのプロペラを回転させてみましょう。 Screen.h |
|
Screen.h では、プロペラの角度を保存する変数を追加しています。 ScreenStage.cpp |
|
コンストラクタでは、変数の初期化をしています。 プロペラを回転させるところでは、1フレーム毎に 0.5f ラジアン加えています。角度の範囲を -π 〜 π ラジアンとして考えている為、πラジアンを超えれば 2πラジアンを引いています。この範囲チェックをしなくても、しばらく [ 半永久? ] は大丈夫な訳ですが、一応しています。 ※ PI (π、パイ) は、3.141592654f と内部で定義しています。(DirectX では、D3DX_PI が用意されていますが、単に名前を短くしたかっただけです。) D3DXMatrixRotationY 関数は、y 軸を回転軸にして回転する行列を作成します。第1パラメータには、指定したマトリックス [ 行列 ] に演算結果が格納されます。第2パラメータには、回転の角度 ( ラジアン単位 ) を指定します。y軸方向に対して時計回り [ 右回り ] が正の角度です。(注:右手座標系) 同じように x軸、z軸を回転軸にして回転する行列を作成するには、それぞれ、D3DXMatrixRotationX 、 D3DXMatrixRotationZ 関数を使用します。使用法は、D3DXMatrixRotationY 関数とほぼ同じです。 m_MtrxProp = m_MtrxProp * m_MtrxHeli; 最後に上のコードですが、行列の乗算には、記号 * を使って行います。まず、プロペラを回転させてから、平行移動させています。掛ける順序を逆にする、即ち、平行移動してから回転させると意味が違ってきます。イメージして下さいね。 上の例では、ヘリの中心がy軸上にあるので、掛ける順序を替えても結果は同じになってしまいますが。尚、上のコードは、以下のようにする方がスマートでしょうか。 m_MtrxProp *= m_MtrxHeli; 行列の積は、D3DXMatrixMultiply 関数を使っても出来ますが、記号 * を使った方が簡単ですね。 また、回転行列を作成する関数には、以下のような関数もあります。 D3DXMatrixRotationAxis D3DXMatrixRotationQuaternion D3DXMatrixRotationYawPitchRoll 今回の内容のプログラムは、こちらのページにあります。 |
| 【スポンサード リンク】 |
| Back Next |
| 0からのゲームプログラミング > 回転 |