📜  JavaFX Light.Spot效果(1)

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

JavaFX Light.Spot效果介绍

JavaFX提供了多种视觉效果,其中一种是Light.Spot效果。该效果模拟了一个聚光灯的效果,可以用在需要强调某个区域的场景中。

实现Light.Spot效果的步骤
第一步 - 创建一个Group

在场景中创建一个Group,用于将我们需要加入Light.Spot效果的节点添加到场景中。

Group group = new Group();
第二步 - 创建一个Light.Spot对象

接下来创建一个Light.Spot对象,该对象有多个构造函数,可以根据需要选择适合的构造函数。此处我们选择一个使用指定位置和方向的构造函数。

Light.Spot light = new Light.Spot();
light.setX(0);
light.setY(0);
light.setZ(-100);
light.setPointsAtX(0);
light.setPointsAtY(0);
light.setPointsAtZ(0);
light.setSpecularExponent(20);
light.setColor(Color.web("#FFFFFF"));
第三步 - 将Light.Spot对象添加到Group中

接下来我们将Light.Spot对象添加到Group中即可。

group.getChildren().add(light);
第四步 - 给需要添加Light.Spot效果的节点设置Material

最后,我们需要给需要添加Light.Spot效果的节点设置Material。

Box box = new Box(100, 100, 100);
PhongMaterial material = new PhongMaterial();
material.setDiffuseColor(Color.web("#333333"));
material.setSpecularColor(Color.web("#FFFFFF"));
box.setMaterial(material);
group.getChildren().add(box);
完整代码示例
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.PointLight;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.stage.Stage;
import javafx.scene.shape.Sphere;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.scene.paint.Material;
import javafx.scene.shape.Shape3D;
import javafx.scene.shape.Shape3D;

public class LightSpotExample extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        // 创建 Group
        Group group = new Group();

        // 创建 Light.Spot
        Light.Spot light = new Light.Spot();
        light.setX(0);
        light.setY(0);
        light.setZ(-100);
        light.setPointsAtX(0);
        light.setPointsAtY(0);
        light.setPointsAtZ(0);
        light.setSpecularExponent(20);
        light.setColor(Color.web("#FFFFFF"));

        // 将 Light.Spot 添加  Group
        group.getChildren().add(light);

        //创建盒子
        Box box = new Box(100, 100, 100);

        // 修改盒子的颜色
        PhongMaterial material = new PhongMaterial();
        material.setDiffuseColor(Color.web("#333333"));
        material.setSpecularColor(Color.web("#FFFFFF"));
        box.setMaterial(material);

        // 给盒子添加 Light.Spot效果
        box.setDrawMode(DrawMode.FILL);
        box.setCullFace(CullFace.FRONT);
        box.getTransforms().addAll(
                new Translate(-25, -25, 0),
                new Rotate(-45, Rotate.Y_AXIS),
                new Rotate(-45, Rotate.X_AXIS)
        );
        group.getChildren().addAll(box);

        Scene scene = new Scene(group, 800, 600, true);
        scene.setFill(Color.web("#4a4a4a"));
        scene.setCamera(new PerspectiveCamera());

        primaryStage.setTitle("JavaFX Light.Spot Example");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}
完整效果

运行该程序后,我们将会看到一个盒子在聚光灯的照射下,效果如下图:

效果图