如何使用 Trimesh 计算两个网格的体积交集?

问题描述 投票:0回答:1

我正在尝试使用 Trimesh 计算两个凸网格的交集体积。使用trimesh.Trimesh.intersection()方法,即使是基本的、明显重叠的形状也会返回一个空的交集。

作为一个简单的例子,我尝试计算两个框彼此偏移的交集。

# Create offset transformation matrix
T = np.eye(4)
T[:3, 3] = np.array([0.5, 0.5, 0.5])

# Form basic box meshes
mesh1 = trimesh.creation.box(extents=[1.0, 1.0, 1.0])
mesh2 = trimesh.creation.box(extents=[1.0, 1.0, 1.0], transform=T)

# Calculate intersection
test_intersection = mesh1.intersection(mesh2)

print(test_intersection)
print(test_intersection.volume)

# Visualize
scene = trimesh.Scene([mesh1, mesh2])
scene.show()

结果输出表明两个形状之间存在空交集:

<trimesh.Trimesh(vertices.shape=(0, 3), faces.shape=(0, 3))>
0.0

然而,观察这些盒子,它们显然是重叠的:

盒子

为什么网格交点是空的?我是否误解了 .intersection() 方法的使用?

(我使用的是python 3.12.7,从pip安装的trimesh 4.5.2)

python 3d mesh trimesh
1个回答
0
投票

我通过安装附加依赖项解决了我的问题

pip install manifold3d

我在查看了 trimesh.Trimesh.intersection 方法的源代码并看到以下文档字符串后进行了尝试:

Parameters
     ------------
     other : trimesh.Trimesh, or list of trimesh.Trimesh objects
       Meshes to calculate intersections with
     engine
       Which backend to use, the default
       recommendation is: `pip install manifold3d`.
© www.soinside.com 2019 - 2024. All rights reserved.