3

2 つのジオメトリ/メッシュ (赤と青) を 1 つにマージしようとしています。しかし、新しいジオメトリを作成し、geometry.merge() を適用した後、すべての内側の頂点と面がまだそこにあることがわかりました (緑色の領域)。

レンダリングされた面に視覚的な不具合が発生し、マージされたボリュームを正しく計算できないため、余分な情報をすべて削除したいと思います.最後の写真のようなものが必要です。最小限の外部/外部のみを含む単一のメッシュ面と頂点を削除し、内側のものを削除します。

ここに画像の説明を入力

ThreeCSG を適用してメッシュを差し引いてみましたが、大きなモデルを読み込もうとすると常にクラッシュすることがわかりました。また、共通の顔を検出するためにレイキャスターを適用しようとしましたが、これも大きなモデルのパフォーマンスに大きな影響を与えます。

ここでは、ThreeCSG が唯一の適切なオプションですか? しかし、すべてのモデルで使用できるわけではないので、破棄する必要があります。メッシュの三角形の数にあまり依存しない高速なものを適用したいと思います。

4

1 に答える 1

6

ブール演算を使用する場合ThreeCSGは、最初からオブジェクトを BSP ツリーまたはノードとして定義するようにしてください。より正確な結果が得られ、ブラウザーをクラッシュさせることなく、より大きなジオメトリを機能させるのに役立つ場合があります。

ここでフィドルを作成しました。ここで、私が何を意味するかがわかります。結果は次のようになります。

ブール演算の結果

  • 左側には、操作で使用する形状が表示されます (視覚化のみ)。
  • 真ん中のブール値はTHREE.PlaneGeometry、BSP に変換された a から BSP に変換された a を減算することによって作成されましTHREE.BoxGeometryた。
  • 右側のブール値の結果は、ネイティブ BSP ボックス オブジェクトからネイティブ BSP プレーンを減算することによって作成されました。

ご覧のように、中間の結果にはさらに 5 つの頂点があり、面も多くなっています (上部、両側、下部に 1 つ、対角面に 2 つ追加)。

この結果に対して別のブール演算を行うと、さらに多くのポイントと頂点が得られます。BSP ツリーは指数関数的に成長します...!


言い換えれば、BSP ツリーはブール演算ごとに大きくなり、遅くなり、最終的にはクラッシュする可能性もあります。
多くのブール演算を実行したい場合は、変換された three.js ジオメトリでブール演算を実行する代わりに、より良い結果を得るためにネイティブ BSP シェイプを作成してみてください。

したがって、代わりに:

myBSP = new ThreeBSP( geometry );

行う:

var polygons = [
    // define your polygons using new ThreeBSP.Polygon( vertices )
];

var node = new ThreeBSP.Node(polygons);

myBSP = new ThreeBSP(node);

そして、ブール演算を行います...

于 2016-02-12T10:12:29.527 に答える