0

各面のディスプレイスメント マップを適用したプラトニック (またはアルキメデス) ソリッドの結果のサーフェス メッシュを計算したいと考えています。メッシュは、ディスプレイスメント マップの詳細を表示し、水密で多岐にわたる (3D 印刷用) 必要があります。

このために、CGAL の陰関数 3D サーフェス メッシャーを使用することを考えました。次に、各ボクセル ポイントを対応する顔にマッピングし、ボクセル空間から顔に座標系変換を適用し、顔の高さフィールドを調べます。私は各面の変換行列を作成する方法を知っているので、ボクセルがソリッドに含まれているかどうかをテストするために次のアルゴリズムを考えました。

  1. 点 A に最も近い面を見つける
    • 与えられた点 A について、すべての頂点を繰り返してプラトニック (アルキメデス) 立体の 3 つの最も近い頂点を見つけ、距離を A と比較します。
    • 頂点配列の最小インデックスに従って 3 つの頂点を並べ替えます
    • 頂点インデックスから整数 (lexicographix インデックス) を作成します: (v[0] n n+v[1]*n+v[3]*1) ここで、n は頂点の数です。
    • タプルの配列 (辞書式インデックス、面) を反復処理し、同じ辞書式インデックスを持つ面を見つけます
  2. 各面には、事前に計算された変換行列と高さフィールドがあります。変換行列を適用し、高さフィールドを調べて、A がソリッドの内側か外側かを確認します

特に正しい顔を見つけるために、もっと良い解決策があると思いますか? もう 1 つのアプローチは、サーフェス メッシャーを使用せず、面からサーフェスを構築することです。各面のディスプレイスメント マップを取得し、それに変換マトリックスを適用してソリッドを構築しますが、各面メッシュを単純化し、結合する必要があります。結果がウォータータイトでマニホールドになるように (そして、ディスプレイスメント マップに特定の値がある場合、面は穴をサポートする必要があります)、陰関数を使用したボクセル ベースのアプローチが最も一般的なツールであると考えました。

4

1 に答える 1