代码之家  ›  专栏  ›  技术社区  ›  Hadi Ayoub

如何使JavaFX3DBox透明

  •  0
  • Hadi Ayoub  · 技术社区  · 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();

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

    1 回复  |  直到 1 年前
        1
  •  2
  •   jewelsea    1 年前

    只需设置的不透明度 diffuseMaterial 设置为非不透明的颜色(例如将颜色的不透明度设置为1以下)并且材料将变为半透明。

    我知道你已经在你的例子中做到了,但你有一个银色半透明的物体画在银色的背景上,所以你看不到太多。而且 .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
            )
    );
    

    然后,当地球经过半透明的太阳后面时,你会看到地球在白天明亮地发光。

    front side back