各メッシュに一連の頂点と三角形が与えられます。誰もがアルゴリズム、または探し始める場所を知っていますか?特に興味深いのは、減算と結合です。
サンプル画像:http : //www.rhino3d.com/4/help/Commands/Booleans.htm
各メッシュに一連の頂点と三角形が与えられます。誰もがアルゴリズム、または探し始める場所を知っていますか?特に興味深いのは、減算と結合です。
サンプル画像:http : //www.rhino3d.com/4/help/Commands/Booleans.htm
回答:
私はこれを構成的固体幾何学(CSG)と考えています。ここでいくつかのヘルプを見つけることができれば幸いです。
http://www.alsprogrammingresource.com/csg.html
http://createuniverses.blogspot.com/2009/09/qtcsg-constructive-solid-geometry.html
http://www.nigels.com/research/
また、グーグルで建設的なソリッドジオメトリを最初に検索してください。
HTH
考えてみれば、それを解決できると思います。
明らかに、2つのジオメトリが交差する面(三角形)を作成する必要があります。その後、3つのメッシュが残ります:分離したばかりの交差点、ジオメトリ1、およびジオメトリ2。
次に、不要なものを削除するだけです!
それでカバーできると思いますか?難しい部分は、明らかに交差面を作成することです。そのために、一方の各面を反復処理し、その面がもう一方の面の一部であるかどうかを確認します。完全に内部にある場合は、交差メッシュの一部として面をコピーします。部分的に内側にある場合は、交差線に沿って三角形を分割する必要があります。DirectXとOpenGLの両方がこのためのヘルパー関数を持っているか、それは単なる3Dプレーン数学(ベクトル)であると思います。Calculus 3でそのようなことを学びました(または2でしたか?)が、手がかりがない場合は、おそらくmath.stackexchange.comで質問してください。そしてもちろん、顔が外にある場合は何もしません。両方のメッシュのすべての面を反復処理すると、交差メッシュが残ります。
ほとんどの操作は否定と結合で表すことができることに注意してください。一部のジオメトリの否定は、法線が反転したジオメトリです。ユニオンを正しく取得できる場合、他の操作は次のようになります。
Sanderには、CSGの実装について説明するかなり良いブログ投稿があります:http : //sandervanrossen.blogspot.com/search/label/CSG
少なくともロバストにしたい場合は、これは非常にトリッキーなテーマです(浮動小数点は深刻な問題を引き起こします)。
主題に関する計算幾何学/コンピューターグラフィックスの文献、特に最近のこれらの論文を紹介します。
http://homes.cs.washington.edu/~gilbo/repofiles/booleans2009.pdf