2015-03-27 9 views

Antwort

10

Da JDK8u60 b14 Transparenz in 3D-Formen aktiviert ist.

Dies ist ein Schnelltest mit ihm getan:

Transparency

Ein Zylinder mit diffuser Farbe Color.web("#ffff0080"), hinzugefügt wird auf eine Box und zwei Kugeln.

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

Es gibt keine Tiefe Sortieralgorithmus obwohl, was bedeutet, dass, um wie 3D-Formen hinzugefügt werden, um die Szene zählt. Wir müssen die Reihenfolge ändern, Transparenz in der Box zu ermöglichen:

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

Transparency

3

aktualisiert

Diese Antwort ist veraltet, da die Java 8u60b14 wie Transparenz in diesem Build JavaFX hinzugefügt wurde.


Als Problem, das Sie in Ihrer Frage Notizen verknüpfen, Transparenz in JavaFX 3D für Java 8. Es ist für Java 9.

implementiert werden kann nicht unterstützt Es gibt eine Problemumgehung ein Benutzer in den Kommentaren erwähnt der Issue Tracker, der einen Hack auf den nativen Code für die JavaFX OpenGL Pipeline beinhaltet. Wenn Sie verzweifelt nach dieser Funktionalität suchen, können Sie diesen Hack ausprobieren. Wenn das für Sie nicht geeignet ist, müssen Sie eine andere Technologie wählen.

+0

Vielen Dank. Es sieht so aus, als wäre die Verwendung von Java 3D (anstelle von JavaFX 3D) die einfachere Lösung, um Transparenz zu schaffen. – CJDood

1

Hier ist eine Teillösung. Um die Transparenz zu einer Kugel mit dem Bild der Erde Textur hinzufügen, um es abgebildet, setzen sowohl ein diffuseMap und ein diffuseColor:

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); 
    } 

Dies funktioniert nur das Hintergrundbild der Szene zu ermöglichen (durch scene.setFill(starFieldImagePattern);) durch zu zeigen. Es funktioniert noch nicht, damit andere Formen durchscheinen können.

Offensichtlich ist der Grund dafür, dass die diffuse Farbe mit der diffuseMap-Farbe multipliziert wird, wenn die Farbe der Pixel berechnet wird. Siehe https://docs.oracle.com/javase/8/javafx/api/javafx/scene/paint/PhongMaterial.html.

+0

Interessanter Trick Don, danke für das Teilen. – Birdasaur