私はフラグメントごとのライティングを行っており、通常のベクトルを修正すると、次のコードが表示されます。MVIvec3 f_normal = mat3(MVI) * normal;
は次のとおりmat4 MVI = transpose(inverse(ModelViewMatrix));
です。mat3(MVI)
では、ステートメント後のリターンとは何ですか?
質問する
23517 次
2 に答える
19
mat3(MVI) * normal
4x4 マトリックスから上位の 3x3 マトリックスを返し、それを法線に乗算します。この行列は「正規行列」と呼ばれます。これを使用して、法線をワールド空間から目の空間に移動します。マトリックスの上部 3x3 部分はスケールと回転に重要ですが、残りは移動専用です (法線は移動されません)。
ワールド空間から目の空間への法線を取るに は、モデル ビュー マトリックスの3x3逆転置が必要です。その場合、元の行列は逆転置と同じです。
于 2012-06-04T22:28:54.037 に答える
3
GLSLタイプから:「別のマトリックスからマトリックスを構築する場合、サイズに制限はありません。したがって、2x4マトリックスから4x2マトリックスを構築できます。対応する要素のみがコピーされます。」。したがって、結果としてMVIの左上の3x3サブマトリックスが得られます。
于 2012-06-04T10:38:37.533 に答える