4 SubScene
本章介绍了在JavaFX中使用SubScene API的信息。
SubScene节点是场景图中内容的容器。它是用于场景分离的特殊节点。它可以用于使用不同的相机渲染场景的一部分。如果您希望在布局中将3D对象的Y轴朝上,而2D UI对象的Y轴朝下,可以使用SubScene节点。
一些可能的SubScene用例包括:
-
用于UI控件的覆盖层(需要静态相机)
-
用于背景的底图(静态或更新频率较低)
-
“抬头”显示
-
将3D对象的Y轴朝上,将2D UI的Y轴朝下。
创建SubScene
示例4-1显示了在应用程序中创建SubScene节点的两个构造函数。
示例4-1 SubScene构造函数
// // 使用特定大小的根节点创建SubScene。 // public SubScene(Parent root, double width, double height) // // 构造一个由根节点组成的SubScene,具有宽度和高度的尺寸,指定是否为此场景创建深度缓冲区, // 并指定是否请求场景抗锯齿。 public SubScene(Parent root, double width, double height, boolean depthBuffer, SceneAntialiasing antiAliasing)
创建了SubScene之后,您可以使用可用的方法来修改它,以指定或获取SubScene的高度、根节点、宽度、背景填充、用于渲染SubScene的相机类型,以及SubScene是否抗锯齿。
SubScene的示例用法
在示例4-2中展示的CreateSubScene()
方法演示了如何使用上述第二个SubScene构造函数。该方法是MSAAApp.java示例应用程序的一部分,该示例应用程序在附录A中列出。
示例4-2 使用SubScene的代码示例
... SubScene msaa = createSubScene("MSAA = true", cylinder2, Color.TRANSPARENT, new PerspectiveCamera(), true); ... ... private static SubScene createSubScene(String title, Node node, Paint fillPaint, Camera camera, boolean msaa) { Group root = new Group(); PointLight light = new PointLight(Color.WHITE); light.setTranslateX(50); light.setTranslateY(-300); light.setTranslateZ(-400); PointLight light2 = new PointLight(Color.color(0.6, 0.3, 0.4)); light2.setTranslateX(400); light2.setTranslateY(0); light2.setTranslateZ(-400); AmbientLight ambientLight = new AmbientLight(Color.color(0.2, 0.2, 0.2)); node.setRotationAxis(new Point3D(2, 1, 0).normalize()); node.setTranslateX(180); node.setTranslateY(180); root.getChildren().addAll(setTitle(title), ambientLight, light, light2, node); SubScene subScene = new SubScene(root, 500, 400, true, msaa ? SceneAntialiasing.BALANCED : SceneAntialiasing.DISABLED); subScene.setFill(fillPaint); subScene.setCamera(camera); return subScene; }
在Ensemble 8示例集的Graphics 3D部分中,还有3D Cubes和Xylophone示例展示了SubScene
API的使用。您可以从JavaFX Demos and Samples部分的http://www.oracle.com/technetwork/java/javase/downloads/
下载Ensemble 8示例。