JavaFX 3D对象之间的并集、交集和差集

5

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

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

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

此致敬礼,


使用默认形状,简单的答案是否定的。无法访问网格数据。有一个名为 https://github.com/miho/JCSG 的项目提供了这样的功能。 - jdub1581
1个回答

12

正如@jdub1581所说,在JavaFX中,没有直接的方法来获取包含3D原始形状的布尔运算。

这并不意味着不能执行这些操作,只要你了解或提供网格信息即可。

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

3D布尔运算是构造实体几何技术的基础。使用布尔运算(联合、交集、差异),从多个原语(立方体、棱柱体、球体、圆柱体、圆锥体和环面体)构造CSG实体。

有一个基于Java的实现,JCSG,作者是Michael Hoffer:

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

基于这个实现,JFXScad是一个基于JavaFX的项目,使用JCSG创建复杂的形状,可以直接3D打印或导出为STL/OBJ。

使用这个项目,你可以在左面板上输入,右面板上就会生成3D形状。这是其中一个可用的样例:

JFXcad

如你所见,通过挤压创建了几个臂,并与Cylinder结合使用uniondifference等操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接