2013-07-29 3 views
2

Вот 2 изображения одной и той же 3D-сцены, с той же точки зрения (виртуальная камера), с обратной оболочкой и без нее. Изображения не отображают окончательную сетку, а содержимое буфера глубины.OpenGL - BackCulling - значения буфера глубины

Без BackCulling

glDisable(GL_CULL_FACE); 
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
glEnable(GL_DEPTH_TEST); 
glDepthMask(GL_TRUE); 
glDepthFunc(GL_LESS); 

enter image description here

С BackCulling

glEnable(GL_CULL_FACE); 
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
glEnable(GL_DEPTH_TEST); 
glDepthMask(GL_TRUE); 
glDepthFunc(GL_LESS); 

enter image description here

Вопрос

  1. Почему существует такая разница между 2 изображения? Конечно, можно было бы ожидать разницы, но я не понимаю, почему без BackCulling карта глубины настолько плавная, а с BackCulling значения глубины не кажутся такими непрерывными.
  2. В случае без обратного вызова, для определенного пикселя, каково значение буфера глубины? Является ли он ближе к камере (гладкое изображение выглядит так), или, поскольку многие вещи проецируются на одну и ту же 2-мерную точку/пиксель, я должен ожидать чего-то еще?

Ссылка - 3D сцены - 2D кадров

enter image description here

enter image description here

ответ

4

Они разница, потому что вы выбраковки неправильные лица. Ваши данные сетки четко ориентированы так, что передняя грань отличается от значений по умолчанию OpenGL. OpenGL по умолчанию против часовой стрелки спереди. Ваши данные сетки помещают по часовой стрелке лицевую сторону (или вы в какой-то момент инвертируете сетку).

Итак, вместо того, чтобы переупорядочить данные вершин, измените лицевую поверхность на the aptly named glFrontFace(GL_CW).

+0

Действительно, @NicolBolas, проверяя сетку, обратные поверхности-вершины имеют схожую глубину (в отличие от вершин-вершин), но я не думал о том, что вы предложили. Большое вам спасибо, это работает! Просто добавили предложенную команду выше кодовых строк, упомянутых выше :) –

+0

Также обратите внимание, что вы также можете использовать glCullFace. Это изменяет, отбираете ли вы лицевую или заднюю поверхность (или и то и другое). – Invalid

Смежные вопросы