объектов на картинную плоскость (экран) часто оказывается, что отдельные
части объектов (или даже некоторые объекты сами) оказываются скрытыми от наблюдателя другими объектами сцены
FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.
Email: Нажмите что бы посмотреть
Точные аналитические методы (continuous)
Приближенные методы (point-sampling)
По способу изображения объекта:
По пространству, в котором решается задача
По точности получаемого решения
A
B
C
D
Нормали к граням А и В смотрят в сторону наблюдателя (наблюдатель находится в положительном полупространстве по отношению к плоскости, проходящей через соответствующую грань). Такие грани называются лицевыми (front-faced).
Для граней C и D нормали направлены от наблюдателя, их называют нелицевыми (back-faced).
foreach(p in pixels)
if(p.z < zBuffer[p.x, p.y])
draw( p );
zBuffer[p.x, p.y] = p.z;
}
Если сперва вывести объект В, а потом вывести объект А поверх него, то в результате получится корректное изображение (для тех пикселов, которые принадлежат как проекции грани А, так и проекции грани В, последним будет выведено значение, соответствующее грани А, которое и должно быть видно).
Тогда ни одна из граней, лежащих в том же полупространстве, что и наблюдатель, не может быть закрыта ни одной из граней из другого полупространства. Таким образом, удалось осуществить частичное упорядочение граней исходя из возможности загораживания друг друга.
void BSPNode::Draw() {
if(face->Sign(viewer) == 1) {
if(negative) negative->Draw();
face->Draw();
if(positive) positive->Draw();
} else {
if(positive) positive->Draw();
face->Draw();
if(negative) negative->Draw();
}
}
glEnable(GL_CULL_FACE); glDisable(GL_CULL_FACE);
x
y
z
A1
A2
A3
A1
A3
A2
e2
e1
e2
e1
glDepthFunc(GLenum type);
type = {GL_ALWAYS|GL_NEVER|GL_LESS|GL_GREATER|
GL_EQUAL|GL_NOTEQUAL|GL_LEQUAL|GL_GEQUAL}
Возможно включить или выключить запись в z-буфер
glDepthMask(TRUE); или glDepthMask(FALSE);