4

3Dフィルタリングアプリケーションのカメラビューから深度バッファを取得したいのですが。現在、深度コンポーネントを取得するためにglReadPixelsを使用しています。[0,1]値の代わりに、深度バッファーの真の値、またはワールド座標でのカメラまでの真の距離が必要です。

GL_DEPTH_BIASとGL_DEPTH_SCALEで深度値を変換しようとしましたが、うまくいきませんでした。

glReadPixels(0, 0, width_, height_, GL_DEPTH_COMPONENT, GL_FLOAT, depth_buffer);
glGetDoublev(GL_DEPTH_BIAS,  &depth_bias);  // Returns 0.0
glGetDoublev(GL_DEPTH_SCALE, &depth_scale); // Returns 1.0

これはデプスバッファから真のz値を取得するのと似ていますが、シェーダーではなくメインメモリにデプス値を取得したいと思います。

4

2 に答える 2

3

gluUnproject()以前のように、Zバッファから正規化された深度値を取得した後に使用してみてください。モデルビューマトリックス、プロジェクションマトリックス、およびビューポートの値を指定する必要があります。これらの値は、およびで取得できglGetDoublev()ますglGetIntegerv()

于 2011-07-12T04:26:27.350 に答える
2

[0,1]値の代わりに、深度バッファーの真の値、またはワールド座標でのカメラまでの真の距離が必要です。

デプスバッファには、カメラからの距離値は含まれていません。深度値は、カメラの平面に対する垂直距離です。したがって、カメラまでの半径方向の距離が本当に必要な場合は、シェーダーでそれらを計算し、バッファーに書き込む必要があります。デプスバッファは役に立ちません。

しかし、シェーダーではなく、メインメモリに深度値を取得したいと思います。

次に、シェーダーではなくC / C ++(またはその他の)コードを除いて、これらのシェーダーが行うことを実行します。数学はどちらの方法でも同じです。デプスバッファの各値をループして変換するだけです。

于 2011-07-12T02:22:46.480 に答える