問題タブ [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 投票する
0 に答える
142 参照

c++ - マーチング キューブのノード挿入機能はどのように機能しますか?

MarchingCube アルゴリズムを理解しようとしています。以前の質問はthisでした。今、私はノード(キューブ全体の各グリッドをリンクリストのような構造で保持する)が挿入される1つの関数で立ち往生しています。コードの最初の数行は理解できますが、コードを見ると、コードの一部が冗長であることがわかります。

この関数では、1 から 8 までが完全に理にかなっています (新しいノードを最後に挿入するだけです)。その時点以降にコードがどのように到達する可能性がありますか (9-27 のコードを意味します) ?? それも必要ですか??

パート9-27で何が起こっているのか誰か説明してもらえますか.

0 投票する
0 に答える
1819 参照

c# - デュアル マーチング キューブ テーブル

デュアル マーチング キューブ用のこれらのテーブルの作成が完了しました (Nielson による)。VerticesNumberTable には、各ボクセル (1 ~ 4 個の内部頂点) に対して作成する頂点の配列の長さが含まれます。一方、EdgesTable は、これらの頂点のすべてをボクセルの右端に割り当てて、それらを使用して内部頂点を計算するために使用されます。位置と通常。Edgetable は、元のマーチング キューブ アルゴリズムの triTable と少し似ています。エッジのすべてのセットは、次のセットによって -1 で区切られます。リストは -2 で閉じられるため、この値を使用して循環を断ち切ることができます。

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

matrix-multiplication - デュアルコンタリングおよび二次誤差関数

マーチング キューブ、デュアル マーチング キューブ、適応型マーチング キューブを C# で実装しましたが、目的のためにデュアル コンターリングが必要であることがわかりました。二重輪郭に関するすべての作品を読み、二重輪郭自体の核心である二次誤差関数 (QEF) の最小化以外はすべて理解しました。

現在、その単一の頂点 (3 ~ 6 エッジ) を共有するすべての edgePoints 間の平均を見つけるだけで、内部ボクセルの頂点位置を計算していますが、うまく機能しますが、適切な場所に内部頂点が作成されないことは明らかです。

これが私が作成しようとしているコードです。どんな助けでも大歓迎です

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

c# - マーチング スクエア メッシュを単純化するには?

マーチング スクエア(マーチング キューブに関連する) アルゴリズムをアイソ プレーン上で実行し、データを三角形のメッシュに変換しています。

これは機能しますが、非常に複雑なメッシュ データが作成されます。以下に示すように、これを必要最小限の三角形に単純化したいと思います。

ここに画像の説明を入力

輪郭をループしてみました (ポイント -> セグメント -> ポイント -> ...) が、ポイントに 2 つ以上の接続セグメントがある場合、輪郭が反転する可能性があります。

実行時に実行できるように、ソリューションはかなり高速であることが理想的です。私が使用している言語は C# ですが、おそらく他のほとんどの C ライクな言語から移植できます。

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

c++ - ボセル データの勾配を効率的に計算する

以下のソース コードなど、固定サイズのボクセル データの勾配を計算する最も効率的な方法は何ですか。空間の任意の点でグラデーションが必要であることに注意してください。グラデーションは、マーチング キューブの実装で法線を推定するために使用されます。

更新 1 問題のデモ プロジェクトは次の場所にあります。

https://github.com/mortennobel/OpenGLVoxelizer

現在、出力は下の図のようになっています (MooseBoys コードに基づく):

更新 2 私が探しているソリューションは、視覚化で法線として使用され、以下のような視覚的なアーティファクトを避ける必要があるため、かなり正確なグラデーションを提供する必要があります。

ここに画像の説明を入力

ユーザー例からの更新2ソリューションは次のとおりです。

ここに画像の説明を入力

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

c++ - シャープな特徴を持つバイナリ スムーズ ボクセル

ボクセル (立方体) で構成される 3D ワールドを作成しようとしています。世界を滑らかにしようとしていますが、いくつかのブロックを「ブロック状」に保つ必要があります。マーチング キューブは、世界を滑らかにするための非常に一般的な方法ですが、「ブロック状」のキューブを追加する良い方法は見当たりません。

密度として 1 または 0 しか使用しないので、このビデオのように通常のブロックの世界を単純化し、「ブロック状」の立方体をそのまま維持する簡単な方法はありますか?

私は、シャープな機能などを可能にする他の多くのアルゴリズムを認識しています。しかし、必要なパスは 1 つだけなので、メッシュを完全に平滑化する必要はありません。多数のより複雑なアルゴリズムのいずれかを使用するよりも、これを平滑化するより良い方法はありますか?

滑らかで「ブロック状」の立方体の意味を明確にするために編集します。

ビデオに表示されているメッシュは滑らかだと思います。「ブロック状」の立方体とは、角度が 90 度の立方体を意味します。これらの平滑化されたボクセルはそれほど滑らかではありませんが、私の目的には十分です。