メッシュのブール演算


回答:


10

私はこれを構成的固体幾何学(CSG)と考えています。ここでいくつかのヘルプを見つけることができれば幸いです。

http://www.alsprogrammingresource.com/csg.html

http://createuniverses.blogspot.com/2009/09/qtcsg-constructive-solid-geometry.html

http://www.nigels.com/research/

また、グーグルで建設的なソリッドジオメトリを最初に検索してください。

HTH


+1-同じリンク、JustBooを投稿するつもりだった-あなたがそれに私を打ち負かすことに気付くまで!:)
jacmoe

ありがとう!構成的ソリッドジオメトリという用語は、まさに私が必要としていたものです!
lathomas64

@jacmoe-皮肉は今驚くべきものであり、完全になりました:-) THX。
JustBoo

それらのいくつか?:PIは、それらをすべて書き戻したと信じています。:Dそれでも、これらは基本的なCSGのものにすぎません。そこからはかなり毛むくじゃらになります-主要な商用モデリングパッケージでさえ正しくありません。
jacmoe

3

考えてみれば、それを解決できると思います。

明らかに、2つのジオメトリが交差する面(三角形)を作成する必要があります。その後、3つのメッシュが残ります:分離したばかりの交差点、ジオメトリ1、およびジオメトリ2。

次に、不要なものを削除するだけです!

  • BooleanDifference:分離されたパーツとジオメトリを削除します2。
  • BooleanIntersection:ジオメトリ1と2を削除して、孤立した部分を残します
  • BooleanUnion:ジオメトリ1と2をマージし、分離されたパーツを削除します(ジオメトリ1と2をつなぎ合わせてソリッドジオメトリにします)。
  • BooleanSplit:ジオメトリ1、ジオメトリ2を分離し、分離したパーツを複製します(一方をジオメトリ1に、もう一方をジオメトリ2に接続します)

それでカバーできると思いますか?難しい部分は、明らかに交差面を作成することです。そのために、一方の各面を反復処理し、その面がもう一方の面の一部であるかどうかを確認します。完全に内部にある場合は、交差メッシュの一部として面をコピーします。部分的に内側にある場合は、交差線に沿って三角形を分割する必要があります。DirectXとOpenGLの両方がこのためのヘルパー関数を持っているか、それは単なる3Dプレーン数学(ベクトル)であると思います。Calculus 3でそのようなことを学びました(または2でしたか?)が、手がかりがない場合は、おそらくmath.stackexchange.comで質問してください。そしてもちろん、顔が外にある場合は何もしません。両方のメッシュのすべての面を反復処理すると、交差メッシュが残ります。


2

多角形モデルを扱う場合、非多様体ジオメトリを扱う必要があります。つまり、「内側」と「外側」の問題は定義されていません。0か1かがわからない場合、ブール演算を実行するのは困難です。

また、同一平面上のポリゴン、エッジと交差するポリゴン、エッジおよび/またはフェース上にある頂点、およびその性質のものなどのフリンジケースを処理する必要があります。不可能なことではなく、メッシュデータを表現する非常に堅牢な方法と、そのような場合に何が起こるかを厳密に定義する必要があります。


1

ほとんどの操作は否定と結合で表すことができることに注意してください。一部のジオメトリの否定は、法線が反転したジオメトリです。ユニオンを正しく取得できる場合、他の操作は次のようになります。

  • intersection(A、B):=!union(!A、!B)
  • 減算(AおよびB):=!union(!A、B)

Sanderには、CSGの実装について説明するかなり良いブログ投稿があります:http : //sandervanrossen.blogspot.com/search/label/CSG


1
私は私自身のCSGのものを言及するつもりだったが、それ以外どうやら誰かがすでにやった:O)
サンダーバンロッセンを

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.