Діапазон значень, записаних у буфер глибини, є тим, яким ви їх хочете. Зазвичай вони потрапляють в діапазон від 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 весь шлях від простору очей до буфера глибини.