如何使 JavaFX 3D Box 透明

问题描述 投票:0回答:1

我正在尝试使 3D

Box
变得透明,让我可以看穿。我正在使用以下代码来制作它。

Box truck = new Box(Truck.WIDTH, Truck.HEIGHT, Truck.DEPTH);
truck.setTranslateX(Truck.WIDTH >> 1);
truck.setTranslateY(Truck.HEIGHT >> 1);
truck.setTranslateZ(Truck.DEPTH >> 1);
truckMaterial.setDiffuseColor(Color.SILVER.deriveColor(.3, .3, 0.4, .3));
truck.setMaterial(truckMaterial);

group = new Group();
group.getChildren().add(truck);

mainScene = new SubScene(group, SCREEN_WIDTH * .75, SCREEN_HEIGHT, true, SceneAntialiasing.BALANCED);
mainScene.setFill(Color.SILVER);

// set up the camera
Camera camera = new PerspectiveCamera();
camera.translateXProperty().set(Truck.WIDTH - ((mainScene.getWidth() / 2) + (SCREEN_WIDTH / 2)));
camera.translateYProperty().set(Truck.HEIGHT - (mainScene.getHeight() / 2));
camera.translateZProperty().set(-(Truck.DEPTH / 0.2));
mainScene.setCamera(camera);

这条线

truckMaterial.setDiffuseColor(Color.SILVER.deriveColor(.3, .3, 0.4, .3));
应该使它透明。材质是
truckMaterial = new PhongMaterial();

如有任何帮助,我们将不胜感激。

java javafx 3d transparency
1个回答
1
投票

只需将

diffuseMaterial
的不透明度设置为非零颜色,材质就会变成半透明。

我知道您在示例中已经这样做了,但是您在银色背景上绘制了一个银色半透明物体,因此您不会看到太多。另外,某些颜色的不透明度上的

.3
仍然非常不透明,因此您可能看不到太多内容。 如以下所述:

但是没有深度排序算法,这意味着 3D 形状添加到场景的顺序很重要

所以,如果我们以这里的 3D 轨道飞行器为例:

并修改群组顺序:

Group space = new Group(sun, sunsRadiance, orbit, earth);

至:

Group space = new Group(earth, orbit, sun, sunsRadiance);

并将太阳的

diffuseColor
更改为
.1
的不透明度。

sun.setMaterial(
        new PhongMaterial(
                Color.ORANGERED
                        .deriveColor(
                                0,
                                1,
                                1,
                                .1
                        ),
                null,
                null,
                null,
                illuminationMap
        )
);

然后,当地球经过半透明的太阳后面时,您将看到白天被照亮的地球。

© www.soinside.com 2019 - 2024. All rights reserved.