wavefront.obj 文件中的法线 (vn) 代表什么?

What does the normals (vn) in wavefront.obj files represent?

我在 obj 文件中有一个 3D 网格,它是 3D 面部重建算法的输出。问题是该算法沿第二轴镜像面,即每个顶点 v x y z 在 "reality" v -x y z.

我尝试了反转所有 x 的显而易见的方法,它起作用了,但现在网格已经反转了面的方向。我能够通过在 MeshLab 中应用 Filters -> Normals, Curvatures and Orientation -> Invert Faces Orientation 来解决这个问题。

问题是我无法理解该选项的作用或为什么我的原始修复不起作用,您能解释一下吗?另外,你能解释一下 wavefront.obj 格式的法线在几何上代表什么吗?

如果您在以 "v" 开头的行中反转坐标 X 的符号,您还需要更改 "vn" 行中的 X 的符号,它表示 Normal-by-网格的顶点。您可以使用 meshlab 过滤器 "Per vertex Normal Function" 和表达式非常轻松地做到这一点:

nx = -nx
ny = ny
nz = nz

无论如何,"the algorithm mirrors the face along the 2nd axis" 听起来很奇怪。很可能不是改变 X 坐标的符号,而是将网格旋转 90 度,因为您的程序配置为 "Z Axis is Up" 而不是 "Y Axis is up"。这种旋转会改变一个坐标的符号,也会交换坐标的值。我建议对此进行修改并了解您的算法是 "X mirroring" 还是 "reorientating" 输入网格。