
■アフィン変換について
3D関連の習作はこちらで公開してます。

ピ グ ジ ェ ル 牧 場
物体を移動させる簡単な方法は、物体の座標に移動する分の数を足すことです。
例えば、物体を現在の座標からx座標に2、y座標に3移動したい時は、
x’=x+2
y’=y+3
といった具合になります。
2Dのゲームをプログラミングした経験のある方なら、おなじみの方法ではないでしょうか。
そして、これをマトリックスで書くと、

となります。
すべてがこれで済むのなら、何も悩む必要はないんですけどね。
さて、3D空間を歩き回るようなゲームを制作していて、キャラクタの歩行ルーチンを組む時に問題となるのが、キャラクタの「向き」だと思います。

もし、これが2D(俯瞰)なら、方角が画面上で固定されているので、向きの問題は簡単に解決します。
キャラクタを南に前進させたければ、y座標の値を増やすと共に、下向きに歩くパターンに切り換えればいいだけの話です。
シンプルな条件式でも用いれば、キャラクタを任意の方角へ向き直す(つまり前進させる)のは容易でしょう。
ところが3D空間の場合は、そう簡単にはいきません。
なぜなら、キャラクタの移動前の向きによって、移動する方向を正面に向かせる(つまり前進させる)為に必要な角度が異なってくるからです。
しかも、先程のマトリックスの加算では、物体を平行移動できても回転は不可能(つまり向き直せない)なので、この問題は解決できません!