2005年7月4日月曜日

第五回タイトル 「マトリクスによる移動設定」

前回、並行移動、回転移動と数値を入力することにより形状の移動を行いました。
今回はさらに上級者に向けてマトリクスによる形状の移動を行います。



マトリクスとは4×4の行列のことです。
行列なんてできないよ~ってお思いの方、ご安心を・・・
行列変換に関わる関数は用意しております。




詳しくは述べませんが簡単にマトリクスの原理を
4×4の行列内に回転を表す3×3の行列とX、Y、Zの位置座標を表す3個の数値、拡大率を表す数値となっています。これだけなのになぜか不思議なことにこれらを計算するだけで空間上における物体の位置が出てしまうのです。
もっと詳しく知りたい人は数学の教科書で勉強しましょう。


では早速マトリクスを使って見ましょう。


まずはソースをダウンロードしてください。
そしてプロジェクトに組み込みます。


組み込んだらクラスをCOpenGLのメンバー変数にCTransform m_Transformと宣言しましょう。もちろんインクルードもお忘れなく
まずは使う関数の説明から


Transrate(double x, double y, double z)
関数説明:平行移動を行います。


RotateX(double Angle)
関数説明:X軸で回転します。


RotateY(double Angle)
関数説明:Y軸で回転します。


RotateZ(double Angle)
関数説明:Z軸で回転します。


これら関数を使用し移動してみましょう。

 double x = 1.0;
 m_Transform.RotateX( x );
 glMultMatrixd(m_Transform.m_XForm);

まずはこのような形で記述してみました。


これを実行するとX軸周りに回転していることが分かるかと思います。


前回の回転移動と何が違うかと言うと毎回同じ値を入力しているのにも関わらず回転していることです。
前回の位置を覚えており、さらに位置を移動させると相対的に移動することが可能です。


これで毎回無駄な計算をせずに済み処理時間の向上にもつながります。


次回はちょっとした表示上のテクニックをお教えします。


 glMultMatrixd 関数説明:
 第1引数:doubleの配列16個
 引数はマトリクスであること。