在Python中使用Wavefront .obj文件准确计算顶点和面的总数?

时间:2018-01-30 15:40:17

标签: python mesh meshlab

将3D对象拖动为.obj文件(Wavefront .obj文件)到MeshLab或任何其他3D图形,可以告诉您模型具有的精确总面数和顶点总数。顶点可以是三角形或多边形。

有没有办法以编程方式准确计算这两个数字?通过读取Obj文件并输出这些数字。现在像MeshLab这样的工具在生成的obj文件中输出一个注释部分,说明有多少个面,顶点等...其他工具不这样做。

试图计算'v'和'f'的数量,但与MeshLab结果相比,这并不总能给出准确的结果。那vn和vt怎么样?对不起,我对obj文件结构知之甚少,这些字母真正意味着什么。

在Python中以任何方式做到这一点?如果有一个库可以做到并输出纹理的分辨率会很酷吗?

感谢您的任何建议

2 个答案:

答案 0 :(得分:2)

此代码显示与Autodesk Maya相同的数字

with open('test.obj') as f:
    lines = f.readlines()

vertices = len([line for line in lines if line.startswith('v ')])
faces = len([line for line in lines if line.startswith('f ')])

答案 1 :(得分:0)

有一个很酷的库叫做trimesh:

https://github.com/mikedh/trimesh

import trimesh
# load mesh
mesh = trimesh.load_mesh('path_to_mesh.obj')
print(mesh.vertices.shape)
print(mesh.faces.shape)