JavaFX 3D对象之间的联合、交集和差异

Union, intersection and difference between JavaFX 3D objects

有什么方法可以执行布尔运算,例如 JavaFX 3D 对象之间的并集、交集和差集,例如在 Sphere 实例、Cylinder 实例和 Box 实例之间。

继承自 Shape class 的 JavaFX 2D 对象已经有 union() 和 subtract() 方法 http://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Shape.html

我想知道 JavaFX 或 F(X)yz 库中是否有 Shape3D 对象这样的东西。如果没有,我很想知道实现这些操作的最佳方法。

亲切的问候,

正如@jdub1581 所说,在 JavaFX 中,没有直接的方法来使用 3D 原始形状进行布尔运算。

这并不意味着无法执行这些操作,前提是您知道或提供了网格信息。

虽然 F(X)yz 库有许多复杂的 3D shapes,其中提供了完整的网格信息,但它不会对它们执行布尔运算。

3D 布尔运算是 Constructive Solid Geometry 技术的基础。 CSG 实体由多个图元(立方体、棱柱体、球体、圆柱体、圆锥体和环面)使用布尔运算(并集、交集、差集)构造而成。

有一个基于 Java 的此技术的实现,JCSG。来自他的作者 Michael Hoffer:

Java implementation of BSP based CSG (Constructive Solid Geometry). It is the only simple and free Java implementation I am aware of. This implementation uses an optimized CSG algorithm based on csg.js.

基于该实施,JFXScad 是一个基于 JavaFX 的项目,使用 JCSG 创建复杂的形状,准备进行 3D 打印,或导出为 STL/OBJ。

使用此项目,您可以在左侧面板上键入,然后在右侧面板上生成 3D 形状。这是可用示例之一:

如您所见,通过挤​​压创建了多个手臂,并使用 uniondifference、...

Cylinder 组合