本章介绍javaFX 3D库的的Light API。
Light也是场景图中的一个节点,如果场景中灯光的集合是空的话,那么就会提供一个默认的灯光。每个灯光都包含一个节点的集合,如果集合没有包含节点,那么场景中所有的节点都会被灯光影响,如果集合中包含一个父节点,那么所有的子节点都会产生影响。
Light与3D图形和它的材料的几何图像相互作用就会产生渲染的结果,我们有两种类型的光源:
AmbientLight :这个光源看起来好像来自各个方向
PointLight :这是一个点光源,他会均匀的向各个方向辐射光。
下面是Light类的层次结构:
javafx.scene.Node
javafx.scene.LightBase (abstract)
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.setTranslateZ(-75);
这个方法设置translateZ属性的值,这行带码设置的值是-75,这个值会被增加到任何ObservableList 和 layoutZ定义的节点中。
下面的代码是一个使用灯光的实例:
...
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);
...
这段代码是取自 之前的MSAAApp.java中。