与えられたもの:これらの点でメッシュを構築する頂点と三角形のセットで定義された3Dメッシュ。
問題:任意の平面に投影された任意に回転したメッシュの2Dアウトラインを見つけます。
投影は簡単です。課題は、平面に投影された三角形のエッジの「船体」を見つけることにあります。このアルゴリズムの研究に関する入力/ポインターについての助けが必要です。簡単にするために、3Dエッジがxy平面に真っ直ぐ下に投影されていると仮定できます。
与えられたもの:これらの点でメッシュを構築する頂点と三角形のセットで定義された3Dメッシュ。
問題:任意の平面に投影された任意に回転したメッシュの2Dアウトラインを見つけます。
投影は簡単です。課題は、平面に投影された三角形のエッジの「船体」を見つけることにあります。このアルゴリズムの研究に関する入力/ポインターについての助けが必要です。簡単にするために、3Dエッジがxy平面に真っ直ぐ下に投影されていると仮定できます。
私は凸解の答えしか見ないので、ここに非凸の私のものがあります。(意図が少し混乱しました。)
2D三角形からすべてのエッジを取得し、それらをグループ化します。2つのエッジが両方のエンドポイントを共有している場合、それらは同じグループにあります。エッジが1つしかないすべてのグループは、シェルの一部になります。
最後に、シェルエッジを結合することにより、シェルエッジを1つのリングに結合できます。
この質問で言及されているアルファ形状手法は、頂点接続が不明な一般的なポイントのセットを処理します。
2D凹型船体を生成するための効率的なアルゴリズムはありますか?
ただし、投影によって保存できる「顔」情報はすでに知っているので、おそらく最善のアプローチではありません。
ブルートフォースアルゴリズムは、特に空間ソート構造が使用されている場合に実行可能である可能性があります。たとえば、各ファセットについて:
別のアイデアは、必要な忠実度に応じて、投影面から元のジオメトリに垂直な光線の束を発射することです。2Dヒット/ミスを作成し、それを使用してエクステントを決定します。
メッシュ投影の2Dアウトラインは、そのエッジの投影のサブセットです。
この観察結果を使用すると、次の方法を使用して2Dアウトラインを決定できます。
この方法では、投影面から見えないエッジも含めて、投影面に直交するすべてのエッジが報告されることに注意してください。たとえば、トーラスを使用すると、投影面の視点から内部の穴が見えないようにトーラスを回転させた場合でも、内部と外部の輪郭が検出されます。どのエッジが表示されているかを分類するには、ある種の可視性テストが必要になります。使用目的がユーザー表示の場合は、正射影行列で計算された深度バッファーを使用して、射影平面の視点からジオメトリをレンダリングし、Z検定を実行して、平面から見えるエッジを決定できます。精度が必要な場合は、視程を決定するために光線/三角形の交差を実行する必要があります。
追加するだけです:投影のエッジを見つける非常に直感的な方法は、裏面カリングです!カリングされた面とカリングされていない面の間のエッジは、アウトラインである必要があります。内部のエッジを非表示にする場合は、zバッファを使用します。背面カリングは、単純に投影後の頂点の順序であり、計算が非常に安価です。
バニーのアウトラインを見つけるデモを参照してください。これは、上記のアルゴリズム の実装です。