0

この記事のように、GPU に衝突検出を実装しようとしています。

https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch29.html

ステップ 2 - グリッド生成では、深度テストを使用して、以前のものよりも大きいパーティクル ID のみを書き込むことを確認します。

ID番号をパーティクルの総数で割ることで、これが機能しています。

gl_FragDepth = v_ID/u_totalParticleCount;

しかし、粒子が多いポイントに到達すると、これに十分な精度が得られなくなるのではないかと心配しています。

RGBA32F テクスチャをフレームバッファの深度アタッチメントにアタッチしようとしましたが、それは許可されていないと思います。

これを行う方法はありますか?または、ID を 0 ~ 1 のスペースに入れるのが唯一の方法ですか?

どうもありがとう!

4

2 に答える 2

3

ウィンドウ スペースの深さは、 で指定された範囲内に固定されglDepthRangeます。この関数 は、指定した値を [0, 1] の範囲にクランプします。

このクランプをオフにする NVIDIA 拡張機能があります: NV_depth_range_float。ただし、それ以外の場合、浮動小数点深度バッファーは主に[0, 1] の精度を高めるために存在し、数値を大きくするためではありません。

深度コンポーネント テクスチャは、深度画像フォーマットを使用する必要があります。RGBA は保存されません。それらはDEPTH_COMPONENTデータを保存します。したがって、32 ビットの浮動小数点画像形式はGL_DEPTH_COMPONENT32F.

于 2018-05-17T23:48:07.697 に答える