Как рассчитать нормальный вектор на основе нескольких треугольников, разделяющих вершину? - PullRequest
5 голосов
/ 13 марта 2011

Если у меня есть сетка из треугольников, как можно вычислить нормали в каждой данной вершине?

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

Ответы [ 6 ]

4 голосов
/ 13 марта 2011

Я думаю, что хороший метод должен использовать взвешенное среднее, но с углами вместо площади в качестве весов. Это, на мой взгляд, лучший ответ, потому что обычная вычислительная функция - это «локальная» функция, поэтому вам не важно, насколько велик треугольник, который вносит свой вклад ... вам нужна своего рода «локальная» мера вклад и угол между двумя сторонами треугольника в указанной вершине является такой локальной мерой.

При таком подходе множество маленьких (тонких) треугольников не дает вам несбалансированного ответа.

Использование углов аналогично использованию средневзвешенного по площади, если вы локализуете вычисления, используя пересечение треугольников с небольшой сферой, центрированной в вершине.

3 голосов
/ 13 марта 2011

Средневзвешенное значение представляется наилучшим подходом.

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

Поиск Смещенная треугольная сетка с использованием нескольких нормальных векторов вершины , автор SJ Kim, et. al., для более подробной информации об этом методе.

2 голосов
/ 14 марта 2011

В этом блоге излагаются три различных метода и дается наглядный пример того, почему стандартный и простой метод (средневзвешенное по площади нормали всех граней, соединяющихся в вершине) иногда может давать плохие результаты.

1 голос
/ 20 марта 2011

Ознакомьтесь с этой статьей: Операторы дискретной дифференциальной геометрии для триангулированных 2-многообразий .

В частности, "Нормальный оператор дискретной средней кривизны" (раздел 3.5, уравнение 7) даетнадежный нормальный, который не зависит от тесселяции, в отличие от методов в сообщении в блоге, цитируемом другим ответом здесь.

1 голос
/ 13 марта 2011

Вы можете придать больший вес большим треугольникам, умножив нормаль на площадь треугольника.

0 голосов
/ 14 марта 2011

Очевидно, что вам нужно использовать средневзвешенное значение, чтобы получить правильную нормаль, но использование области треугольников не даст вам того, что вам нужно, так как область каждого треугольника не имеет отношения к% веса, который нормальный треугольник представляет для данноговершина.

Если вы основываете ее на угле между двумя сторонами, входящими в вершину, вы должны получить правильный вес для каждого входящего в нее треугольника.Возможно, было бы удобно, если бы вы могли как-то преобразовать его в 2d, чтобы вы могли отклониться от 360-градусного основания для ваших весов, но, скорее всего, просто использовав сам угол в качестве множителя веса для вычисления его в трехмерном пространстве, а затем сложив всенормали, полученные таким образом, и нормализация конечного результата должна дать правильный ответ.

...