ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaFX 3D中的可见光源

2019-07-02 12:48:06  阅读:199  来源: 互联网

标签:java 3d javafx javafx-2 javafx-8


我目前正在研究JavaFX 3D功能,我想对太阳系进行建模.我非常成功地创建了PointLight类型的光源,并将其坐标设置为sun的坐标.现在我希望看到太阳以它的光芒作为光源发光.我该怎么办?

@Component
public class RootPane extends StackPane {

    @Inject
    protected Scene scene;

    @Inject
    protected PerspectiveCamera camera;

    @Inject
    protected LightBase lightBase;

    @PostConstruct
    public void init() {
        setBackground(new Background(new BackgroundFill(
                Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));
        setAlignment(Pos.CENTER);
        setPadding(new Insets(20));

        Sphere sunSphere = new Sphere(80);
        sunSphere.setEffect(new Glow(5));

        Sphere mercurySphere = new Sphere(40);
        mercurySphere.translateZProperty().bind(sunSphere.translateZProperty()
                .add(200));

        Sphere venusSphere = new Sphere(40);
        venusSphere.translateXProperty().bind(sunSphere.translateXProperty()
                .subtract(300));
        venusSphere.translateZProperty().bind(sunSphere.translateZProperty()
                .subtract(300));

        Sphere earthSphere = new Sphere(40);
        earthSphere.translateXProperty().bind(sunSphere.translateXProperty()
                .add(300));
        earthSphere.translateZProperty().bind(sunSphere.translateZProperty()
                .subtract(400));

        Rotate rotateX = new Rotate(0, Rotate.X_AXIS);
        Rotate rotateY = new Rotate(0, Rotate.Y_AXIS);
        Rotate rotateZ = new Rotate(0, Rotate.Z_AXIS);

        Translate translate = new Translate(0, 0, -3000);

        camera.getTransforms().addAll(rotateX, rotateY, rotateZ, translate);

        scene.addEventHandler(
                KeyEvent.KEY_PRESSED,
                event -> {
                    if (Objects.equals(event.getCode(), KeyCode.D)) {
                        rotateY.setAngle(rotateY.getAngle() - 
                                (event.isShiftDown() ? 5 : 0.1));
                    } else if (Objects.equals(event.getCode(), KeyCode.A)) {
                        rotateY.setAngle(rotateY.getAngle() + 
                                (event.isShiftDown() ? 5 : 0.1));
                    }
                });
        scene.addEventHandler(
                KeyEvent.KEY_PRESSED,
                event -> {
                    if (Objects.equals(event.getCode(), KeyCode.W)) {
                        rotateX.setAngle(rotateX.getAngle() - 
                                (event.isShiftDown() ? 5 : 0.1));
                    } else if (Objects.equals(event.getCode(), KeyCode.S)) {
                        rotateX.setAngle(rotateX.getAngle() + 
                                (event.isShiftDown() ? 5 : 0.1));
                    }
                });

        lightBase.translateXProperty().bind(sunSphere.translateXProperty());
        lightBase.translateYProperty().bind(sunSphere.translateYProperty());
        lightBase.translateZProperty().bind(sunSphere.translateZProperty());

        getChildren().addAll(sunSphere, mercurySphere, venusSphere,
                earthSphere, camera, lightBase);
    }

}

解决方法:

如果没有您希望实现的效果示例,很难提供答案,但这里有两个选项:

使用添加剂混合创建从太阳发出的粒子效果

使用高光贴图创建材质.

标签:java,3d,javafx,javafx-2,javafx-8
来源: https://codeday.me/bug/20190702/1356421.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有