0

私の仕事は、水の粒子と水面の衝突を伴う噴水シミュレーションを作成することです。ここまでで、1 つのシェーダーを使用して水面を作成し、別のシェーダーを使用して噴水パーティクルを作成しました (噴水パーティクルのシェーダーもトランスフォーム フィードバック メカニズムを使用しています)。

私の質問は、噴水の粒子と水面の衝突をどのように作成/検出できますか? - 飛行機のシェーダー/GL バッファーと粒子のシェーダー/GL バッファーから情報を取得/接続して衝突を起こす方法を知りたい - 水波の方程式と衝突検出の方法を知っている - 何のためにわからないOpenGL の API を許可します。

4

2 に答える 2

4

あなたが説明している問題は、OpenGL の仕事内容と一致しません。OpenGL は描画 API であり、その目的は素敵な絵を描くことです。衝突検出などは、OpenGL の範囲外です。

ただし、OpenGL を使用して画像ベースのアルゴリズムを実装し、問題に一致する画像ベースのテストを実行できます。あなたの場合、正投影で水面を上からレンダリングし、深度テストを有効にして各パーティクルをレンダリングします。Occlusion Queryを使用して、パーティクルがまだ表示されているかどうかをテストします。フレームごとに、粒子の可視性が変化したかどうかを比較します。粒子が消えた場合は、水中に移動して衝突しました。

この方法は機能しますが、率直に言って、完全に設計しすぎだと思います。地上の粒子の高さが平均水位よりも大きいかどうかをテストするだけです。小さな波紋の場合、これは十分に正確です。

于 2012-12-10T18:42:12.113 に答える
0

あなたがする必要があるのは、OpenGL との OpenCL 相互運用の可能性を調査することです。OpenCL を使用したパーティクル衝突シミュレーション (OpenGL を使用したレンダリング) を示す nVidia サンプルについては、こちらを参照してください。OpenGL はコンピューティング API として非常に制限されており、フープを飛び越えずにやりたいことを行うのは非常に困難です (可能だと思いますが、それほど簡単ではありません)。

于 2012-12-10T18:41:59.033 に答える