📜  JavaFX 灯光效果(1)

📅  最后修改于: 2023-12-03 15:01:36.379000             🧑  作者: Mango

JavaFX 灯光效果

JavaFX 提供了灯光节点,可以在场景中添加灯光效果来增强视觉效果。在本文中,我们将介绍 JavaFX 的灯光节点及其类型以及如何将它们应用于场景中。

灯光节点类型

JavaFX 提供了四种类型的灯光节点,每一个类型都可应用于不同的场景中,这四种类型的灯光节点分别是:

  • PointLight(点光源):根据其位置在四个方向上发射光线。
  • SpotLight(聚光灯):类似于汽车的前灯,在一个方向上发射光线。
  • DirectionalLight(方向光源):根据其方向在一个方向上发射光线。
  • AmbientLight(环境光源):在场景中创建一个盒子来模拟反射,并让场景呈现出自然光照的效果。
添加灯光效果到场景中

要将灯光效果添加到场景中,我们可以使用以下代码片段:

Group root = new Group();
Scene scene = new Scene(root, 400, 300);
PointLight pointLight = new PointLight();
root.getChildren().add(pointLight);

在这个例子中,我们首先创建了一个 JavaFX 的 Group,然后创建了一个场景并将其设置为 root 的子节点。接下来,我们创建了一个 PointLight 并将其添加到 root 中。

我们还可以设置灯光的位置、颜色和强度,例如:

pointLight.setColor(Color.WHITE);
pointLight.setTranslateX(-50);
pointLight.setTranslateY(-50);
pointLight.setTranslateZ(-300);

这里,我们使用了 setColor 方法设置了灯光节点的颜色,并使用了 setTranslateXsetTranslateYsetTranslateZ 方法来设置灯光节点的位置,以便在场景中正确地显示灯光效果。

灯光节点的叠加效果

灯光节点可以叠加,以产生更加复杂的光照效果,例如:

AmbientLight ambientLight = new AmbientLight(Color.rgb(255, 255, 255));
PointLight pointLight = new PointLight(Color.rgb(255, 255, 255));
pointLight.setTranslateX(-50);
pointLight.setTranslateY(-50);
pointLight.setTranslateZ(-300);
Group root = new Group();
root.getChildren().addAll(ambientLight, pointLight);
Scene scene = new Scene(root, 400, 300);

在这个例子中,我们首先创建了一个 AmbientLight,然后创建了一个 PointLight。接下来,我们将这两个灯光节点都添加到了 root 中,场景中就会叠加这两个灯光节点的效果。这样做可以让场景看起来更真实。

同时应用多个灯光节点

我们也可以同时应用多个灯光节点,以产生更加复杂的视觉效果。例如:

PointLight pointLight1 = new PointLight(Color.rgb(255, 0, 0));
PointLight pointLight2 = new PointLight(Color.rgb(0, 255, 0));
PointLight pointLight3 = new PointLight(Color.rgb(0, 0, 255));
pointLight1.setTranslateX(-50);
pointLight2.setTranslateY(-50);
pointLight3.setTranslateZ(-300);
Group root = new Group();
root.getChildren().addAll(pointLight1, pointLight2, pointLight3);
Scene scene = new Scene(root, 400, 300);

在这个例子中,我们创建了三个 PointLight,每一个都有不同的颜色。接下来,我们将这三个灯光节点都添加到了 root 中,场景中就会同时显示这三种颜色的灯光效果。

总结

在这篇文章中,我们介绍了 JavaFX 的灯光节点及其类型,以及如何将它们应用于场景中。我们还展示了如何将多个灯光节点叠加和应用于同一个场景中,以实现更加丰富的视觉效果。为了更好地理解这些实例代码,建议读者多加实践和尝试。