You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python MeshLib库中合并两个网格并让地面网格处于墙体网格下方

如何在Python MeshLib库中合并两个网格并让地面网格处于墙体网格下方

看起来你遇到的问题是合并后地面网格跑到墙体网格上方了,这大概率是因为两个网格的Z轴位置没有调整到位。我们可以通过手动平移其中一个网格的所有顶点,或者调整addBaseToPlanarMesh的参数来确保地面在墙体下方。

问题分析

你当前的代码中,给墙体(mesh)设置了zOffset=150的底座,给地面(mesh1)设置了zOffset=10的底座,但合并后层级不符合预期。这可能是因为addBaseToPlanarMesh的Z轴方向和你预期的相反,或者两个网格的整体Z轴范围有重叠导致显示顺序异常。

解决方案:调整网格Z轴位置

最直接有效的方法是确保地面网格的所有顶点Z坐标都小于墙体网格的顶点Z坐标,这里提供两种实现方式:

方式1:手动平移网格顶点

在合并前,通过mr.transformMesh给地面网格添加一个Z轴方向的平移,让它整体下移到墙体下方:

from PIL import Image
import meshlib.mrmeshpy as mr

# Load and prepare raster images
Image.open('walls_mask.png').convert('RGBA').save('walls_mask.png')
Image.open('ground.png').convert('RGBA').save('ground.png')

# Load distance maps from images
dm = mr.loadDistanceMapFromImage("walls_mask.png", 0)
dm1 = mr.loadDistanceMapFromImage("ground.png", 0)

# Find the boundary contours between black and white
polyline2 = mr.distanceMapTo2DIsoPolyline(dm, isoValue=127)
polyline21 = mr.distanceMapTo2DIsoPolyline(dm1, isoValue=127)

# Triangulate the contours
mesh = mr.triangulateContours(polyline2.contours2(mr.HolesVertIds()))
mesh1 = mr.triangulateContours(polyline21.contours2(mr.HolesVertIds()))

# Subdivide the meshes to add detail
mr.subdivideMesh(mesh)
mr.subdivideMesh(mesh1)

# Add bases to the planar meshes
mr.addBaseToPlanarMesh(mesh, zOffset=150)
mr.addBaseToPlanarMesh(mesh1, zOffset=10)

# 关键修改:平移地面网格,让它整体下移到墙体下方
# 创建Z轴负方向的平移变换,偏移量可根据模型大小调整
z_translate = mr.AffineXf3f.translation(mr.Vector3f(0, 0, -200))
mr.transformMesh(mesh1, z_translate)

# Merge the two meshes(顺序不影响,只要Z位置正确)
merged_mesh = mr.mergeMeshes([mesh1, mesh])

# Save the merged mesh as an OBJ or STL file
mr.saveMesh(merged_mesh, mr.Path("Merged_mesh.stl"))

方式2:调整addBaseToPlanarMesh的zOffset参数

直接修改底座的偏移量,让墙体的底座更高(整体位置更靠上),地面的底座更低(整体位置更靠下):

# 替换原有的addBaseToPlanarMesh代码
mr.addBaseToPlanarMesh(mesh, zOffset=200)  # 墙体底座高度增加,整体上移
mr.addBaseToPlanarMesh(mesh1, zOffset=-50) # 地面底座向下延伸,整体下移

关键说明

  1. 平移变换的作用:mr.AffineXf3f.translation用于创建三维平移变换,我们只需要调整Z轴的偏移量,确保地面网格的所有顶点Z值都小于墙体的Z值即可。
  2. 合并顺序不影响:只要两个网格的Z轴位置正确,合并时的顺序[mesh1, mesh]或[mesh, mesh1]都不会影响最终的层级显示。
  3. 参数调整建议:你可以根据模型的实际大小,灵活调整平移偏移量或zOffset的数值,直到层级关系符合预期。

备注:内容来源于stack exchange,提问作者Shahroz Atiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:15:27