Я работаю над приложением для 3D-строительства. Строительство выполняется на трехмерной сетке (например, кубика Рубика), и каждая ячейка сетки представляет собой сплошной куб или наклон в 45 градусов. Для иллюстрации вот изображение куба со скошенной кромкой, которое я снял с изображений Google:
Не обращайте внимания на изображение справа, фокус - тот, который находится слева. В настоящее время, на этапе строительства, я рисую каждую грань каждой ячейки отдельно. Однако, когда дело доходит до экспорта, я бы хотел его упростить. Итак, в приведенном выше кубе я бы хотел, чтобы грани вверх-вниз-влево-вправо-назад-передняя часть состояли из одного четырехугольника каждая (два треугольника), а края были бы уменьшены с двух четырехугольников до отдельных четырехугольников.
В последнее время я пытался сделать следующее:
Итерируйте по фигуре слой за слоем, со всех сторон, и для каждого слоя найдите хорошее упрощение (удалите перекрывающиеся края, чтобы создать один многоугольник, затем разделите многоугольник, чтобы избежать дыр, используйте обрезку ушей для триангуляции).
Я явно слишком много усложняю (по крайней мере, я на это надеюсь). Если у меня есть список вершин, нормалей и индексов (в настоящее время с большим количеством повторяющихся вершин), есть ли какой-нибудь аккуратный способ упростить? Ограничения заключаются в том, что индексы не могут быть разделены между гранями (потому что мне нужны нормали, указывающие в разных направлениях), но в остальном я не возражаю, если это не самое быстрое или оптимальное решение, я бы предпочел, чтобы его было легко реализовать и поддерживать.
РЕДАКТИРОВАТЬ: Чтобы еще больше уточнить, я уже выполнил удаление скрытого лица, это не проблема. А во-вторых, очень важно, чтобы не было ухудшения качества, только упрощение самих граней (мне нужно сохранить острые грани).