【问题标题】:Union, intersection and difference between JavaFX 3D objectsJavaFX 3D对象之间的联合、交集和区别
【发布时间】:2021-11-19 14:15:13
【问题描述】:

有没有办法在 JavaFX 3D 对象之间执行布尔运算,例如联合、交叉和差异,例如在 Sphere 实例、Cylinder 实例和 Box 实例之间。

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

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

亲切的问候,

【问题讨论】:

  • 使用默认形状,简单的答案是否定的。无法访问 Mesh 数据。有一个项目github.com/miho/JCSG 提供了这样的功能。

标签: 3d javafx javafx-2 javafx-8 javafx-3d


【解决方案1】:

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

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

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

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

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

基于 BSP 的 CSG(构造实体几何)的 Java 实现。它是我所知道的唯一简单且免费的 Java 实现。此实现使用基于csg.js 的优化CSG 算法。

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

使用此项目,您可以在左侧面板上输入文字,并在右侧面板上生成 3D 形状。这是可用的示例之一:

如您所见,多个手臂是通过挤压创建的,并使用uniondifference、...与Cylinders 组合在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2017-05-28
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多