私は正投影を使用して2Dエンジンの前面から背面へのレンダラーに取り組んでいます。オーバードローを避けるために深度バッファーを使用したい。16ビットの深度バッファーがあり、Z = 100でZ = 0を見ているカメラ、zNearが1、zFarが1000です。レンダリングされた各スプライトは、Z座標を次第に離れた値に設定し、深度テストでレンダリングをスキップできるようにします下にあるものは何でも。
ただし、Z位置がZバッファ値で終わる方法が非線形であることは知っています。私は、16ビットの深度バッファのフル解像度を利用したいと考えています。つまり、65536の一意の値を許可しています。したがって、レンダリングされるすべてのスプライトについて、Z位置を次の位置にインクリメントして、次の一意の深度バッファー値に関連付けます。
言い換えると、描画されるスプライトのインクリメントインデックス(0、1、2、3 ...)を各スプライトの適切なZ位置に変更して、一意の深度バッファー値を設定します。この背後にある数学についてはわかりません。これを行うための計算は何ですか?
注:私はWebGL(基本的にはOpenGL ES 2)で作業しており、幅広いハードウェアをサポートする必要があるため、gl_FragDepthなどの拡張機能でこれが簡単になる場合もありますが、互換性の理由で使用できません。