転置行列には面白い性質があり、ゲームではこれが良く使われています。
面白い性質というのは以下のとおりです。
t(tBtA)=AB
つまり、計算の順番を入れ替える事ができる訳です。
DirectX8.0ではこの性質を使って座標変換を判りやすくプログラミング
できるようにしています。
(筆者駐:わざわざ判りにくく書かなければいけないようにしてあるとも言える。)
例えば、敵キャラなどの3Dオブジェクトを回転させてから移動させるには、
以下の様に計算するのですが、
これを敵キャラのデータのポリゴンの頂点毎に計算する事になる訳です。
という事は敵キャラの頂点毎に、行列の積を2回計算する事になりますが。
結合法則を使うと、1回にまとめる事ができるので、
高速化の為、結合法則を使って以下の様に書き換えます。
この、
の部分を、別に計算しておいて、ワールドマトリックスなるものを作っておきます。
んでもって、
という風に計算する訳です。
ただ、回転させて移動させるのに、移動×回転という順番がわかりにくいからか、
DirectX8.0では、以下の様にワールドマトリックスを算出しています。
(本当の理由は良くわからない、かえって混乱をまねいているような気がする。)
ほんでもってポリゴンを座標変換して表示する時に、
こんな風に計算する訳です。
そんな訳で、以下の関数は、それぞれ以下の表のような出力をします。
(同様の機能を持つ他の関数も同じです。)
| 関数名 | 出力 |
|
D3DXMatrixRotationX
|
t |
X軸回転 |  |
| マトリクス |
|
|
D3DXMatrixRotationY
|
t |
Y軸回転 |  |
| マトリクス |
|
|
D3DXMatrixRotationZ
|
t |
Z軸回転 |  |
| マトリクス |
|
|
D3DXMatrixTranslation
|
t |
移動 |  |
| マトリクス |
|
|
D3DXMatrixTranslation
|
t |
スケーリング |  |
| マトリクス |
|
行列の話題はこのへんで終わります。
プログラム演習課題へ戻る