2

OpenGLアプリにwavefront(OBJ)ファイルローダーを実装しました。これにより、顔、テクスチャ、頂点の情報が提供されます。ただし、照明を使用するには、明らかに通常の情報が必要です。これを行う正しい方法は、三角形を構成する3つの頂点の外積を取り、正規化することです。これにより、3つの頂点すべてに適用する法線が正しくなりますか?

ただし、ポリゴンのエッジ上にない面/三角形の場合、各頂点は3回使用されます。では、新しく計算された法線を、以前に計算された法線と平均するだけだと思いますか?

これは、私が考えている方法では非常に費用のかかる作業のようです。すべての頂点を反復処理し、その頂点を使用する各面の法線を計算して平均化します。これを行うためのより良い/より速い方法はありますか?

乾杯

クリス

4

2 に答える 2

2

はい、頂点に隣接する面の面ごとの法線を平均すると、良い結果が得られます。非常にハードなエッジを「ハード」に保つには、通常、計算に角度制限を導入して、90度を超える(またはさらに低い角度の)エッジが平均化された法線を受け取らないようにします。

私が関わっているOSSプロジェクトには、このアルゴリズムの無料で利用可能な実装があります。これはO(nlogn)、完全に一意の頂点で動作します(各面は、3つの頂点を参照しますが、各頂点は1つの面のみによって参照されます。等しい頂点を結合することは、後の段階で行われます)。

完全に異なる頂点がある場合(つまり、各頂点位置が1回だけ存在する場合)、時間内に実行できますがO(n)、スムージングのためにエッジ角度を制限することは、実装がより困難です。

于 2011-04-19T10:46:08.450 に答える
1

ここでわかるように、 OBJは法線の定義をサポートしています。3Dプログラムに大変な仕事をさせてみませんか?:)

于 2011-04-19T10:43:20.913 に答える