.ply ファイルとして保存されている 3d モデルをハーフ エッジ データ構造メッシュにロードする .PLY パーサーを構築しようとしています。
大きな質問で申し訳ありません。私は非常に冗長で、すべての詳細をレイアウトしたことを確認したかったのです。このため、最終的な目標をすぐにもう一度言います。これは、ユーザーが、続く巨大なテキスト ブロックを読む前に、私が何を望んでいるのかを理解できるようにするためです。
1) .PLY ファイルの頂点と面のリストからハーフエッジをメモ化するための適切なハッシュは何でしょうか?
また
2) .PLY ファイルのデータからハーフエッジ構造を埋めるためのより良い方法はありますか?
.PLY ファイルには頂点がリストされ、その後にメッシュの面が続きます。明らかな解決策は、最初に頂点テーブルを埋めてから、面リストを使用してエッジ テーブルを生成することです。問題は、すべてのエッジにパートナー エッジがあるため、クアッド メッシュの場合、ロードする最初のクワッドには 8 つのハーフ エッジが必要になることです。これは最初は問題ではありません。顔の 4 つのハーフエッジを作成し、各エッジを逆にして相手のハーフエッジを作成するだけです。ここでの問題は、4 つの異なる面に関連付けられた 4 つのぶら下がりハーフ エッジが作成されることです。
したがって、攻撃には 2 つの方法があります。最初に面のすべてのエッジを生成し、次にパートナーのエッジをペアにしようとします。私はこのアプローチが本当に好きではありません。多くの検索と並べ替えが必要になるため、プログラム的には効率が悪いようです。
2 番目: 最初に述べたように続行します。指定された最初の面から開始し、ポリゴンの作成に必要なエッジを生成します。エッジが作成されると、その双子も作成されます。ただし、エッジ リストをメモ化するので、すべてのエッジがテーブルにハッシュされます。次に、他の面のエッジを生成するときに、エッジが既に生成されている場合 (以前にロードされた面のパートナー エッジであるため)、テーブルからポインタを取得するだけです。
これは私が立ち往生しているところです。エッジ リストをメモ化するためのインテリジェントなハッシュ関数が必要です。効率を上げるには、衝突を最小限に抑える必要があります。私が今考えているスキームは、それらを作成した 2 つの頂点に基づいてエッジに名前を付けることです。IE エッジ 01 と 10 はツインです。最悪のシナリオでは、すべての頂点が結合される可能性のあるハッシュ テーブルが作成され、これは最終的にサイズ 2^n (n = 頂点の数) になり、これはまったく受け入れられません。私の目標は、衝突を最小限に抑えながら、ハッシュを実際のエッジの数 (= 面ごとのエッジの数の合計) に近づけることです。
*注意: ハーフエッジは「反時計回りのみ」の描画スキームを適用するため、名前の競合は発生しません。エッジを描画する 2 つの頂点に基づいてエッジに名前を付けることで、すべての名前が単一のハーフエッジに固有であることを保証します。