Normal transformation (2) | Chandler@Berlin

Chandler@Berlin

ベルリン在住

問題は何か: normal の transformation とは何か

コンピュータの内部で物体を移動させたり,回転させたりさせるには,行列を使うのが便利である.多くの場合,コンピュータ内部では物体は三角形やポリゴンなどで表現され,それらの頂点は座標によって表示される.ある物体を回転,移動させるには,この頂点に行列を適用することが通常行なわれる.頂点は通常3次元のベクトルである.

我々は,それぞれの三角形において,面がどこを向いているかの normal ベクトルを定義することができる.この normal も三次元のベクトルである. normalベクトルは照明の計算に必要なので,3D graphics システムで良く利用される.通常のベクトルは行列の適用で変換されるので,この,normalベクトルにも同じように行列を適用するのは straight forward に思われる.しかし,これは上手くいかない.なぜだろうか? これがこの記事のテーマである.


なぜ通常の transformation が normal では上手くいかないのか.

[3]によると, Eric Haines の説明がわかりやすいとある.[6] に同じ説明があり,確かにわかりやすい.同様の説明は [2]にもある.この説明は図 1のようなものである.

Chandler@Berlin-scaling break
Figure 1. Scaling on a normal break the normal.


図1は,z 軸方向から見た z 方向に鉛直に立つ三次元の平面を考えている.この壁平面は (1,1,0) 方向の normal を持つ.つまりこの図は壁を上から見ている.この壁に次の M 行列を適用することを考える.これはx 方向を二倍に拡大する行列である.

Chandler@Berlin-M

壁は x 方向に二倍に拡大されたが,同じ行列を nomal に適用すると normal はこの壁の normal ではなくなってしまう.図 1の左図では,normal は壁に直交しているが,M の変換後(図右)ではもはや直交していない.これが問題である.

では,なぜnormalベクトルの変換は普通のベクトルと異なるのだろうか.