5

現在のコンテキストの深度バッファを使用して、表示しているテクスチャに影響を与えています。テクスチャは 1 次元でグレースケールです。左から右へは、近いところから遠いところを表します。特定の深度にあるピクセルが多いほど、そのポイントのテクスチャは明るくなります。黒はその深度にピクセルがなく、白はすべてのピクセルがその深度にあります。

glReadPixels()これで、深度バッファを処理し、CPU で解析してからテクスチャに書き戻すソリューションができました。当然、これはアプリケーションの本当のボトルネックです。

デプス バッファがシェーダーなどで分析され、その方法でテクスチャが更新される、すべての GPU ソリューションを探しています。深度値を読み取り、テクスチャ内の対応するピクセルまで増加するフラグメント シェーダを作成することを考えましたが、それにはフラグメント シェーダが他のテクスチャに書き込むことができる必要があります。特に同じピクセルに書き込む必要がある場合は特にそうです。

私が見逃しているトリックやテクニックはありますか、それともこれに CPU を関与させる必要がありますか?

4

2 に答える 2

5

@Tommy の提案へのアップグレードとして、頂点テクスチャ フェッチの代わりに PBO を使用することをお勧めします。

  1. 深度バッファを PBO にコピーします。
  2. PBO を VBO としてバインドし、その中に頂点属性 (深さ) をバインドします。
  3. 深度バッファーの解像度と同じ数の要素で DrawArrays を呼び出します。4...
于 2011-04-13T20:40:00.277 に答える
3

幸いなことに、トリックがあります。頂点シェーダーはテクスチャもサンプリングできます。したがって、多くのGL_POINTSを発行できます。各GL_POINTSは、深度テクスチャの個々のフラグメントに対応します。次に、頂点シェーダーで、深度テクスチャから読み取って、ポイントの変換された位置を決定できます。ポイントのフラグメントシェーダーで、適切なアルファを使用して値をプロットするだけで、必要な累積が発生します。

つまり、頂点シェーダーが1つのテクスチャを読み取り、フラグメントシェーダーがテクスチャを読み取らず、通常のテクスチャへのレンダリングメカニズムを使用してヒストグラムに書き込みます。

于 2011-04-13T10:50:33.053 に答える