1

基本的なことをやっています

1) 位置を計算する
2) 「gl_Position」に保存する
3) 次に、位置情報に基づいて深度を vec2 に保存する

gl_Position = vec4( vVertexPos, 1 ) * mMVP;
vDepth = gl_Position.zw;

vDepth は、シェーダーの上記の変数で、フラグメント シェーダーに渡します

out vec2 vDepth;

フラグメントシェーダーでは、フラグメントの深さを gl_FragDepth に保存します

gl_FragDepth = vDepth.x / vDepth.y;

私の深度値はすべて 1 の値に近いです。何か間違ったことをしていますか? 線形深度値を取得するステップが欠落している可能性はありますか? カメラ情報を計算すると、ニア クリッピングは 0.01 で、ファー クリッピングは 200.0fi です。ニアがそのクリッピング スペースの周囲にある必要があります。

4

2 に答える 2

4

ニア プレーンがビューアに近づくほど、深度バッファの精度がビューアに近づくほど速く使用されます。ニア プレーンを目から押し出し、ファー プレーンまでの距離を同じにすると、ビュー ボリューム全体で奥行きの精度が均一になります。vDepth は、1/w に従ってパースペクティブ補正方法で補間されています。

于 2014-09-10T03:57:14.133 に答える