Порядок рендеринга полигонов OpenGL

Как видите: http://i.stack.imgur.com/ztM0v.png некоторые полигоны просто рендерятся поверх других. Есть ли у кого-нибудь какие-либо предложения или связанное чтение по их отображению в правильном порядке, чтобы они не перекрывались?


person Satchmo Brown    schedule 30.04.2011    source источник


Ответы (3)


Для непрозрачных граней порядок рендеринга не важен, если вы используете буфер глубины.

У NeHe есть учебник, охватывающий все основы. Начните здесь http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=02

См. также буфер глубины Opengl и отбраковка и Буфер глубины в OpenGL .

person Jonas Bötel    schedule 30.04.2011

Вам нужно включить тестирование глубины. Убедись в том, что

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL); //Maybe not this line but try it anyway, GL_DEPTH_TEST is the important one

находится в вашем коде инициализации.

person SuperMaximo93    schedule 30.04.2011
comment
В OpenGL нет такой вещи, как инициализация, все дело в состоянии. Конечно, некоторые вещи, такие как текстуры, FBO, PBO и VBO, создаются, а затем используются повторно. Но в любом реальном приложении OpenGL это также происходит по требованию. Такие состояния, как включение/отключение тестирования глубины и функция глубины, должны быть установлены в функции рендеринга прямо перед частью, которая требует определенного состояния. - person datenwolf; 30.04.2011

Вы должны убедиться, что вы установили матричный режим в виде проекции или 3D и всегда работаете с 3D.

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(p, (double) w / (double) h, arg1, arg2);

Затем убедитесь, что вы включили глубины следующим образом:

glEnable(GL_DEPTH_TEST);

Затем выполните рендеринг с помощью GL...3f или GL...3d для рендеринга через 3d, где ... — это любая функция, которая вам нужна.

person Neigyl R. Noval    schedule 30.04.2011