ゲームプログラミングから見る数学 #5 ~行列・後編~

こんにちは。インターン生の小野です。

いよいよ最終回となってしまいました。
今回は、3Dモデルの描画について書いていきたいと思います。

3次元の空間に物を描画する、ということは、ベクトルを(x, y)のように表すことはできません。
z軸(奥行き)というものが存在するため、(x, y, z)と3つのベクトルで表します。

ベクトルが3つになったので、3×3行列で考えます。
3×3行列になっても計算方法はほとんど変わりません。
単純に計算が少し大変になるだけです。

さて、3次元空間でも行列を扱えるようになったと言いたいところですが、実はそんなことはありません。
3Dグラフィックスの世界では、3×3行列ではなく「4×4行列」を扱います。

変換する前のベクトルが(x, y, z, 1)となっており、4つ目のところには今回1が設定されています。
なぜ1なのかを書くとちょっと長くなるので、この記事では省略します。

4×4行列を扱う理由として「拡大縮小・回転・移動がすべて1つの行列で済む」ということがあります。
その結果、処理を高速化することが出来ます。
上の2つの図を見てみると、3×3行列は9回、4×4行列は16回の掛け算を行っています。
例として拡大してから回転させる、という処理を考えると、3×3行列なら9×2の18回、4×4行列なら16回の掛け算を行うことになります。
比べてみると4×4行列のほうが計算数が少ないですね。
3D処理はほかの処理と比べて特に処理が多いので、1つの行列にまとめて計算するほうが効率がいいのです。

また、行列の性質として、「掛け算の順番を変えると結果が変わる」という性質があります。
行列の世界においては、2×3と3×2は答えが違ってきます。
掛ける順番を間違えないためにも、1回の処理で済ませたほうがいいということが分かります。

では、実際に計算の例をみてみましょう。

拡大縮小の処理です。これは前回も似たような行列を扱いました。
行列の右の列と下の行を除けば、そのまま前回の行列と同じ形になります。

平行移動の処理です。3Dグラフィックスの世界ではこれも行列で扱います。

これらの処理を繰り返し行うことで、モデルにアニメーションをさせています。
みなさんが遊ぶ3Dゲームも、行列による変換を繰り返すことで作られているのです。

「ゲームプログラミングから見る数学」の記事、いかがだったでしょうか。
ここで書いたことがすべてではありません。
説明のために簡略化した部分や、省略した話もあります。
この記事をとっかかりにして、ぜひ自分で調べてみてください。
ここまで読んでいただき、本当にありがとうございました。

興味を持たれた方はお気軽にお問い合わせください。

インターンシップへの申し込み・お問い合わせ先

インターンシップへの申し込み・お問い合わせ先
メールでのお問い合わせは、下記フォームに入力して送信してください。
ご氏名 (例)山田 太郎
メールアドレス 半角英数字:ご入力間違いのないようにご注意ください
メールアドレス(確認用) 半角英数字:ご入力間違いのないようにご注意ください
電話番号 (例)0354339211 ※ハイフン抜きで入力してください
題名
お問合わせ内容

アーカイブ

カテゴリー