落書きノート

ふと自分が気になった事を書いてます

モデルの回転

ステージでは俳優に「右に90度回って」などと指示しますが、3Dグラフィックスの世界でこれと同じことを表現するには、座標系のY軸をつかんでくるくると回します。

このような回転のことを「Y軸周りの回転」と呼びます。同様に、X軸を中心とした回転のことを「X軸周りの回転」、Z軸を中心にした回転のことを「Z軸周りの回転」といいます。

DirectXGraphicsでY軸周りの回転のマトリックスを作るには、D3DXMatrixRotationY()関数を利用します。また、X軸周りの回転やZ軸周りの回転の場合は、それぞれD3DXMatrixRotationX()関数とD3DXMatrixRotationZ()関数を使います。

そして、作成したマトリックスは、移動マトリックスなどと同様の方法で、レンダリングパイプラインに設定出来ます。つまり、モデルをY軸周りに回転するプログラムは、次のようになるということです。

// 何もしないマトリックスの生成
D3DXMatrixIdentity(&m_world);

// 回転のためのマトリックス
D3DXMatrixRotationY(&m_world, D3DXToRadian(45.0f)); // 回転角度

// マトリックスをレンダリングパイプラインに設定
pD3DDevice->SetTransform(D3DTS_WORLD, &m_world);

D3DXMatrixRotationY()関数の第2引数には、回転させたい角度を指定します。正の値を設定すると上から見て時計回りに回転し、負の値を指定すると上から見て反時計回りに回転します。

ただし、D3DXMatrixRotationY()関数には、角度を「ラジアン」という単位で指定しなければなりません。ラジアンとは、「円周に対する円弧の比」を使って角度を表す単位のことで、数学の世界では一般的に使われるものです。とはいえ、DirectXGraphicsには、角度をラジアンに変換するためのD3DXToRadian()というマクロが用意されていますので、ややこしい計算をする必要はありません。

rotate