有没有办法使用修剪网格将顶点子集及其关联面转换为网格?是否像获取顶点和面的子集,然后直接创建网格然后保存一样简单?还是还有其他步骤?
我已经有了使用修剪网格查找顶点和面子集的代码,但我不确定是否创建新的网格部分。
我的想法的一般伪代码如下。
#Load the mesh
mesh = load("cube.obj")
#Get the total vertices and faces
vertices = mesh.vertices
faces = mesh.faces
#Code to get sub set of vertices and associated faces
subVertices = vertSubsetGenerator(vertices)
subFaces = faceSubsetGenerator(vertices, faces)
#Create and save mesh
meshOut = createMesh(subVertices, subFaces)
save(meshOut)
您在这里尝试做的是返回原始网格的子集(原始标题中的术语分段有点误导)。 Trimesh 确实为此提供了内置解决方案:
import trimesh
# Cube mesh
vertices = [
[0., 0., 0.], [0., 0., 1.], [0., 1., 0.], [0., 1., 1.],
[1., 0., 0.], [1., 0., 1.], [1., 1., 0.], [1., 1., 1.]
]
faces = [
[0, 6, 4], [0, 2, 6], [0, 3, 2], [0, 1, 3],
[2, 7, 6], [2, 3, 7], [4, 6, 7], [4, 7, 5],
[0, 4, 5], [0, 5, 1], [1, 5, 7], [1, 7, 3]
]
mesh = trimesh.Trimesh(vertices, faces)
mesh.show()
# Submesh
subfaces = [2, 3]
submesh = mesh.submesh([subfaces], append=True)
submesh.show()
如Trimesh文档中所述,它需要您希望保留的面的索引。
请记住,您的
subVertices
和 subFaces
是链接的。如果“删除”一个顶点,则还必须删除包含该顶点的面(反之则不一定成立)。换句话说,您必须使用 subFaces
或推断出包含您的 subVertices
的面。
干杯!