座標
3次元空間でのオブジェクトは、拡大・縮小、回転、平行移動を組み合わせることで編集することができます。
そして、同時座標系を用いれば、そうした操作を行列の掛け算だけで実現することができるのです。
座標とは?
ざっくり例えると住所のこと
https://gyazo.com/8b8bed5d862fc1b14636152e9330172d 住所から直交座標へ
https://gyazo.com/8adbc33a46719bee2495c9d53a3ffce4 3次元空間へ拡張する
※Unityは左手系を採用しているため、上の図と軸の向きが異なります。
先ほどの座標を、1列に並べて書くことにしましょう。これがベクトルです。ベクトルを並べると、それが行列となります。https://gyazo.com/68abaddbeca4d1ea9f719e9945bb55e7
足し算・引き算
ベクトル・行列の足し算と引き算は、下のように、同じ場所にある数を各々計算します。
https://gyazo.com/25a43bd024c4c0fe51375bf65892f9c0
掛け算
掛け算は少しトリッキーです。下のように、同じ色で囲われた数を先ず掛け、その結果を合計します。
https://gyazo.com/c97cb04c9a6e057168fdafb8b8e4e696
※ ベクトルを1列に書いても、1行に書いても、本質的な違いはありません。但し、掛け算の順序に注意しましょう!
※ ベクトル・行列の掛け算では、順序が重要です。掛ける順番が違えば、結果も違ってしまいます。
さて、ベクトルで座標を表すことにしましたが、行列はどんな役割を担うのでしょうか。
オブジェクトは複数の点から出来ていることを思い出しましょう。
そして、行列を掛けると、その点たちの座標が変化します。
ということは、行列を掛けることで、オブジェクトを編集することができるのです。
拡大・縮小
下の形の行列を掛けると、オブジェクトの拡大・縮小が行えます。
https://gyazo.com/f887957dd4026c76b7db01130c13fc77 拡大・縮小を担う行列
https://gyazo.com/7805207ffa2da123afdccc6cdcc4b05a ビルはz軸方向に2倍拡大される。
回転
下の形の行列を掛けると、オブジェクトの回転が行えます。
https://gyazo.com/d2968f3d4dcf48215c9c62b925fa9cae 回転を担う行列
https://gyazo.com/dfe824eb7206f539d2ddd75935b7a9f9 ビルはz軸の周りにθ回転される。
平行移動?
上の2種類の行列を組み合わせると、オブジェクトを自由に編集できそうに思えます。
しかし、どう頑張っても平行移動ができないことに気付くはずです。
そこで登場するのが、4番目の座標Wを持つ同次座標系です。
同次座標(X, Y, Z, W)とこれまでの直交座標(x, y, z)は、次のような関係式で結びついています。
https://gyazo.com/9ef11e0786cac75718feebb4688a8e16
4番目の座標Wのおかげで、下の形の行列を掛けると、オブジェクトの平行移動が行えます。
https://gyazo.com/9e384104f191a340f63e747d32cc84aa 平行移動を担う行列
https://gyazo.com/ab5ab06e2f36c0854ea25176bce7bc6c ビルはx軸方向に平行移動される。