如何在JavaFX中实现Shape3D类3D网格的布尔运算(并集、差集、交集)
可直接使用的开源解决方案
目前有两个成熟的纯Java开源库可以直接适配JavaFX 3D场景,实现你需要的网格布尔运算:
- JCSG:专门实现构造实体几何(CSG)运算的Java库,自带JavaFX
TriangleMesh转换工具类,运算逻辑稳定,对非流形网格的容错性较好。 - FXyz:JavaFX生态的3D扩展工具库,内置封装好的CSG运算接口,输出结果可直接绑定到
MeshView渲染,适配性更强。
代码实现示例
你提到的调用形式可以通过上述库的封装实现,参考代码如下:
import eu.mihosoft.jcsg.CSG; import eu.mihosoft.jcsg.MeshConverter; import javafx.scene.shape.TriangleMesh; // 你已构造好的输入网格 TriangleMesh a = new TriangleMesh(); TriangleMesh b = new TriangleMesh(); // ... 网格构造逻辑省略 // 网格格式转换 CSG csgA = CSG.fromMesh(MeshConverter.toJcsgMesh(a)); CSG csgB = CSG.fromMesh(MeshConverter.toJcsgMesh(b)); // 并集运算 TriangleMesh unionResult = MeshConverter.toFxMesh(csgA.union(csgB).getMesh()); // 差集运算(a减b) TriangleMesh subtractResult = MeshConverter.toFxMesh(csgA.difference(csgB).getMesh()); // 交集运算 TriangleMesh intersectResult = MeshConverter.toFxMesh(csgA.intersect(csgB).getMesh());
注意事项
- 输入的两个
TriangleMesh必须为闭合的流形网格,不能存在自交、重复面、开放边界等问题,否则会导致运算结果异常。 - 如果是对JavaFX内置的
Box/Sphere/Cylinder等基础Shape3D执行运算,可以直接调用库中内置的几何体转换接口,无需手动构造网格。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

