STL ファイル内の 3D オブジェクトに変換を適用しようとしています (構造化メッシュ オブジェクトを作成せずに)。手順は次のとおりです。STL ファイルで法線と面の情報を 1 つずつ読み取り、変換を各頂点と面の法線に適用し、新しく計算された値を別の STL ファイルに書き戻します。生成されたファイルの頂点は問題ありませんが、法線が間違っています。頂点に対して行うように、変換を法線に適用することはできないようです。そんなことがあるものか??
5 に答える
2
どちらにもほぼ同じ変換を適用できますが、次の 2 つの点に注意してください。
- 法線は方向であるため、4x4 マトリックスの位置部分は適用しないでください。それを適用しないようにするには、行列で乗算する前にベクトルを Vector(x,y,z,0) としてフォーマットするか、専用の TransformVector() 関数を使用してゼロで乗算される命令を回避します。
- 適用するマトリックスにスケールが含まれている場合、法線も同様にスケーリングされます。つまり、典型的な NL ライティング ドット積を実行すると、結果が本来よりも明るくまたは暗くなります。通常、変換を適用した後に再正規化するか、変換によって正規化が解除されないようにする必要があります (これが行列の逆転置の目的です)。
于 2008-11-10T19:27:54.607 に答える
2
法線の変換を確認する必要があります。
実際、ジェフ、あなたは部分的にしか正しくありません。ベクトルについては、その通りです。しかし、意味が少し異なる法線の場合は、上位 3x3 で変換する必要がありますが、反転してから転置します。
于 2008-11-10T18:34:37.833 に答える
1
ベクトルの変換は、点の変換とは異なります。変換は適用できず、回転のみが適用されます。
于 2008-11-10T17:22:26.717 に答える
1
Rodrigo Lopez の引用: 法線は方向であるため、4x4 行列の位置部分は実際には適用されるべきではありませんが、再正規化によって修正されます。
再正規化はそれを修正しません: 法線が (1,0,0) であると仮定し、それを (-2,0,0) で変換します => 法線は (-1,0,0) になり、正規化され、間違っています。法線は変わらないはずだからです。
于 2008-11-10T19:40:57.763 に答える
-1
元のマトリックスを使用する代わりに、マトリックスの逆転置を法線に適用する必要があります。
また、法線の w 座標を 0 (ポイントのように 1 ではなく) として変換する必要があります。
于 2008-11-10T19:12:27.243 に答える