問題タブ [openvdb]

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 投票する
1 に答える
828 参照

c++ - OpenVDB のグリッドでの変換と CSG 操作

OpenVDB は本当に素晴らしいようで、ノードのアドレス指定は本当にスマートです。特にCSG操作など、理解できない操作がいくつかあります。これはコード例です。入力として 2 つの引数を取ります。

  • 三角形のメッシュから作成されたレベル セットを表す、グリッドが 1 つだけの vdb 入力ファイル
  • 操作の結果を格納する vdb 出力。

アルゴリズムは入力を受け取る必要があります。

  1. gridA に deepCopy を作成します
  2. gridB に deepCopy を作成します
  3. M_PI/4.0f の Y 軸に沿って gridB を回転します。
  4. gridA と gridB の間で csgUnion を実行します
  5. すべてのグリッドを vdb 出力ファイルに保存します。

衝突で高レベルの詳細を必要とする物理シミュレーションのために、classicoctree アルゴリズムの代わりに VDB グリッドをデータ コンテナーとして使用しようとしています。

ワールド座標とグリッド座標の間の変換の概念を理解しています。理解できないのは、剛体オブジェクトのようにレベルセットを平行移動または回転させるなど、ツリー内でデータの変換を実行する方法です。この例では、ワールドとラティスの間の変換のみを変更していると思います。

これが結果です (レベルセットとボリュームも同じです):gridA は元のロードされたグリッドである必要があります初期グリッド変換さgridB は 45 度回転したグリッドであり、実際にはれたグリッド、回転が実行されているようです...組合との結果グリッド...しかし運が悪い...最終結果はありませんか?

提案はありますか?

添付: 1 つの例と、私が使用しているLINK REMOVED へのリンク (申し訳ありませんが、133MB です...)

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

c++ - 関数の引数に型がありません

OpenVDBドキュメントで次のコードを見つけました。

タイプが指定されていない場合、引数のデフォルトが になることを以前に見たことがありますが、これはこのケースに当てはまりますか? intTopologyCopy2行下でオペレーターとして呼び出されています。

上記の宣言は何をする/意味しますか?

編集:受け入れられた回答は、何が起こっているかを説明しています。解決策は、関数を次のように呼び出すことです

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

c++ - OpenVDBを使用して最も近い点のクエリを行う方法は?

まず、openvdb を使用して最も近いポイントを見つける方法は?

第二に、それClosestSurfacePointを行う正しい方法がある場合、それをどのように使用するのですか?

NNS を高速化するために OpenVDB を使用した ICP に関する論文を読みました。

( http://www.pmavridis.com/research/effective_sparse_icp/ )

著者は、NNS に openvdb を使用することで速度が向上したと述べています。

そして、他の何人かの人々が同様の方法で同じことを達成しました。

だから、私はそれを自分で試してみたかったのです。

試行錯誤の末、ようやくコンパイルに成功。

しかし、私は少し混乱しています。

私の見解では(オンラインクックブックを含む多くのドキュメントを読んだ後)、サンプラーはそれを行うように見えました

だから、私はこれらの例を試しました。

私は以下に説明するようなことをしました

オブジェクト: クエリ ポイント (ijk) に最も近いグリッド内のポイントを見つける

  1. ポイントを作成 (またはポイントをロード) し、vec3d 形式に変換する
  2. ポイント インデックス グリッドを作成します。
  3. クエリ ポイントの設定(ijk)
  4. インデックス グリッドのアクセサを設定
  5. point sampler() の関数呼び出し

ただし、これらの例は 0 または 1 を示しています。

まったく同じ位置が見つかった場合は 1 を返します。そうでない場合は 0 を返します。

おそらく、このポイントサンプラーは私が探しているものではありません。

他の方法で試してください。

他の候補は

以下に書かれているコードを試してみましたが、betajippity の作業と似てい ます https://github.com/betajippity/Ariel/blob/master/src/grid/levelset.cpp

しかし、ベクトルのためにエラーになります

最後の行

原因 Debug Assertion が失敗しました。

これらのことにどう対処したらよいかわかりません。

openvdb の内部を変更できないためです。関数を呼び出したところ、エラーが発生します:(

これについて何か考えがある場合は、助けてください。

繰り返しますが、質問は..

openvdbを使用して最も近い点を見つける方法は?

ClosestSurfacePointそれを行う正しい方法である場合、それをどのように使用しますか?

よろしくお願いします。