JavaFX3D透明度

JavaFX3D透明度,3d,javafx,transparency,javafx-3d,3d,Javafx,Transparency,Javafx 3d,我正在寻找一种在JavaFX3D中渲染透明对象的方法。到目前为止,什么都没有。我发现了这个问题。是否有解决方法,或者这只是我不能使用的东西?如果我需要一个透明的对象,除了JavaFX(比如Java3D),我还需要其他东西吗?更新 从Java8U60B14开始,这个答案已经过时了,因为在该构建中,透明度被添加到了JavaFX中 正如您在问题注释中链接的问题一样,JavaFX3D for Java8不支持透明性。它可以为Java9实现 用户在问题跟踪者的评论中提到了一个变通方法,涉及对JavaFX

我正在寻找一种在JavaFX3D中渲染透明对象的方法。到目前为止,什么都没有。我发现了这个问题。是否有解决方法,或者这只是我不能使用的东西?如果我需要一个透明的对象,除了JavaFX(比如Java3D),我还需要其他东西吗?

更新

从Java8U60B14开始,这个答案已经过时了,因为在该构建中,透明度被添加到了JavaFX中


正如您在问题注释中链接的问题一样,JavaFX3D for Java8不支持透明性。它可以为Java9实现

用户在问题跟踪者的评论中提到了一个变通方法,涉及对JavaFX OpenGL管道的本机代码进行黑客攻击。如果你非常渴望这个功能,你可以试试这个黑客。如果这不适合您,那么您需要选择不同的技术。

因为JDK8u60透明度在3D形状中启用

这是一个使用它进行的快速测试:

在一个长方体和两个球体的顶部添加了一个带有漫反射颜色
color.web(#ffff0080”)
的圆柱体

group.getChildren().addAll(sphere1, sphere2, box, cylinder);
不过没有深度排序算法,这意味着3D形状添加到场景中的顺序很重要。我们需要更改顺序,以允许盒子中的透明度:

group.getChildren().addAll(sphere1, sphere2, cylinder, box);

这里有一个部分解决方案。若要将地球纹理图像映射到球体,并将透明度添加到球体,请同时设置“漫反射贴图”和“漫反射颜色”:

private void makeEarth() {
         PhongMaterial earthMaterial = new PhongMaterial();
         Image earthImage = new Image("file:imgs/earth.jpg");
         earthMaterial.setDiffuseMap(earthImage);
         earthMaterial.setDiffuseColor(new Color(1,1,1,0.6));  // Note alpha of 0.6
         earthMaterial.diffuseMapProperty();
         earth=createSphere(0,0,0,300,earthMaterial);
         earthMaterial.setSpecularColor(Color.INDIANRED);         
         earth.setRotationAxis(Rotate.Y_AXIS);
         world.getChildren().add(earth);
    }
这仅适用于允许场景的背景图像(由
scene.setFill(starFieldImagePattern);
设置)显示。它还不能允许其他形状显示出来


显然,这是因为在计算像素的颜色时,漫反射颜色与漫反射贴图颜色相乘。请参阅。

谢谢。看起来,使用Java3D(而不是JavaFX3D)将是使透明度发挥作用的更简单的解决方案。