Pracuję nad rendererem od przodu do tyłu dla silnika 2D z wykorzystaniem projekcji ortograficznej. Chcę użyć bufora głębokości, aby uniknąć overdraw. Mam 16-bitowy bufor głębokości, aparat przy Z = 100 patrząc na Z = 0, zNear wynosi 1, a zFar wynosi 1000. Każdy renderowany duszek ustawia swoje współrzędne Z na coraz bardziej odległe wartości, umożliwiając testowi głębi pominięcie renderowania wszystko, co jest pod spodem.
Wiem jednak, że sposób, w jaki pozycje Z kończą się wartościami bufora Z, jest nieliniowy. Chcę skorzystać z pełnej rozdzielczości 16-bitowego bufora głębi, tzn. Zezwalając na 65536 unikalnych wartości. Tak więc dla każdego renderowanego duszka chcę zwiększyć pozycję Z do następnej pozycji, aby skorelować z następną unikalną wartością bufora głębokości.
Innymi słowy, chcę obrócić indeks rosnący (0, 1, 2, 3 ...) duszka, który jest wciągany do odpowiedniej pozycji Z dla każdego duszka, aby miał unikalną wartość bufora głębokości. Nie jestem pewien matematyki. Jakie są obliczenia, aby to zrobić?
Uwaga: Pracuję w WebGL (w zasadzie OpenGL ES 2) i muszę obsługiwać szeroki zakres sprzętu, więc chociaż rozszerzenia takie jak gl_FragDepth mogą to ułatwić, nie mogę go używać ze względu na kompatybilność.