Почему мы должны очистить буфер глубины в OpenGL во время рендеринга?

Я пытался запустить код OpenGL, он не имел GL_DEPTH_BUFFER_BIT очищено в glClear (), из-за которого я не смог отрендерить свою сцену. Я добавил этот бит, и сцена была визуализирована. Почему необходимо использовать этот бит?

Я могу знать причину этого, чтобы очистить значения буферов глубины, которые использовались графическим процессором ранее, но я просто хочу подтвердить.

8

Решение

Буфер глубины содержит «глубину» пикселя в сцене. Когда OpenGL отображает вашу геометрию, каждый фрагмент (пиксель) сравнивается со значением буфера глубины в этой точке. Если этот фрагмент имеет значение z ниже значения в буфере, он становится новым наименьшим значением и, таким образом, пикселем, подлежащим визуализации. Если нет, не отрисовывайте это — есть нечто, что блокирует это. Это суть об этом — вы можете прочитать в специфику самостоятельно.

Теперь, что происходит, когда сцена меняется? Вы хотите очистить экран так что вы перерисовываете все, но вы также хотите очистить буфер глубины. Зачем? Потому что в противном случае все новые пиксели будут сравниваться со значениями глубины из предыдущего кадра. Это не имеет смысла — их следует сравнивать с теми, в которых они находятся! Вы правы в своих рассуждениях.

17

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]