オブジェクトに変換が適用された3Dシーンをレンダリングする場合、法線はモデルビュー行列の転置された逆行列で変換される必要があります。したがって、法線、modelViewMatrix場合、変換された法線はn ′
オブジェクトを変換するとき、それに応じて法線を変換する必要があることは明らかです。しかし、数学的に、これが対応する変換行列なのはなぜですか?
オブジェクトに変換が適用された3Dシーンをレンダリングする場合、法線はモデルビュー行列の転置された逆行列で変換される必要があります。したがって、法線、modelViewMatrix場合、変換された法線はn ′
オブジェクトを変換するとき、それに応じて法線を変換する必要があることは明らかです。しかし、数学的に、これが対応する変換行列なのはなぜですか?
回答:
これは、逆転置が必要であるという簡単な証明です。平面方程式で定義される平面がとします。ここで、は法線です。次に、この平面を行列変換します。言い換えれば、前の平面方程式を満たすまったく同じ値に対して満たされる新しい平面方程式を見つけたいということです。N M N ' ⋅ M X + D ' = 0 、X
これを行うには、2つの平面方程式を等しく設定すれば十分です。(これは平面方程式を任意に再スケーリングする機能を放棄しますが、それは引数にとって重要ではありません。)それからを設定し、それを減算することができます。残っているのは:
これを、マトリックス表記(ベクトルを1列のマトリックスとして考える)で表現されたドット積で書き直します。
すべての についてこれを満たすためには、次のものが必要です。
今を解くの面で、 n
プレスト!点が行列によって変換される場合、平面法線は、平面方程式を保存するために、の逆転置によって変換する必要があります。M M
これは基本的にドット積のプロパティです。変換が適用されたときにドット積が不変のままであるためには、ドットが付けられた2つのベクトルは、対応するが異なる方法で変換する必要があります。
数学的には、これは法線ベクトルが普通のベクトルではなく、コベクトル(共変ベクトル、デュアルベクトル、または線形形式)と呼ばれるものであると言うことで説明できます。コベクトルは基本的に「ベクトルで点を付けて不変スカラーを生成できるもの」として定義されます。それを達成するためには、通常のベクトルで動作している行列の逆転置を使用して変換する必要があります。これは、任意の数の次元に当てはまります。
特に3Dでは、バイベクトルはコベクトルに似ていることに注意してください。それらは異なる単位を持っているため、まったく同じではありません:コベクトルは逆長の単位を持ち、バイベクトルは長さの2乗(面積)の単位を持っているため、スケーリングの下で異なる動作をします。ただし、方向に関しては同じように変換されます。これは法線にとって重要なことです。通常、法線の大きさは気にしません(とにかく単位長に常に正規化します)。したがって、通常、バイベクトルとコベクトルの違いを心配する必要はありません。