Graphics MeshLab:使用我自己计算的法线渲染obj文件

Graphics MeshLab:使用我自己计算的法线渲染obj文件,graphics,3d,mesh,normals,meshlab,Graphics,3d,Mesh,Normals,Meshlab,我正在尝试编写一个带有顶点的obj文件。我正在计算代码中的顶点法线,并将其写入该文件。当我尝试在Meshlab中渲染此文件时,它会正确读取顶点,但当我转到“渲染->显示顶点法线”时,它不会显示我计算的法线。相反,MeshLab计算自己的法线并显示它们 我不确定如何可视化我计算/写入文件的法线。我希望稍后基于计算的法线应用Meshlab着色器 为了测试这一点,我创建了一个测试obj文件- vn 0.517350 0.517350 0.517350 v 0.500000 0.500000 0.500

我正在尝试编写一个带有顶点的obj文件。我正在计算代码中的顶点法线,并将其写入该文件。当我尝试在Meshlab中渲染此文件时,它会正确读取顶点,但当我转到“渲染->显示顶点法线”时,它不会显示我计算的法线。相反,MeshLab计算自己的法线并显示它们

我不确定如何可视化我计算/写入文件的法线。我希望稍后基于计算的法线应用Meshlab着色器

为了测试这一点,我创建了一个测试obj文件-

vn 0.517350 0.517350 0.517350
v 0.500000 0.500000 0.500000
vn -0.333333 0.666667 0.666667
v -0.500000 0.500000 0.500000
vn 0.666667 -0.333333 0.666667
v 0.500000 -0.500000 0.500000
vn -0.666667 -0.666667 0.333333
v -0.500000 -0.500000 0.500000
f 1//1 2//2 3//3
f 4//4 3//3 2//2
这只是一个正方形。现在,如果我更改此文件中的法线值,当我选择“渲染->显示顶点法线”时,它仍然显示自己的顶点法线。 我如何拥有自己的法线并应用在计算法线上工作的着色器??请帮忙


谢谢

并非所有OBJ进口商都尊重法线。我发现了一个关于MeshLab如何忽略OBJs中法线的老错误,它似乎仍然存在:

你可能做的每件事都是正确的,但问题可能不在你这边

在处理网格交换时,由于各种软件的支持级别不同,网格交换可能会变得非常复杂,如果您经常使用多个3D应用程序来测试导出的数据,那么这种方法非常方便。然后你可以更快地找出问题是在你这边还是在他们那边

如果您绝对需要对象针对损坏的导入器正确显示,并且无法使用其他格式,则一种解决方法是手动取消绑定(复制)顶点,以提供那些锐利的折痕/硬边。这不会给您提供与任意指定法线一样多的自由,但它将允许您保留那些不连续的边界,在这些边界中,区域不应平滑插值,而是有一个折痕。

看起来比今天(2019年)的问题在meshlab中得到了解决

在下图中,您可以看到原始的.obj文件(左),以及一个更改法线方向的修改版本(右)。正常情况已按预期发生变化


您是否尝试先声明所有顶点,然后声明所有法线?也许.obj文件解析需要这样做(有些解析器需要这样做)。另一个建议是:即使不使用纹理坐标,也要尝试包含纹理坐标。并非所有OBJ导入器都尊重法线,有时会使用自己计算的法线覆盖网格。我首先要确保MeshLab不是这样的,否则您可能会做的每件事都是正确的,但仍然会得到错误的结果。