Попытка исправить 3D сетку нормалей - PullRequest
2 голосов
/ 27 августа 2011

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

Я пробовал следующее (псевдо):


1. определить, что нормальным направлением первого треугольника является правильное направление
2. перейти по мешу, используя вид DFS, например:
3. треугольник = первый треугольник
4. foreach соседка в треугольнике. GetNeighbours
5. если угол между соседом и треугольником больше 180, то так и есть.
6. треугольник = сосед
7. если сосед уже выбран, переходить к следующему соседу
8. продолжить рекурсивно до 4.

Но шаг 5 в алгоритме не работает, потому что не могу знать, больше ли угол, чем 180, потому что мне нужно знать в направлении ведьмы (по часовой стрелке или против часовой стрелки).

Не могли бы вы помочь мне понять, как исправить алгоритм?

1 Ответ

6 голосов
/ 27 августа 2011

Нет необходимости вычислять угол между соседями. Если треугольник ABC ориентирован (A->B->C) и если сосед по ребру AB является треугольником ABD, то он должен иметь противоположную ориентацию по ребру AB. Это означает, что соседний треугольник должен быть ориентирован B->A->D.

...