4

GLSL フラグメント シェーダーで、シーン内のオブジェクトまでのスケーリングされていない (フロント クリッピング プレーンからの実際の距離) 距離を使用しようとしています。gl_FragCoord.z の値が予想よりも小さいです。私の頂点シェーダーでは、ftransform() を使用して gl_Position を設定します。値が 15 から 20 の間であると予想しているときに、2 から 3 の間の値が表示されます。

実際の目の空間深度を取得するにはどうすればよいですか? ありがとう!

4

1 に答える 1

5

頂点シェーダーから変化するものとして、必要なものをすべて渡します。

フラグメントシェーダーで使用可能なZ値は、z-near / z-far(射影行列から)およびDepthRangeに基づいて正規化されています。ですから、それはあなたが求めているものではありません。技術的には、頂点シェーダーの後に発生するZでのさまざまなOpenGL操作を元に戻すことで再構築を試みることができますが、必要なものを渡すだけではなく、おそらく(投影行列を元に戻すことが非線形であるという事実から始めて)より厄介です。 、 まさに。

ちなみに、計算するgl_ModelViewMatrix * gl_VertexZは、Zに近い平面ではなく、視点から見たZです。

于 2010-04-26T08:38:59.303 に答える