6

b-rep モデリング システムを構築するための優れた実装戦略やリソースを持っている人はいますか?

OpenCascade は明らかに b-rep モデリング用の優れたライブラリです (FreeCad と PythonOCC で使用されているものはどちらも非常に優れています) が、ライブラリは巨大で複雑であり、b-rep モデリングの「エンジン」について学ぶための良い出発点ではない可能性があります。

私はかなりの量の研究論文を読みました。基本的な数学はすべてが機能する理由を理解するのに役立ちますが、実装に関するいくつかの疑問が残りました。

ハーフエッジデータ構造は、b-rep 実装でボディに関する情報を格納するための推奨される方法のようです。

したがって、順不同でいくつかの質問があります。

  1. ハーフエッジのデータ構造を使用して、レンダリングは通常どのように実装されますか? 立体の境界に基づく三角測量?

  2. 円形面/曲面は通常どのように実装されますか? たとえば、私が読んだ b-rep の基本的な紹介の 1 つのシリンダーは、プリズムとして内部に保存されていました。押し出された三角形であり、メタデータは、それらが実際に円形であることを示すキャップ面について保存されました。

  3. ブール演算は通常どのように実装されますか? 交差曲線に沿って BSP ツリーを生成し、それらのツリーを組み合わせて新しいジオメトリを生成することについて読んだことがあります。ブール演算を実装する他の方法はありますか?また、どのような長所/短所がありますか?

ありがとう!

コード例を提供したい場合は、言語について心配する必要はありません。質問は、アルゴリズム/データ構造の実装の詳細に関するものです。

4

1 に答える 1

1

私は C# で B-Rep モデラーに取り組んでいます (私は非常に初期の段階にいます: これは巨大なプロジェクトです) ので、あなたと同じ質問を自問します。ここに私の答えがあります:

  1. 三角形分割: この手順はまだ実行していませんが、考えている戦略は次のとおりです: パラメータ空間に面の境界を投影して 2D ポリゴン (穴付き) を取得し、それを耳クリッピング アルゴリズムで三角形分割し、三角形の頂点を再投影します。 3D空間で。曲面の場合、サーフェスをたどるためにポリゴンをグリッドで分割する必要があります。
  2. 円柱の場合、2 つの円形と 1 つの線分の 3 つのエッジがあります。曲線のタイプ ( Segment3dCircle3d...) ごとにクラスがあり、各ハーフエッジはこれらのクラスのいずれかのインスタンスを保持します。各面は、サーフェス オブジェクト (平面、円柱、球など) のインスタンスを保持します。
  3. ここに BSP-Tree に基づく興味深いプロジェクトがありますが、これは B-rep ではなく CSG メソッドを使用しています。これを行う方法についてはまだ調査中ですが、BSP ツリーは必要ないと思います。問題は、交差点とトポロジーの計算にあります。

このテーマに関して私が見つけた最高の本:

于 2016-01-03T19:30:47.073 に答える