はじめに
こんにちは、主にUnrealEngineとBlenderを独学で勉強している大学生です。
記事を書いた方が記憶に残ると思い、はじめてみました。もし間違ってることがあったら教えてください。無断転載にはならないようBlenderの操作(やUnrealEngineの操作)と絡めて差別化します。
※追記) 11/6までの記事は間違いが多数ありました。点の座標と図形の大きさを混同していました。正しい考え方は、図形の大きさが点の座標に紐づいているという考え方です。下にある行列の計算は点の座標の計算です。点の座標が変わることで、それに紐づいている図形の大きさや角度が変化します。
なぜ3DCGソフトは拡大縮小、回転、平行移動ができるのか?
結論から言います。行列の掛け算と斉次座標(同次座標)系が使われているからです。
まず前半で拡大縮小と回転の仕組みを説明し、後半で平行移動の仕組みについて解説します。(ただし、原点周りの拡大縮小、回転を取り扱うこととする。原点以外は合成変換という処理が入る。詳しくは参考文献の書籍p37)
拡大縮小と回転は行列の掛け算で再現されている?
\begin{pmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 2
\end{pmatrix}
\begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}
を掛け算すると
\begin{pmatrix}
1 \\
1 \\
2
\end{pmatrix}となる。
これは3DCGではどう表現されているのでしょうか?みなさん2×2×2の立方体を考えてください。
Blenderをやられている方はデフォルトの立方体を選択した状態で GX1→GY1→GZ1 を押して下さい。黄色の点の座標が(1,1,1)になると思います。(黄色の点は立方体の中心にある点のこと)
この状態から上の真ん中にあるターゲットマークみたいなアイコンから3Dカーソルを中心をクリックします。この操作の目的は原点を中心にして立方体の拡大縮小を考えるためです。
2×2×2の立方体---黄色の点(1,1,1)
次に、立方体を選択した状態で S→Z→2 を押します。
その状態で数字の2を押します。そうすると立方体の高さが2倍になると思います。これの理屈は黄色の点の座標が(1,1,2)になったので、それにひもづいている立方体もZ軸に対して2倍になったためです。
つまり、点(1,1,1)→点(1,1,2)に変化することで2×2×2の立方体から2×2×4の立方体に拡大したと解釈できます。このようにしてオブジェクトの拡大縮小を行っています。
2×2×4立方体(Z軸方向に2倍)---黄色の点(1,1,2)
続いて回転について解説します。
\begin{pmatrix}
cosπ/3 & -sinπ/3 & 0 \\
sinπ/3 & cosπ/3 & 0 \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1 \\
1 \\
1
\end{pmatrix}
を掛け算すると
\begin{pmatrix}
-0.365 \\
1.365 \\
1
\end{pmatrix}
この数式は3DCG上では立方体が原点を中心としてπ/3つまり60度反時計回りに回転したことを示します。Blenderで再現してみましょう。
この状態から上の真ん中にあるターゲットマークみたいなアイコンから3Dカーソルを中心をクリックします。この操作の目的は原点を中心にして立方体を回転させるためです。
すると原点を中心として立方体が反時計回りに60度回転したのが分かると思います。よく画像を見てもらうと黄色の点の座標が(-0.365,1.365,1)ぐらいになってると思います。このように行列の掛け算を考えることによって、回転を座標の変換として扱うことができます。
平行移動
記事途中書き。(平行移動)
参考文献
書籍:3Dグラフィックスのための数学入門 クォータニオン・スプライン曲線の基礎
Webサイト:【Unity】同次座標系をマスターしよう -「w」の正体まで徹底図解!


