読者です 読者をやめる 読者になる 読者になる

落書きノート

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

モデルの配置 (座標変換処理)

座標変換とマトリックス

3Dグラフィックスの世界では、モデルの配置やカメラの配置、パラメータなどを設定するために、「マトリックス」というものを利用します。マトリックスとは、数字を縦横に並べたもので、日本語で「行列」といったりもします。マトリックスに含まれるそれぞれの数字は、マトリックスの「成分」です。そして、3Dグラフィックスの世界で利用されるマトリックスは、次のような4行×4列のものです。

directx9_p74

本来、3次元の座標変換には3行×3列で十分なのですが、欲張って移動・回転・拡大縮小を同時に表すために4行×4列のマトリックスを使用しています。このマトリックスを、モデルを構成する全ての頂点にそれぞれに適用してくゆくことで、結果としてモデル全体が移動・回転・拡大縮小されることになります。このような、マトリックスによる頂点座標の変換処理のことを「座標変換」と呼びます。

directx9_p75 directx9_p75_2

自分のスキル不足で画像の載せ方が分かりにくいのが申し訳ないのですが、上記のマトリックスは以下のように算出します。

directx9_p75_5

そして以下が算出されます。

directx9_p75_3

変換結果は以下のようになります。

directx9_p75_4

座標変換に利用されるマトリックスの1〜3列目はそれぞれXYZ軸に対応していて、元の座標値と各列の値を掛けあわせた値(積)の合計(和)がそれぞれの軸の変換結果となります。つまり、もとの座標値にマトリックスの1列目を掛けあわせた合計がXに、2列目の合計がY、3列目の合計がZになります。ただし、行列の掛け算では、掛け合わされる行列の成分数が同じでなければならないので、元の座標値の最後に成分を一つ追加しています。付け加える成分の値は常に1です。

行列演算というと難しく思うかもしれませんが、見ての通り足し算と掛け算しか使っていません。また、この計算方法を意識する必要はほとんどなく、4行✕4列のマトリックスの16個の成分がおおよそ以下のように移動、回転、拡大縮小と対応していることを覚えておけばいいでしょう。

directx9_p76

左上の領域が回転と拡大縮小に、左下の領域が移動に、右の領域は常に0001がセットされます。

最後に、モデルの移動、回転、拡大縮小を行うマトリックスがそれぞれどのように表現されるかを、参考までに次回、紹介しておきましょう。ここでは、マトリックスのイメージを掴むだけでOKです。

それにしてもTexshopやLatexit、便利ですね。MacOSの環境、便利です。MacTexの消費容量が半端ないですが…。今回のことでHomebrewも活躍してくれました。