行列(マトリックス)の基礎知識
リアルタイム 3D レンダリングの世界では、行列が頻繁に登場します。 なぜ行列が必要なのか
行列が 3D レンダリングの世界に欠かせない存在
座標変換は行列で表現される
3D レンダリングと行列
さて、行列は数字の詰め合わせであるなどと安易に書きましたが、実際に行列とはどのようなものなのでしょうか。
行列には様々な種類がありますが、その一つに正方行列があります。これは、行列の行と列が同じ要素数になっている行列のことです。
一般的な 3D レンダリングの世界では 4 x 4 の行列を用いるのが一般的
3 x 3 の正方行列や、あるいはその他の行列ではなく、どうして 4 x 4 の正方行列を使うのか
難しい
3次元空間の特定の条件の変形は、4次元の単なるアフィン変換をしたものを射影したものに等しいから
わかってなくても計算はできる
実際の 3D レンダリングに際しては、
モデル座標変換・ビュー座標変換・プロジェクション座標変換のそれぞれに行列を用います。
具体的には、それぞれの座標変換を表す行列を個別に用意し掛け合わせます。
そうして最終的に出来上がった変換行列を WebGL の頂点シェーダに渡します。
頂点シェーダは渡された座標変換行列を元に、描画するモデルの座標を変換して、画面に映し出せる状態に加工します。つまり、座標変換行列を操作することで、モデルをどのように描画させるのかを変化させることができるのですね。
行列は、上記のそれぞれの変換についての情報を保持することができ、たとえばモデル変換行列であれば、描画したい 3D モデルの位置や、拡大縮小の有無、そして回転しているかどうかなどを一つの行列で定義できます。
ビュー変換行列ではカメラの位置やカメラの向き、そしてカメラがどこを見ているのか(注視点)などを一つの行列で定義します。プロジェクション変換行列であれば、ディスプレイの縦横の比率(アスペクト比)や視野角などを定義できます。
モデル、ビュー、プロジェクションの行列をかけるときの注意
行列は非可換なので、かける順番を間違えると結果が変わる
注意がいる