法線行列

最終更新日26 May 2017 11:45

法線は最初データとして与えられた時は、モデルの面にくっついた座標系です。

mat4 normalMatrix = transpose(inverse(modelView));

なんでモデルビュー行列を逆行列にして転置したものが法線行列なんだろう?
という理由は[1]に詳しく書いてあります(英語)。
要約すると、面に接ベクトルであるタンジェントベクトルと法線ベクトルの内積が0であることを元に、
タンジェントベクトルにモデルビュー行列を掛けた結果をヒントにひも解くと、
結果として逆行列を転置したものになるそうです。

また、法線は方向を示す情報なので行列成分のうち平行移動を示す4列or行目の成分は要らなくて3x3だけでokです。
モデルビュー行列の3x3の中には回転情報が含まれています。

法線行列を掛け算すると、法線はカメラ座標系に変換される。

法線行列はモデルビュー行列を元に求めたものなので、掛け算した結果はカメラ座標系になります。

vec4 n_in_eye = normalMatrix * gl_Normal;


ファイル

サポートサイト Wikidot.com