联合,交叉和JavaFX 3D对象之间的区别

时间:2015-02-24 14:04:13

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

有没有办法执行布尔运算,例如联合,交叉和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对象是否有这样的东西。如果不是,我很想知道实施这些操作的最佳方式。

亲切的问候,

1 个答案:

答案 0 :(得分:6)

正如@ 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形状。这是可用的样本之一:

JFXcad

如您所见,通过挤​​压创建了几个手臂,并使用Cylinderunion,... {/ p>与difference结合使用。