DirectXプログラミング06 平行移動、回転、拡大縮小、視点の移動

̃Gg[͂ĂȃubN}[Nɒlj

DirectXお勉強シリーズ。
前回(といっても半年前なのでもうかなり忘れた)までで、
ついにXファイルを表示させるところまでいきました。
今回はメッシュの回転、拡大縮小、平行移動、視点の移動についてです。

一般的な座標変換行列

2次元座標の変換

・回転
 | cosθ sinθ|
 |-sinθ cosθ|
・拡大縮小行列
 |m 0|
 |0 m|
・平行移動行列
頂点(x,y)に次元を1追加して同次座標(x,y,w)として
平行移動行列をかける(w=1とする)。
 |1 0 0|
 |0 1 0|
 |a b 1|

3次元座標の変換

1次元増えたので、回転と拡大縮小は3×3、変換は4×4の行列で可能。

DirectXでの変換行列


・DirectXの変換行列は4×4
 上記より最大4×4の行列を使用するが、
 各変換行列の掛け算ができるよう4×4に統一。
 (掛け算により各変換を含む行列が取得できる)
 (2次元座標は(x, y, 0, w)のようにz=0の同次座標とする。)

平行移動

ワールドトランスフォームを変更することで平行移動が行われます。
D3DXMatrixTranslation関数でx方向3、y方向4、z方向5の平行移動行列を作成し、
D3DXMatrixMultiplyでワールドトランスフォーム用行列に格納し、
SetTransformでパイプラインに適用となります。

/*	4x4行列を宣言											*/
D3DXMATRIXA16 matWorld;	/*	ワールドトランスフォーム格納用	*/
D3DXMATRIXA16 matPosition;	/*	平行移動行列格納用			*/
/*	ワールドトランスフォーム行列初期化						*/
D3DXMatrixIdentity(&matWorld);
/*	平行移動行列を位置ベクトルで初期化						*/
D3DXMatrixTranslation(&matPosition, 3, 4, 5);
/*	ワールドトランスフォームに平行移動行列を結合			*/
/*	第2引数と第3引数を結合した行列を第1引数に格納			*/
D3DXMatrixMultiply(&matWorld,&matWorld,&matPosition);
/*	作成したワールドトランスフォームをレンダリングパイプラインに適用	*/
/*	レンダリング時にこの変換が使用される。					*/
pDevice->SetTransform( D3DTS_WORLD, &matWorld );

回転

ワールドトランスフォームに回転行列を適用します。
執筆予定

拡大縮小

ワールドトランスフォームに拡大縮小行列を適用します。
執筆予定

視点の移動

ビュートランスフォームで行います。
執筆予定

ズームイン・ズームアウト

プロジェクショントランスフォームで行います。
執筆予定


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です