文档



JavaFX:使用JavaFX图形
4 SubScene(发布版8)
4 SubScene(发布8版)

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示例。

关闭窗口

目录

JavaFX: 使用JavaFX图形

展开 折叠