Проблема в OpenGL: все объекты нарисованные позже перекрывают собой объекты нарисованные ранее.

программирование .net OpenGL

Не могу понять где проблема. Разбираюсь плохо. Буду благодарен, если ответите или отправите к понятному источнику.
Ответы:
скорее всего из-за того, что выключена проверка глубины( удалённость от наблюдателя). Можно вручную реализовать алгоритмы, можно использовать z-buffer. Для этого нужно
добавить  GLUT_DEPTH в glutInitDisplayMode  
включить тест глубины glEnable(GL_DEPTH_TEST)
в функции перерисовки экрана добавить GL_DEPTH_BUFFER_BIT в glClear
kolaider ответил правильно, я только хочу объяснить поподробнее.
Когда происходит вывод объектов на экран, компьютер не знает какой из них должен быть поверх другого. Поэтому поверх всех остальных объектов будет выведен тот, который обрабатывался позже всех. Чтобы этого избежать нужно включить проверку глубины. Это специальный буфер, в котором каждый пиксель характеризуется не цветом, а удаленностью от наблюдателя (глубина z). Поэтому когда в этой же точке нужно будет нарисовать другой пиксель, глубина z нового пикселя будет сравниваться с новым значением. Если новое значение меньше, значит новая точка находится ближе к наблюдателю => она должна быть нарисована поверх старой. Аналогично, наоборот.
Такую удобную штуку нам дает буфер глубины, где хранятся "глубины" всех пикселей экрана.
Чтобы его включить, нужно сделать то, что kolaider прописал:
1. добавить GLUT_DEPTH в glutInitDisplayMode. Я так же как и он использую библиотеку GLUT (которую и Вам советую как начинающему), поэтому этот шаг верен только для нее. Например, у меня обычно вызов такой:
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
2.glEnable(GL_DEPTH_TEST). Это обязательно сделать в любом случае.
3.в функции перерисовки экрана добавить GL_DEPTH_BUFFER_BIT в glClear. Аналогично обязательно. У меня, например, вызов такой:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.