問題タブ [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 に答える
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 度の立方体を意味します。これらの平滑化されたボクセルはそれほど滑らかではありませんが、私の目的には十分です。

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

c++ - マーチング キューブの実装 - メッシュに三角形がありません

私は現在、C++ を使用して OpenGL でサンプル データ セットをレンダリングすることにより、マーチング キューブ アルゴリズムの理解と実装に取り​​組んでいます。

レンダリングするメッシュに三角形がないという問題が発生しています。以下に示すように、三角形のほぼ半分が欠落しています。

三角形を埋めて四角形を作成することは、問題を解決するための正しいアプローチでしょうか、それとも明らかな何かが欠けていますか?

私が使用したエッジ交差テーブルは、次のリンクからのものです: http://paulbourke.net/geometry/polygonise/

12 ビット エントリのエッジ フラグ配列を使用する代わりに、12 個の if ステートメントがあります (そのうちの 2 つが示されています)。3D 配列のインデックスを使用して、エッジの値 (0 ~ 11) に基づいて x、y、z の値を決定します。

また、補間関数は以下です。

欠けている三角形を示す三角形メッシュ

三角形が欠落しているレンダリングされたデータ セット全体

アップデート:

例を見つけた後、コードを修正し、すべての三角形をレンダリングできました。ここで、オブジェクトを回転させると、オブジェクトが z 軸を反転し始め、オブジェクトが裏返しに表示されるという問題が発生します。

オブジェクトが回転中に z 値を反転し始めるのはなぜですか?

三角形が見つからない問題は修正されましたが、z 軸に反転の問題があります

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

c# - マーチング キューブ アルゴリズムを最適化するにはどうすればよいですか? 類似した顔のグループを組み合わせるにはどうすればよいですか?

マーチング キューブ アルゴリズムの 256 ルックアップ テーブルに 3 ~ 4 日間取り組んだ後、ようやく機能するようになりました。動作するようになったので、最適化を試みたいと思います。私が考えたことの 1 つは、1 つのフロート エリアで大きなフラット エリアを削除することです。

私が考えていることを示す例の画像 私が考えていることを示す例の画像

ルックアップ テーブルを使用してメッシュを生成する方法

私を正しい方向に向けたり、これを解決するのに役立つ何かをありがとう.

編集*私が取り組んでいること

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

javascript - マーチング キューブのパフォーマンス (2d)

マーチング キューブ アルゴリズム (マーチング スクエア?) の 2D バージョンを実装しようとしていますが、私が遭遇した主な障害の 1 つはパフォーマンスの問題です (WebGL と three.js を使用)。品質 (ボクセル/正方形サイズ) とパフォーマンスの間に大きなトレードオフがあることに気付きました。これの原因は、メタボールの中心 (ソリッド領域) にあると思います。

メタボール

明らかに、メタボールの内側の面は気にしません。とにかく完全にソリッドな領域だからです。しかし、表面の残りの部分と同じように扱わずに内部領域を多角化する方法がわかりません。ミックスにメタボールを追加すると、問題はさらに悪化します。

適切な品質を維持し、適切なフレームレートで多くのメタボールをレンダリングできるようにするには、どうすればこの問題を回避できますか?

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

c++ - pcl::MarchingCubesRBF がメッシュを出力しない

放射基底関数に基づくマーチング キューブを使用する必要があるため、PCL で実装されているこのアルゴリズムを調べました。実際、私は PCL v1.6 を使用しているので、機能は次のとおりです。

問題は、それが機能しないことです。つまり、三角形が作成されないことです。出力が「作成された三角形が0個」である場合があり、実行中にマシンがブロックされる場合があります。とにかく私の実装は次のとおりです。

入力のような別のファイルで試しましたが、どちらも機能しません。そのうちの 1 つはhttps://github.com/FabiApfelkern/cloudfinish/blob/master/cat.pcdです。

pcl の実装に関するバグが見つかりました: http://dev.pointclouds.org/issues/768 しかし、pcl v1.6 で解決されているかどうかはわかりません。可能であれば解決方法を教えてください。

私はVS2010でC++を使用しています

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

fractals - インクリメンタルプロシージャル地形生成のためのダイヤモンドスクエアの代替品は?

私は現在、ゲーム用の手続き型地形ジェネレーターをコーディング中です。そのために、私は自分の世界を同じサイズのチャンクに分割し、プレイヤーが歩きながらそれらを 1 つずつ生成します。これまでのところ、特別なことは何もありません。

ここで、私は特に世界が永続的であることを望んでいません。つまり、チャンクがアンロードされ (プレイヤーが遠くに移動しすぎたため)、後で再度ロードされた場合、以前と同じであってはなりません。

私の理解では、3D シンプレックス ノイズをマーチング キューブの密度関数入力として扱うような暗黙のアプローチは、私の問題には適していません。これは、空間内の同じポイントに対して異なる戻り値を取得するためにジェネレーターを再シードする必要があり、チャンクの境界に沿って不連続になるためです。

Midpoint Displacement / Diamond-Square についても調べました。各チャンクの高さマップに隣接するチャンクの境界からの値をシードし、近くに他のチャンクがないチャンクの角をランダム化することで、目的の動作を示すタイル可能な地形を生成することができました。それでも、結果はかなり鈍いように見えます。具体的には、このメソッドはハイトマップに依存しているため、オーバーハングなどはありません。さらに、コーナーのランダム化を使用しても、地形の特徴は小さな領域に限定される傾向があります。つまり、複数のチャンクの丘や同様のランドマークはありません。

今、私がまだ聞いたことがない/考えていない、これに対する他のアプローチがあるかどうか疑問に思っていました。どんな助けでも大歓迎です!:)

乾杯!