【问题标题】:Calculate accurately the total number of vertices and faces in Wavefront .obj file in Python?在 Python 中准确计算 Wavefront .obj 文件中的顶点和面的总数?
【发布时间】:2018-07-09 13:31:31
【问题描述】:

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

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

尝试计算 'v' 和 'f' 的数量,但与 MeshLab 结果相比,结果并不总是准确。 vn和vt呢?抱歉,我对 obj 文件结构和这些字母的真正含义不是很了解。

在 Python 中有什么方法可以做到这一点?如果有一个库可以做到这一点并输出所用纹理的分辨率,那就太酷了?

感谢您的任何建议

【问题讨论】:

标签: python mesh meshlab


【解决方案1】:

此代码显示与 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 ')])

【讨论】:

  • 太棒了。它也给出了与 Meshlab 中相同的数字。所以如果我理解正确的话,v、vn 和 vt 都是应该计算的顶点线。感谢您的澄清!
  • 不,顶点仅用“v”表示,这就是我在代码中指定“v”后跟空格的原因。 “vt”用于纹理坐标,“vn”用于法线。
  • 对不起,我没有注意空间。再次感谢
【解决方案2】:

有一个很酷的库叫做 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)

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2017-09-29
    • 2013-06-26
    • 2013-09-09
    • 2014-08-26
    • 2021-11-06
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多