文档



JavaFX:使用JavaFX图形

1 概述

本章概述了JavaFX 3D图形功能,这些功能目前通过Java 8的JavaFX API提供。

JavaFX 3D图形API提供了一个通用的三维图形库,用于JavaFX平台。您可以使用3D几何体、相机和光源在三维空间中创建、显示和操作对象。

假设您具有中级水平的Java和JavaFX知识。从http://www.oracle.com/technetwork/java/javase/downloads/下载Java开发工具包(JDK)8版本。JDK 8包含了JavaFX API,其中包括3D图形功能。

3D图形使用案例示例

图1-1显示了在JavaOne 2012主题演讲中演示的JavaFX 3D应用程序示例的快照。它是在早期的JavaFX SDK原型上构建的概念验证,添加了3D网格、相机和光照支持。您可以在http://www.youtube.com/embed/AS26gZrYNy8?rel=0网站上查看它。

图1-1 JavaFX 3D应用程序示例

图1-1的描述
"图1-1 JavaFX 3D应用程序示例"的描述

其他JavaFX 3D图形使用案例示例如下:

  • 库存和过程可视化

  • 科学和工程可视化

  • 3D图表

  • 机械CAD和CAE

  • 医学成像

  • 产品营销

  • 建筑设计和漫游

  • 高级用户体验

  • 任务规划

  • 培训

  • 娱乐

JavaFX 2.x版本中的3D功能

在JavaFX 2.x版本中,可以创建二维对象并在3D空间中进行变换。您可以子类化Group类来创建自定义组,并将变换子矩阵设置为任何您想要的内容。您可以模拟其他3D内容集中包(如Maya和3D Studio Max)的变换组的行为,因为您可以自定义哪些子矩阵是该变换组的一部分。请参阅在JavaFX中应用变换以了解更多关于此变换功能的信息。

示例1-1显示了一个创建Group子类Xform的示例代码,其中包含平移、中心点、三个旋转、缩放和反向中心点。

示例1-1 3D变换代码示例

public class XformWithPivot extends Group {
    public Translate t = new Translate();
    public Translate p = new Translate();
    public Translate ip = new Translate();
    public Rotate rx = new Rotate();
    { rx.setAxis(Rotate.X_AXIS); }
    public Rotate ry = new Rotate();
    { ry.setAxis(Rotate.Y_AXIS); }
    public Rotate rz = new Rotate();
    { rz.setAxis(Rotate.Z_AXIS); }
    public Scale s = new Scale();
    public XformWithPivot() {
       super();
       getTransforms().addAll(t, p, rz, ry, rx, s, ip); 
    }
}

Xform子类是从Group创建的,因为Group最初设计用于二维(2D)UI布局。节点的中心点在某些情况下会重新计算以适应2D UI布局,但如果您子类化group并创建Xform,如示例1-1所示,并使用这些新的变换,它将绕过2D UI布局。

尽管在2D UI布局中,重新计算2D UI中心点是非常理想的,但在3D布局中并不是您想要的。中心点会被重新计算为节点布局边界的中心,因此对布局边界的任何更改都会导致中心点的变化,从而自动移动您的对象。因此,对于Group节点,对其子节点的任何更改,包括位置、几何、效果、方向或缩放,都会导致组的布局边界发生变化。这将在3D布局中自动以意想不到的方式移动对象,但在2D布局中则是期望的。因此,在3D布局中,您肯定希望绕过自动中心点重新计算。

节点上一些有用的3D变换方法列在示例1-2中。

示例1-2 节点上有用的3D变换方法

Transform getLocalToParentTransform()
Transform getLocalToSceneTransform()
public Point3D sceneToLocal(Point3D scenePoint)
public Point3D sceneToLocal(double sceneX, double sceneY, double sceneZ)
public Point3D localToScene(Point3D localPoint)
public Point3D localToScene(double x, double y, double z)
public Point3D parentToLocal(Point3D parentPoint)
public Point3D parentToLocal(double parentX, double parentY, double parentZ)
public Point3D localToParent(Point3D localPoint)
public Point3D localToParent(double x, double y, double z)

关闭窗口

目录

JavaFX: 使用JavaFX图形

展开 折叠