OpenGL - тесселяция некоторых пересекающихся и некоторых непересекающихся многоугольников

У меня есть список нескольких полигонов.

Некоторые полностью отделены и не пересекаются с другими полигонами.

А некоторые полностью пересекаются и заключены в другие полигоны:

Я хочу соединить это с набором треугольников, чтобы я мог их нарисовать. Я думаю, что у меня есть код, который работает - я делаю что-то похожее на это:

tess = gluNewTess()
gluTessBeginPolygon (tess)
for polygon in polygons:
    gluTessBeginContour(tess)
        for point in polygon:
            gluTessVertex(tess, point, point)
gluTessEndPolygon(tess)
gluDeleteTess(tess)

Мне интересно, если это ожидаемый путь?

Основная причина, по которой я задаю вопрос, заключается в том, что, как вы можете видеть, весь код обернут в один элемент gluTessBeginPolygon-gluTessEndPolygon. Но на самом деле это набор разных полигонов, что выглядит немного странно (хотя, похоже, работает...)

1 ответ

Решение

Это на самом деле путь (см. Также этот пример). Определенный "полигон" здесь на самом деле является многоугольником, поэтому все, что имеет значение, - это контуры, которые вы определяете правильно. Затем OpenGL внутренне проверяет, являются ли некоторые контуры автономными или иным образом сложными, и генерирует правильный многоугольник / набор многоугольников - вы можете взглянуть на код в PolygonTesselator или на эту страницу для ознакомления.

Другие вопросы по тегам