メッシュに操作を適用するために、三角形のスープを実際の構造化メッシュに変換する必要があるプロジェクトに取り組んでいます。メッシュ オブジェクトは、次の項目を持つハーフ エッジ タイプの構造です。
Vertex { vec3 position, int edge /* any half edge leaving the vertex */}
HalfEdge {int vertex, int pair}
Triangle {int vertex[3], int normal[3]}
BoundaryEdge {int vertex, int pair, int next, int prev}
すべてがそれらのアイテムの配列へのインデックスによって参照される場所。すべての内部エッジが接続され、すべてのエッジと境界エッジのペアが設定されたところまで来ました。問題は、境界エッジ ループの次と前のインデックスを設定する方法です (つまり、これらを見つける方法)。接続されていない境界エッジのリストからのループ)。
ループがすべて単純であれば、それは簡単です。ただし、私が使用しているメッシュには、境界「ジャンクション」、つまり頂点を共有する複数の境界ループがある場合があります。これにより、境界ループを作成する際に、複数の可能性のあるエッジのどれがループの正しい次のエッジであるかをアルゴリズムが決定しなければならないポイントが存在するようになります。間違ったエッジを選択すると、頂点に付随するすべてのエッジを反復処理できなくなる可能性があります。
これまでのところ、そのようなジャンクションに遭遇するたびに、コードは基本的に、頂点を出るハーフエッジと頂点に入るハーフエッジの次のインデックスと前のインデックスのすべての可能な割り当てを調べ、最初の割り当てを見つけます。そのため、頂点を離れる任意のハーフエッジから始めて、次のハーフエッジに到達するために edge.pair.next を使用して、他のすべてのハーフエッジ (およびこれらのエッジのみ) にアクセスできます。現在、このソリューションはあまり効率的ではなく (私はそうは思いません)、それが正しいかどうかさえわかりません。また、1 つ以下の三角形に隣接する三角形を追加する場合にも同じ問題が存在します。
a.) 私の解決策は実際に機能するのか、b.) まだ見つけられていないこれらのエッジ ループを見つけるための、より一般的に知られている/使用されている別の解決策はありますか?