Что представляют собой нормали (vn) в файлах wavefront.obj? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть трехмерная сетка в файле obj, которая была результатом алгоритма трехмерной реконструкции лица. Проблема в том, что алгоритм зеркально отображает грань вдоль 2-й оси, то есть каждая вершина v x y z находится в «реальности» v -x y z.

Я пытался очевидным образом инвертировать все x, это работает, но сейчассетка имеет перевернутую грань ориентации. Я смог это исправить, применив Filters -> Normals, Curvatures and Orientation -> Invert Faces Orientation в MeshLab.

Проблема в том, что я не могу понять, что делает эта опция, или почему мое оригинальное исправление не сработало. Вы можете объяснить? Кроме того, вы можете объяснить, что нормали в формате wavefront.obj представляют геометрически?

1 Ответ

1 голос
/ 24 октября 2019

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

nx = -nx
ny = ny
nz = nz

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

...