問題タブ [implicit-surface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
math - マーチングキューブを使用した陰関数曲面でのCSG操作
マーチングキューブ(または、これは2Dであるため、マーチングスクエア)を使用して等値面をレンダリングし、セットの差、交差、和集合などのセット操作を実行したいと思います。これは、2つの異なる陰関数曲面から2つの頂点スカラーから選択するだけで簡単に実装できると思いましたが、そうではありません。
最初のテストでは、2つの球の円と、設定された操作の違いを試してみました。つまり、A-B。一方の円は移動しており、もう一方の円は静止しています。これは、頂点スカラーを選択するとき、およびコーナー頂点を内側または外側として分類するときに試したアプローチです。コードはC++で書かれています。OpenGLはレンダリングに使用されますが、それは重要ではありません。CSG操作を使用しない通常のレンダリングでは、期待どおりの結果が得られます。
これは私に奇妙なジャギーを与えます:(ソース:mechcore.net)
CSG操作は補間なしで行われているように見えます。三角形全体を「破棄」するだけです。他の方法で補間する必要がありますか、それとも頂点スカラー値を組み合わせる必要がありますか?私はこれでいくつかの助けが欲しいです。完全なテストケースはここからダウンロードできます
編集:基本的に、マーチングスクエアの私の実装はうまく機能します。壊れているのは私のスカラー場であり、正しい方法はどのようになるのだろうかと思います。できれば、通常のプリミティブ(円、長方形/正方形、平面)に対して、上記で説明した3つの集合演算を実装するための一般的なアプローチを探しています。
編集2:回答者のホワイトペーパーを実装した後の新しい画像は次のとおりです。
編集3:適切なシェーディング/ライティングを使用して、これも3Dで実装しました。
1.大きい球と小さい球の違い2.中央の大きい球と小さい球
の違い。両側の2つの平面でクリップされ、中央の球と結合します。
3.2つのシリンダー間の結合。
algorithm - 適応的な暗黙的なサーフェス ポリゴン化
ここにあるように、基本的に四面体ベースのアルゴリズムである、Bloomenthal のおかげで、私は古い暗黙的なサーフェス アルゴリズムの 1 つを使用しています。これはかなりうまく機能しますが、欠点があります。固定グリッドを使用するため、選択したグリッド サイズに応じて、ポリゴンが無駄になるか、詳細が無視されます。
だから私の質問は、これを改善するための私のオプションは何ですか? モデルの曲率により適応する、自由に利用できる (ソースまたは適切な説明) 暗黙的なサーフェス アルゴリズムはありますか? 私が見逃しているオプションはありますか?
これまでのところ、有望に見える論文を 1 つ見つけました。他の論文へのポインタをいただければ幸いです。
c++ - 表面再構成のための適応型 3D グリッド
http://physbam.stanford.edu/~fedkiw/papers/stanford2001-03.pdfで説明されているアルゴリズムを実装して、3D の整理されていないデータ セット (点群) から表面再構成を実行しました。この方法の主な特徴は、3D グリッド上で曲面を暗黙的に表現し (体積表現とも呼ばれます)、偏微分方程式を解いて曲面をデータに適合させることです。私が書いたコード (C++) は正常に動作し、素晴らしい結果が得られます。しかし、3D グリッドの各ポイントを反復して解を計算するので、これは非常に単純です (つまり、1 次元あたり 128 ポイントのグリッドの場合、200 万を超えるポイントがあります)。
私はこの分野の完全な初心者なので、誰かがアダプティブ グリッド (オクツリーなど) やコードをより効率的にするための戦略を実装するためのリファレンスを提供できれば非常にうれしいです!!!
ありがとう。