我正在使用正交投影为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之类的扩展名可能使此操作更容易,但出于兼容性原因,我无法使用它。