Sto lavorando su un renderer fronte-retro per un motore 2D usando una proiezione ortografica. Voglio usare il buffer di profondità per evitare il sovraccarico. Ho un buffer di profondità a 16 bit, una telecamera su Z = 100 guarda Z = 0, zNear è 1 e zFar è 1000. Ogni sprite renderizzato imposta le sue coordinate Z su valori sempre più distanti, consentendo al test di profondità di saltare il rendering tutto ciò che è sotto.
Tuttavia, sono consapevole che il modo in cui le posizioni Z finiscono con i valori del buffer Z non è lineare. Voglio sfruttare la piena risoluzione del buffer di profondità a 16 bit, ovvero consentire 65536 valori univoci. Quindi per ogni sprite renderizzato, voglio incrementare la posizione Z alla posizione successiva per correlare al successivo valore di buffer di profondità univoco.
In altre parole, voglio trasformare un indice incrementale (0, 1, 2, 3 ...) dello sprite che viene disegnato nella posizione Z appropriata affinché ogni sprite abbia un valore di buffer di profondità univoco. Non sono sicuro della matematica dietro questo. Qual è il calcolo per fare questo?
Nota: sto lavorando in WebGL (fondamentalmente OpenGL ES 2) e ho bisogno di supportare una vasta gamma di hardware, quindi mentre estensioni come gl_FragDepth potrebbero renderlo più semplice, non posso usarlo per motivi di compatibilità.