Диапазон значений, записываемых в буфер глубины, будет таким, каким вы хотите их видеть. Обычно они попадают в диапазон от 0 до 1. Фактическое значение, которое записывается в буфер глубины, вычисляется во время преобразования области просмотра на основе значения Z вершины в пространстве NDC (после деления перспективы на w в пространстве клипа).
Значение глубины NDC (Z, после деления перспективы на W) масштабируется по глубине части трансформации области просмотра (которая переводит ваши координаты X и Y в координатное пространство, которое вы ассоциируете с пикселями в окне), а затем масштабируется с помощью (2^n-1)
- что означало быть прочитана как «два в степени n
» - n
это бит точность буфера глубины. Полученное значение записывается в буфер глубины.
OpenGL разбивает определение матрицы преобразования области просмотра на вызовы glViewport и glDepthRange . glDepthRange - это то, что управляет масштабным фактором, отвечающим за определение диапазона глубины, о котором вы спрашиваете. Вы можете вызвать glGetFloatv с помощью GL_DEPTH_RANGE
селектора, чтобы восстановить текущий диапазон. Это позволит вам использовать диапазон, не предполагая, что он равен 0: 1 (хотя на практике в 99,9% случаев его никто не меняет).
Дальнейшее чтение, если вы хотите получить представление о том, как восстановить математику так, чтобы она следовала значению Z на всем пути от пространства глаза до буфера глубины.