ポリゴンメッシュで三角形内部テストを実行するにはどうすればよいですか?


10

ここに画像の説明を入力してください(V1, V2, V3)通常の三角形メッシュでランダムに選択された 3つの頂点があります。これらの3つの頂点について、それらの間の測地線距離と(ダイクストラを使用して)パスを計算し、上の図のように三角形のような表面を形成しました。

これで、各パスにある頂点があり、特定の頂点から測地線距離を計算できます。

私がしたいことは、三角形のような領域にある頂点または三角形を取得することです。これどうやってするの?


2
重心アプローチがそれを行うと私が思うことを仮定すると、それは大きなセットではかなり遅くなるでしょう。目的のセットに9つの頂点しかない900万の頂点のセットを想像してください。v1、v2、v3が必要なすべての情報を提供するのに、なぜセット全体を反復するのか。フラッドフィルの答えは、最速の柔軟なソリューションです。柔軟性はありませんが、ジオメトリに現在のようなラインがあると想定できる場合は、スキャンラインが最速のアプローチになります。
Andrew Wilson

あなたはパフォーマンスの問題について完全に正しいです。大きなメッシュでこのアプローチを使用したいので、探しているのは効率的な方法です。実際には、塗りつぶしアルゴリズムもスキャン塗りつぶしアルゴリズムもよく知らないので、それらを見ていきます。ありがとう。
mkocabas 2017

3
グラフを使った塗りつぶしはノードから始まり、境界条件が満たされ、訪問されていない場合はすべての隣接ノードを訪問し、訪問済みとしてマークして、繰り返します(再帰)。変更:パス上のすべてのノードを訪問済みとしてマークし、セット内のノードから開始します。次に、単に訪問チェックを境界条件として使用します。
Andrew Wilson

詳しい説明ありがとうございます。フラッドフィルの方が合理的であると思いますが、フラッドフィルとスキャンラインの両方を実装して、パフォーマンスを比較します。
mkocabas 2017

回答:


4

洪水充填に依存する別の方法があります。まず、エッジが反時計回りのループを形成しているループにエッジデータを配置します。次に、ループの任意の点から開始し、その点を結ぶエッジを選択します。アウトバウンド境界エッジを使用して、それを他のアウトバウンドエッジと交差させます。それがフェース法線の方向を指している場合、それを含めないでください。このエッジから境界エッジに到達するまで続行し、境界エッジで塗りを終了します。まだ訪れていない境界エッジ頂点で続行します。


塗りつぶしアルゴリズムに慣れていません。あなたの説明は少し複雑に思えます。見てくれるまともなリファレンスを提供していただけませんか?ありがとう。
mkocabas 2017

私はいくつかを読んで解決策を得ました。ありがとう。
mkocabas 2017

3

塗りつぶしの使用についてはすでにコメントしましたが、より柔軟であるためどのように改善するのが望ましいでしょうか。別の解決策としてスキャンラインがあります。(私はそれがあなたの幾何学について多くの仮定をしているので可能だと言いますが、示されている特定のセットと多くの同様のもののためにそれは働くでしょう。)

3点の例の場合:セグメントv1、v2とv3が存在する線から交差頂点を見つけます。(v2の左上の頂点)この頂点をv4と呼びます。

For every vertex pair a,b down v1,v4 and v1,v3 
    For every vertex from a to b
        Mark as in the set
For every vertex pair a,b down v3,v2 and v4,v3
    For every vertex from a to b
        Mark as in the set

ここに画像の説明を入力してください

これはスキャンラインと呼ばれます(上の画像では)赤と緑のラインを同時に下に移動し、次に赤と青のラインを同時に移動してラインをスキャンします。

インデックスパターンがある場合、このソリューションは非常に高速です。これはよくあることです。そうでない場合、隣接するどの頂点がライン上にあるかを決定するために計算が必要になります。

面白いのは、スキャンライン、重心テスト(三角形の境界ボックス内)、および塗りつぶしはすべて、3Dレンダリングで三角形を描画する方法です。


2

表面の各点について、表面にバインドされた重心座標を計算し、それらを使用して三角形の内側または外側を確認できると思います。

正確なアルゴリズムは手元にありませんが、このような座標を正確に処理しているように見える以下の論文を見つけました。

サーフェス上の重心座標


回答と参考資料をありがとう。提案された方法を実装してみます。
mkocabas 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.