Catmull Clarke не сохраняет плоских нормалей - PullRequest
0 голосов
/ 15 декабря 2018

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

Поскольку я по необходимости использую четырехугольники, я знаю, что могу исправить лицо, переставив порядок вершин, то есть [abcd] -> [dcba] и, таким образом, исправить нормаль.Но как мне определить, что нормаль данного лица указывает неправильное направление?

(недостаточно повторений для встраивания) https://gyazo.com/e20576e700196a43a2378eb055a71b38

1 Ответ

0 голосов
/ 15 декабря 2018

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

Допустим, вектор нормали грани [a,b,c,d] равен n.Затем вычислите центр тяжести куба, усреднив его 8 координат вершин, и назовем его p.

Затем вычислим dir = dot(n,(a-p)).Если dir > 0, нормальный n указывает наружу от куба.Если dir отрицательно, вы должны перевернуть нормаль.

Этот метод будет работать для граней любого выпуклого многогранника.Если вы имеете дело с невыпуклыми многогранниками, вам придется использовать такой подход, как упомянутый здесь .

...