O intervalo dos valores gravados no buffer de profundidade é o que você deseja que eles sejam. Normalmente, eles se enquadram no intervalo de 0 para 1. O valor real gravado no buffer de profundidade é calculado durante a transformação da viewport, com base no valor Z do vértice no espaço NDC (após a perspectiva ser dividida por w no espaço do clipe).
O valor da profundidade do NDC (Z, após a divisão da perspectiva por W) é dimensionado pela parte da profundidade da transformação da janela de visualização (que traz suas coordenadas X e Y para um espaço de coordenadas que você associaria com pixels na janela) e, em seguida, dimensionado por (2^n-1)
- que deve ser lido como "dois à potência de n
" - n
é a precisão de bits do buffer de profundidade. O valor resultante é gravado no buffer de profundidade.
OpenGL divide definição da matriz de transformação porta de visualização em glViewport e glDepthRange chamadas. glDepthRange é o que controla o fator de escala responsável por determinar a faixa de profundidade que você está perguntando. Você pode chamar glGetFloatv com o GL_DEPTH_RANGE
seletor para recuperar o intervalo atual. Isso permitirá que você use o intervalo sem assumir que é de 0 a 1 (embora 99,9% das vezes, na prática, ninguém o mude).
Outras leituras, se você quiser ter uma ideia de como reconstruir a matemática para seguir o valor de Z desde o espaço dos olhos até o buffer de profundidade.