Estou trabalhando em um renderizador de frente para trás para um mecanismo 2D usando uma projeção ortográfica. Eu quero usar o buffer de profundidade para evitar excesso. Eu tenho um buffer de profundidade de 16 bits, uma câmera em Z = 100 olhando para Z = 0, zNear é 1 e zFar é 1000. Cada sprite renderizado define suas coordenadas Z para valores cada vez mais distantes, permitindo que o teste de profundidade ignore a renderização qualquer coisa que está por baixo.
No entanto, eu sei que a maneira como as posições Z acabam com os valores do buffer Z não é linear. Eu quero fazer uso da resolução completa do buffer de profundidade de 16 bits, ou seja, permitindo 65536 valores exclusivos. Portanto, para cada sprite renderizado, quero incrementar a posição Z para a próxima posição para correlacionar com o próximo valor exclusivo do buffer de profundidade.
Em outras palavras, eu quero transformar um índice incremental (0, 1, 2, 3 ...) do sprite sendo atraído para a posição Z apropriada para cada sprite para ter um valor único de buffer de profundidade. Eu não tenho certeza da matemática por trás disso. Qual é o cálculo para fazer isso?
Observe que estou trabalhando no WebGL (basicamente OpenGL ES 2) e preciso oferecer suporte a uma ampla gama de hardware, portanto, embora extensões como gl_FragDepth possam facilitar isso, não posso usá-lo por motivos de compatibilidade.