文档



JavaFX:使用JavaFX图形

5 光照

本章介绍了JavaFX 3D图形库中包含的光照API。

现在,光照也被定义为场景图中的一个节点。如果场景中包含的活动光源集合为空,则提供默认光源。每个光源包含一组受影响的节点。如果节点集合为空,则所有场景(或子场景)上的节点都受到影响。如果父节点在该节点集合中,那么它的所有子节点也会受到影响。

光源与Shape3D对象的几何形状和材质相互作用,提供渲染结果。目前,有两种类型的光源:

  • AmbientLight - 似乎来自所有方向的光源。

  • PointLight - 在空间中有一个固定点,并向所有方向均匀辐射光线的光源。

示例5-1显示了光照类层次结构。

示例5-1 光照类层次结构

javafx.scene.Node
   javafx.scene.LightBase (抽象类)
      javafx.scene.AmbientLight
      javafx.scene.PointLight

创建和使用光照

要创建点光源并将其添加到场景中,请执行以下操作:

PointLight light = new PointLight();
    light.setColor(Color.RED);
    

使用以下代码将光源添加到场景图中:

Group lightGroup = new Group();
    lightGroup.getChildren().add(light);
    root.getChildren().add(lightGroup);

使用以下代码将光源旋转45度:

light.rotate(45);

要移动lightGroup并使光源随之移动,请使用类似以下代码的方法。

lightGroup.setTranslateZ(-75);

setTranslateZ()方法设置属性translateZ的值,在上面的示例代码中设置为-75。该值将添加到由transforms ObservableListlayoutZ定义的任何平移。

示例5-2显示了从MSAAApp.java应用程序中提取的代码片段,演示了如何使用PointLight API。

示例5-2 MSAAApp.java代码片段使用PointLight API

...
        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);
...
关闭窗口

目录

JavaFX: 使用JavaFX图形

展开 折叠