2-1 JavaFX图形-概览
javaFx中文文档     发布于 6/3/2020 11:38:48 PM   754次围观  0条评论
javaFx中文文档    发表于 6/3/2020 11:38:48 PM   754人围观  0条评论
本章小结了为JavaFX设计的Java 8 API中可用的JavaFX 3D图形技术功能特性。 JavaFX 3D图形 API为JavaFX平台提供了一个通用三维图形库。你可以使用3D几何学、镜头和光照来创建、显示和操控3D空间中的对象。 我们假设你具有中等水平的Java和JavaFX知识。 从http://www.oracle.com/technetwork/java/javase/downloads/下载Java Developnent Kit(JDK)8。JDK 8中包含了JavaFX API,其中包含3D图形处理功能特性。 # 3D图形处理应用场景 图1-1展示了在JavaOne2012主题会议上展示的JavaFX 3D样例程序的截图。JavaFX SDK早期原型中包括了对3D网格(Mesh)、镜头(Camera)和光照(Lighting)的支持,样例程序构建了一个基于它的概念验证。你可以在站点http://www.youtube.com/embed/AS26gZrYNy8?rel=0上看到对应的演示。 图1-1 JavaFX 3D样例程序 JavaFX 3D图形处理的应用场景可以包括: - 库存和过程可视化 - 科学和工程可视化 - 3D图表 - 机械CAD和CAE - 医学成像 - 产品营销 - 建筑设计与模拟 - 任务规划 - 培训 - 娱乐 # JavaFX 2.x版中的3D功能特性 在JavaFX 2.x版本中可以创建2维对象并可以将它们变换到3D空间中。你可以通过集成Group类来创建自定义Group,并且设置任何你想要的子变换矩阵。你可以模拟其他3D内容专业包——如Maya、3D Studio Max等——所提供的变换组(Transform Group)的行为,因为你可以自定义对应变换组中的子矩阵。参考《在JavaFX中应用变换(Applying Transformation in JavaFX)》来了解更多关于变换特性的信息。 例1-1展示了构造一个Group子类Xform的样例代码,其中带有一个平移(Translation)、一个中心点(Pivot)、三个旋转(Rotation)、一个缩放(Scale)和一个反向中心点(Inverse Pivot)。 ```java 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布局。Node的中心点会在2D UI布局时的特定场景下被重新计算,但是如果你按照例1-1所示的代码继承Group创建了Xform子类,并且使用了那些新变换,它会忽略2D UI布局。 尽管对于2D布局中的UI控件来说,对中心点的重计算功能是让人很满意的,但是在3D布局中它可能并不是你想要的东西。由于中心点会按Node的布局范围的中心来进行重计算,因此对布局范围的任何改变将会对中心点造成改变,这将导致对象的自动移动。因此对一个Group Node来说,任何对其子节点的改变,包括位置、几何形状、效果、方向或者缩放,都将会导致Group的布局边界改变。在3D布局中时这将会导致对象不以预期的方式自动移动,但是在2D布局中它却以令人满意的方式工作。因此在一个3D布局中,你会希望忽略对中心点的自动计算。 Node上一些有帮助的3D Transform方法在例1-2中被列出来了。 例 1–2 Node上有帮助的3D Transform方法 ```java 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) ```
立即登录,发表评论
没有帐号?立即注册
{{$.post.CommentNum}} 条评论