Визуализировать в Opengl. Перекрывающиеся объекты - PullRequest
1 голос
/ 17 апреля 2011

У меня возникают проблемы при рендеринге перекрывающихся объектов в OpenGL.

Я вызываю функции, которые рисуют объекты, так что если я вызываю drawB (), а затем drawA (), A выше B и B может бытьскрыто A.

Все работает нормально, пока не произойдет, что A - это линия (GL_LINES), а B - это многоугольник (GL_POLYGON).Если это произойдет, B, который должен быть расположен внизу, будет нарисован поверх A.

В этот момент я отключил GL_DEPTH_TEST.Я попытался включить его, я попытался glDepthMask и glPolygonOffset, но ни один не работал.Я предполагаю, что я использовал их неправильно.Любые идеи, как я могу нарисовать эти объекты в правильном порядке?

** Редактировать: Очевидно, проблема была в том, что я не очищал GL_COLOR_BUFFER_BIT, но я не очищаюсь из-за скорости.Я должен найти способ, не стирая gl_color_buffer_bit, рисовать объекты в порядке **

У него есть ортографическая проекция, определяемая glOrtho (r.left (), r.right (), r.bottom (), r.top (), 0,2);

При вызове функции рисуются фоновые объекты, затем передний план.Я хочу, чтобы фоновые объекты были нарисованы ниже переднего плана.

Идея состоит в том, что у меня есть два макета, один для переднего плана и один для фона.Сначала каждый объект на заднем плане рисует сам.Тогда каждый объект на переднем плане делает то же самое.Каждый объект имеет список отображения, который преобразует свою собственную систему координат в соответствии со своими потребностями.Идея этих списков отображения состоит в том, чтобы разрешить вложение объектов, каждый объект со своей собственной системой координат, несмотря на их родительскую систему координат.

В какой-то момент у меня на заднем плане есть набор объектов, который выполняет

glBegin (GL_POLYGON) ;
        for (angle = 0; angle<PI * 2;angle+=1){
            glVertex2f (X + sin(angle) * Radius, Y + cos(angle) * Radius);
        }
        glEnd () ;

другой объект, в макете переднего плана делает

 glBegin(GL_LINES);
            glVertex2f(m_x[m_currentPositionP1],m_y[m_currentPositionP1]);
            glVertex2f(m_x[m_currentPositionP],m_y[m_currentPositionP]);
        glEnd();

Но линии кажутся скрытыми многоугольником

1 Ответ

1 голос
/ 18 апреля 2011

glVertex2f дает хорошие результаты, пока вы рисуете задом наперед.

Поскольку вы хотите другой порядок, вам нужно указать координату Z, чтобы определить, что находится сверху.glVertex3f ftw.

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