Во-первых, «перевернутые» лица абсолютно субъективны. Вам нужно определиться с некоторыми параметрами.
Для выпуклого объекта существует несубъективное определение ... например, что нормаль грани, усеянная одной из вершин грани, равна> 0.
Для невыпуклых объектов вы можете сделать некоторые предположения, основываясь на порядке намотки вершин, и на том, содержит ли любые 2 ребра одинаковый порядок, подразумевая, что у вас есть 1 фронтальный и 1 обратный треугольник с общим ребром. (Какой из этих треугольников перевернут, не обязательно идентифицировать в невыпуклом случае.)
Во-первых, вам нужно будет .mergeVertices в вашей геометрии, чтобы вершины были общими для граней ... Я думаю, что stl определяет уникальные вершины для каждого треугольника, поэтому нет понятия "ребро", которое совместно используется двумя стоит.
Затем вы можете проходить через каждую грань ... и, в принципе, любые 2 ребра, которые имеют одинаковые 2 вершины, должны иметь порядок оппозиции или грани обращены друг к другу ..
Таким образом, если 2 грани имеют ребро, такое как 3,2 и 2,3, то они оба обращены в одном направлении ... и грани совпадают.
Если две разные грани обе имеют ребро 3,2 и 3,2, то они обращены в разные стороны, и вы можете пометить обе грани как перевернутые. Чаще всего помечаются лица, которые, вероятно, фактически перевернуты.
Это лучшие тесты на догадки, которые я могу придумать для определения внутри / снаружи, но это сложная проблема.
В Blender есть пара методов "пересчета нормалей" для пересчета "внутри" / "снаружи", которые, я думаю, работают по схожему принципу ... так что вы также можете взглянуть на них.