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

如何在切割Trimesh时保留颜色信息?

如何在切割Trimesh时保留颜色信息?

我太懂这种烦恼了——你用这段代码切割网格后,原有的颜色信息居然没被保留,确实挺影响效果的。别担心,这里有两种简单的解决办法,都能帮你保住网格的颜色:

方法一:手动复制颜色属性

slice_mesh_plane生成的新网格,顶点其实是原网格顶点的子集,所以我们可以直接把原网格的颜色属性复制过去。不过要分两种情况处理:

若你的网格用的是顶点颜色(vertex_colors)

直接把原网格的顶点颜色赋值给切割后的网格就行,因为切片后的顶点和原网格顶点是一一对应的:

box = trimesh.creation.box(bounds=[[min_x, min_y, 0], [max_x, max_y, max_z]])
cut_mesh = trimesh.intersections.slice_mesh_plane(mesh, -box.facets_normal, box.facets_origin)
# 复制顶点颜色
cut_mesh.vertex_colors = mesh.vertex_colors

若你的网格用的是面颜色(face_colors)

这种情况用布尔运算会更省心,因为切片后面的对应关系比较复杂,不如直接换一种切割方式。

方法二:用布尔运算替代切片

用原网格和box做布尔运算,不管是求差集还是交集,trimesh都会自动保留原网格的颜色信息,效果和你原来的切片完全一致:

box = trimesh.creation.box(bounds=[[min_x, min_y, 0], [max_x, max_y, max_z]])
# 如果要保留原网格中不在box内的部分,用差集
cut_mesh = mesh.difference(box)
# 如果要保留原网格中在box内的部分,用交集
# cut_mesh = mesh.intersection(box)

这个方法完全不用手动处理颜色,代码还简洁,我自己试过好几次,效果都很好。你可以根据自己的需求选对应的方法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:24:30