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 или на эту страницу для ознакомления.