读取网格文件xxxxx.obj我使用Open3D和Trimesh模块分别通过这些代码:
import open3d as o3d
import trimesh
mesh = o3d.io.read_triangle_mesh(meshfile)
print(mesh)
mesh_ = trimesh.load_mesh(meshfile)
print(mesh_)
输出TriangleMesh with 224946 points and 74996 triangles.
<trimesh.Trimesh(vertices.shape=(37486, 3), faces.shape=(74996, 3))>
open3d得到224946分,而Trimesh得到37486分,是什么原因导致这个问题?
我打印出它们的顶点和三角形
____mesh_vert____:
[[-0.77349651 -0.17361518 -0.5339487 ]
[-0.77405303 -0.17450994 -0.52660068]
[-0.77472924 -0.17558702 -0.51311542]
...
[ 0.85712222 0.03432839 0.45968683]
[ 0.8533449 0.04001502 0.4399732 ]
[ 0.85333683 0.04001284 0.44043044]]
____mesh_vertices____:
[[-0.77714473 -0.16696896 -0.52666056]
[-0.77481598 -0.16823091 -0.53799069]
[-0.77349651 -0.17361517 -0.53394872]
...
[ 0.85654795 0.03840274 0.44923028]
[ 0.85598844 0.03371801 0.43383372]
[ 0.85334492 0.04001502 0.43997321]]
____mesh_triangles____:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
...
[224937 224938 224939]
[224940 224941 224942]
[224943 224944 224945]]
____mesh_faces____:
[[ 8 7 0]
[ 0 1 8]
[ 9 8 1]
...
[37465 37466 37485]
[37484 37485 37482]
[37482 37481 37484]]
是什么导致了差异?
我正在调查一个类似的问题。我用trimesh打开时得到的vert count比用Houdini打开时要大。trimesh对紫外线的行为似乎很奇怪。
我找到了以"v "开头的行数等于Houdini加载的顶点数。
我找到了以"vt "开头的行数在obj文件中等于trimesh加载的顶点数。
似乎trimesh创建了额外的顶点来存储这些额外的"vt "行,我理解存储UV数据。
这是相当糟糕的,因为简单地打开obj文件并将其保存回来,没有任何修改,使用trimesh将改变dcc中网格的顶点计数。额外的顶点是为"vt "行变成了额外的"v "在我的测试中