© DrHitch/Shutterstock.com
JavaFX Rendering & 3D

2 Die JavaFX-Baumschule


Ab JDK 1.8 wird JavaFX um eine Dimension reicher

JavaFX bekommt ab JDK 1.8 ein verbessertes 3D-API, das es relativ einfach macht, sich virtuelle 3-D-Welten zu erschaffen, vielleicht auch die eigene Applikation etwas aufzupeppen oder einfach nur, um etwas zu experimentieren. Wir wollen im Folgenden ein Programm entwerfen, das baumähnliche Strukturen auf den Bildschirm zeichnet – keine abstrakten, sondern tatsächliche, organische Bäume.

Als Implementierungssprache wird Scala verwendet. Diese Programmiersprache bedarf wohl keiner weiteren Vorstellung. JavaFX als offizieller Nachfolger von Swing sollte dem interessierten Java-Entwickler ebenso präsent sein.

Die grundlegenden Designentscheidungen von JavaFX machen es möglich, in wenigen Zeilen Code schon ein recht komplexes Verhalten zu modellieren. Da JavaFX im Wesentlichen auf einem Scene-Graph basiert (es gibt Knoten mit Eltern-Kind-Beziehungen), ist der Schritt, ein 3D-API für JavaFX einzuführen, naheliegend. Um den im Kapitel beschriebenen Sourcecode selbst ausprobieren zu können, muss man einen Early Access Build vom JDK 8 installieren [1].

Der vollständige Sourcecode zu diesem Kapitel befindet sich auf meiner GitHub-Seite [2], sodass man sich das Abtippen sparen kann. In Abbildung 2.1 sieht man das Ergebnis des Programms, und unter [3] gibt es dazu ein kurzes Video.

ladstaetter_2_1_a.png
ladstaetter_2_1_b.png
ladstaetter_2_1c.png
ladstaetter_2_1d.png
ladstaetter_2_1e.png
ladstaetter_2_1f.png
ladstaetter_2_1g.png

Abbildung 2.1: Screenshots des Programms

Los geht’s

Das Programm zeigt also im besten Fall eine Struktur, die einem Baum nicht unähnlich ist. Sicherlich nicht perfekt, aber gut genug, um sich mit ein paar Konzepten des 3D-API vertraut zu machen. Des Weiteren ist die Fingerübung auch ein nettes Beispiel für einen rekursiven Algorithmus, Pattern Matching, Implicits und Traits, sodass es von dieser Seite gesehen auch seinen Reiz hat. In Listing 2.1 sind die neuen Klassen aufgelistet, die ab JDK 1.8 dabei sind und von dem Beispiel benötigt werden.

 import javafx.scene.PointLight
import javafx.scene.paint.Material
import javafx.scene.paint.PhongMaterial
import javafx.scene.shape.Cylinder
import javafx.scene.shape.Shape3D
import javafx.scene.shape.Sphere

Listing 2.1

Es gibt also neue Shapes, die man verwenden kann – Cylinder und Sphere leiten von einer abstrakten Klasse Shape3D ab. Wie in Abbildung 2.2 ersichtlich, gibt es noch weitere Shapes wie MeshView oder Box.

ladstaetter_2_2_Kopie.png

Abbildung 2.2: Screenshot des Typs „Shape3D“

Die Klassen tun genau das, was sie tun sollen: Sie stellen Formen im 3-D-Raum dar, die man über Transformationen in der 3-D-Welt p...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang