問題タブ [marching-cubes]

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.

0 投票する
4 に答える
5692 参照

performance - マーチングキューブをスピードアップする方法は?

このマーチング キューブ アルゴリズムを使用して 3D 等値面を描画しています (C# に移植され、MeshGeomtry3Ds を出力しますが、それ以外は同じです)。結果のサーフェスは見栄えがしますが、計算に時間がかかります。

マーチング キューブを高速化する方法はありますか? 最も明白な方法は、単純に空間サンプリング レートを下げることですが、これにより結果として得られるメッシュの品質が低下します。これは避けたいです。

私は 2 パス システムを検討しています。このシステムでは、最初のパスで空間をより粗くサンプリングし、電界強度がアイソレベルをはるかに下回るボリュームを排除します。これは賢明ですか?落とし穴は何ですか?

編集:コードはプロファイリングされており、CPU 時間の大部分は、マーチング キューブ ルーチン自体と各グリッド セル コーナーの電界強度計算の間で分割されます。場の計算は私の手に負えないので、立方体ルーチンを高速化することが私の唯一の選択肢です...

両方のシステムへの呼び出しの数を大幅に減らすことができるので、私はまだデッドスペースを排除しようとする考えに惹かれています。

0 投票する
1 に答える
1611 参照

math - マーチングキューブを使用した陰関数曲面でのCSG操作

マーチングキューブ(または、これは2Dであるため、マーチングスクエア)を使用して等値面をレンダリングし、セットの差、交差、和集合などのセット操作を実行したいと思います。これは、2つの異なる陰関数曲面から2つの頂点スカラーから選択するだけで簡単に実装できると思いましたが、そうではありません。

最初のテストでは、2つのの円と、設定された操作の違いを試してみました。つまり、A-B。一方の円は移動しており、もう一方の円は静止しています。これは、頂点スカラーを選択するとき、およびコーナー頂点を内側または外側として分類するときに試したアプローチです。コードはC++で書かれています。OpenGLはレンダリングに使用されますが、それは重要ではありません。CSG操作を使用しない通常のレンダリングでは、期待どおりの結果が得られます。



これは私に奇妙なジャギーを与えます:(ソース:mechcore.net CSG操作は補間なしで行われているように見えます。三角形全体を「破棄」するだけです。他の方法で補間する必要がありますか、それとも頂点スカラー値を組み合わせる必要がありますか?私はこれでいくつかの助けが欲しいです。完全なテストケースはここからダウンロードできますここ


編集:基本的に、マーチングスクエアの私の実装はうまく機能します。壊れているのは私のスカラー場であり、正しい方法はどのようになるのだろうかと思います。できれば、通常のプリミティブ(円、長方形/正方形、平面)に対して、上記で説明した3つの集合演算を実装するための一般的なアプローチを探しています。

編集2:回答者のホワイトペーパーを実装した後の新しい画像は次のとおりです。

1.
違い2.交差点3.
結合

編集3:適切なシェーディング/ライティングを使用して、これも3Dで実装しました。

1.大きい球と小さい球の違い2.中央の大きい球と小さい球
の違い。両側の2つの平面でクリップされ、中央の球と結合します。
3.2つのシリンダー間の結合。

0 投票する
2 に答える
6432 参照

mesh - マーチング キューブによって生成されたメッシュをリアルタイムで滑らかにする方法は?

私は現在、プロジェクト (CT 画像からの人間の歯のリアルタイム レンダリング) にマーチング キューブ アルゴリズムを使用しています。レンダリング結果は次のとおりです。

http://www.freeimagehosting.net/uploads/4c2e2c94be.jpg

MC で生成されたメッシュはあまり滑らかではないことがわかります。MCの出力に適用できるリアルタイムの平滑化アルゴリズムを知っていますか? または、MC の改良版で滑らかな表面を生成できるものはありますか?

平滑化アルゴリズムは高速である必要があることに注意してください。これは、インタラクティブな変形中の等値面の再計算のために、後で MC を約 30HZ で使用する必要があるためです。

0 投票する
4 に答える
2084 参照

c++ - OpenGL、画像から等値面にテクスチャを適用

マーチングキューブアルゴリズムを使用して生成されたサーフェスに2次元テクスチャ(単純な画像)を適用する必要があるプログラムがあります。私はジオメトリにアクセスでき、比較的簡単にテクスチャ座標を追加できますが、座標を生成する最良の方法は私を避けています。

ボリューム内の各ポイントは単一のデータユニットを表し、データの各ユニットは異なるプロパティを持つ場合があります。物事を単純化するために、私はそれらを「タイプ」に分類し、各タイプにテクスチャ(または単一の大きなテクスチャアトラスの一部)を割り当てることを検討しています。

私の問題は、適切な座標を生成する方法がわからないことです。タイプのテクスチャの場所をタイプクラスに保存して使用することはできますが、シームがひどく引き伸ばされます(2つの隣接するポイントがアトラスの異なる部分を使用している場合)。可能であれば、縫い目のテクスチャをブレンドしたいのですが、それを行うための最善の方法がわかりません。ブレンディングはオプションですが、何らかの方法で頂点にテクスチャを付ける必要があります。ジオメトリをタイプごとにパーツに分割したり、テクスチャリングの目的で頂点を複製したりすることは可能ですが、望ましくありません。

可能であればシェーダーの使用を避けたいのですが、必要に応じて、頂点シェーダーやフラグメントシェーダーを使用して、テクスチャのブレンドを行うことができます。シェーダーを使用する場合、それがテクスチャまたはサンプリングする部分であると判断する最も効率的な方法は何でしょうか。タイプをパラメータに渡すのが最も簡単な方法のようですが、時間がかかる可能性があります。

私のボリュームは比較的小さく、各次元で8〜16ポイントです(生成を高速化するためにボリュームを小さくしていますが、特定の時間に多くの画面が表示されます)。等値面をボリュームの2倍の解像度にすることを簡単に検討したので、各ポイントにはより多くの頂点(理論的には8)があり、テクスチャリングが簡素化される可能性があります。ただし、それによってブレンドが簡単になるとは思えません。

サーフェスを作成するために、OpenGL用の視覚化ライブラリとそのマーチングキューブおよびボリュームシステムを使用しています。ジオメトリをうまく生成しました。テクスチャを作成する方法を理解する必要があります。

これを効率的に行う方法はありますか?もしそうなら、何ですか?そうでない場合、ボリュームのテクスチャリングを処理するためのより良い方法のアイデアを誰かが持っていますか?

編集:注意してください、テクスチャは単に色のグラデーションではありません。それは実際にはテクスチャであり、通常はパターンがあります。したがって、それをマッピングすることの難しさ、グラデーションは些細なことだったでしょう。

編集2:問題を明確にするために、いくつかの例を追加します。彼らは物事を混乱させるかもしれないので、明確な事実以上のすべてを考慮し、可能であればこれらを助けてください。

私のジオメトリは常にキューブになっています(キューブにロード、生成、保存されます)。形状が可能な解決策に影響を与える場合は、それだけです。

地形に対して行われるスプラッティングと同様の手法で、パターンや色(ポイントの「タイプ」に応じて固有のもの)で構成されるテクスチャをジオメトリに適用する必要があります(ただし、これは地形ではないため、同じ手法を使用できるかどうかわからない)。

シェーダーはすばやく簡単な解決策ですが、前述したように、可能であればシェーダーは避けたいと思います。主に互換性と開発時間のわずかな増加のために、固定機能パイプラインで使用できるものが望ましいです。わずかな増加にすぎないため、必要に応じてシェーダーとマルチパスレンダリングを使用します。

他に説明が必要かどうかはわかりませんが、必要に応じて質問を更新します。

0 投票する
1 に答える
920 参照

opengl - openglを使用して3Dメタボールを生成するためのリソースを見つけるのに役立ちます

OpenGlとC++を使用して、手続き型のリアルタイムメタボールアニメーションを生成したいと考えています。

メタボールを生成したり、マーチングキューブアルゴリズムを実装したりするための優れたリソース/チュートリアルを誰かが提案できますか?

私はかなりの時間をグーグルで過ごしましたが、OpenGLを使用した基本的なGLSLシェーダー/基本的な手続き型地形の生成/単純な粒子の生成よりも複雑なことは一度も行ったことがないため、もみ殻から小麦を選別するのは難しいと感じています。

助けてくれてありがとう!

0 投票する
1 に答える
1228 参照

image-processing - マーチングスクエアとカプセル化された輪郭

画像は次のとおりです。

ここに画像の説明を入力

マーチング スクエアアルゴリズムを使用して、上記のような入力画像を指定して、次の出力を生成するプログラムを作成できますか。

2 つの鎖状の線分、1 つが上記の輪郭 (丘のような) を形成し、もう 1 つがカプセル化された円の輪郭を形成していますか?

そうでない場合、他にどのように行うことをお勧めしますか?

0 投票する
3 に答える
1429 参照

opengl-es - マーチングキューブ?

私は点でできたオブジェクトを持っています。その点群としましょう。それらの点からオブジェクトをレンダリングしたいのですが、それらの点が一枚の紙に包まれたようにオブジェクトを見せたいです。私はそれをアニメートしたいので、最初に頭に浮かんだのはマーチング キューブでしたが、私のオブジェクトはボールやキューブではなく、変形します。マーチング キューブよりも簡単な方法はありますか?

0 投票する
2 に答える
2910 参照

3d - 2d 点群の輪郭

点群を 2 次元で散らばっています。私の問題は、点群の輪郭を取得するために境界の点を取得したいということです。

この「マーチング スクエア」については知っていますが、このアルゴリズムは通常 2D のピクセルに使用されます。2次元点群や「マーチングスクエア」アルゴリズムの詳細から輪郭を取得する方法を知っている人はいますか? さらに、私の場合、凸包は機能しません。

前もって感謝します。

0 投票する
1 に答える
438 参照

c++ - 3D 等値面と平面の交差後の頂点の並べ替え

ここに別の幾何学的問題があります:

マーチング キューブ アルゴリズムを使用して、点群の 3 次元の三角形化された等値面を作成しました。次に、この等値面を平面と交差させ、交差の等高線を表す多数の線分を取得します。

これらの線分の頂点を時計回りに並べ替えて、閉じたパスとして描画し、塗りつぶしを行うことができる可能性はありますか?

前もって感謝します!

0 投票する
1 に答える
3441 参照

c++ - c ++でオープンソースのマーチングキューブアルゴリズム?

私はマーチング キューブを使用して分子密度を視覚化しようとしていますが、これを行うためのオープン ソース ライブラリが Web 上にある場所があるかどうか疑問に思っていました。多くの人が自分のコードをオンラインに投稿しているのを見てきましたが、コードを「盗む」ことはしたくありません。

彼らに電子メールを送って許可を求めることができることは知っていますが、最終的にはそうするかもしれませんが、リンクするだけでマーチングキューブルーチンを持つコンピューターグラフィックス用のLAPACKタイプライブラリがあるかどうか疑問に思っていました.

これは、LAPACK が単純に所定の線形代数計算を行う関数を持っていることを意味し、ユーザーが独自のコードをゼロから作成する代わりに、単純に LAPACk (またはそれに類するもの) にリンクすることは非常に一般的です。

マーチング キューブ用のこのようなパッケージまたはライブラリはありますか?