# Java 3D

Java 3D ist eine Klassenbibliothek von Java-Klassen zur Erzeugung, Manipulation und Darstellung dreidimensionaler Grafiken innerhalb von Java-Anwendungsprogrammen und -Applets. Mit Java 3D können also durch ein Java-Programm dreidimensionale Objekte modelliert, gerendert sowie das Verhalten und die Ansicht gesteuert werden.
Java 3D wurde seit 1997 von Sun Microsystems entwickelt. Die Version 1.0 erschien im Dezember 1998. Die Version 1.4 ist seit März 2006 verfügbar, als wichtiges Leistungsmerkmal ist hier die Möglichkeit der Shader-Programmierung für aktuelle Grafikhardware hervorzuheben. Die Version 1.5 führte unter anderem die Rendering-Pipeline JOGL auf allen Plattformen ein.
Nachdem Sun die Weiterentwicklung zwischenzeitlich eingestellt hatte, ist die Bibliothek seit Sommer 2004 als Open Source freigegeben. Derzeit sind Fassungen für OpenGL für Windows-Systeme und diverse UNIX-Plattformen erhältlich, sowie eine Version für Direct3D auf Windows 9x, Windows 2000 und Windows XP. Für Mac OS X gibt es eine Version für JDK 1.4 (bis 10.3), das JDK 1.5 für Mac OS X (10.4) enthält bereits Java 3D (in Version 1.3). Java 3D Version 1.5 und 1.6 sind für Windows, Linux, Solaris und Mac OS X erhältlich.

## Szenengraph

Java 3D kapselt die Funktionalität der zugrundeliegenden JOGL (OpenGL- oder DirectX in der Version 1.5) Schnittstelle in ein leichter verständliches objektorientiertes Programmkonzept auf Basis eines Szenengraphen. Im Szenengraph wird der logische Aufbau der darzustellenden Objekte auf eine gleichartig aufgebaute, baumähnliche Struktur abgebildet, die im Wesentlichen aus Definitionen von Transformationen und Geometriedaten besteht. Die so strukturierte Sicht der Szene erlaubt eine komfortable Handhabung der Objekte. Auch die Integration einer Soundkulisse in den Szenengraphen ist möglich.
Die Bibliothek implementiert Objekte und Methoden zur Repräsentation einer Szene und nutzt für deren Darstellung ausschließlich vorimplementierte und an das jeweilige Betriebssystem angepasste Funktionsbibliotheken. Damit wird zur Darstellung aller erzeugten Objekte die im System verwendete Videohardware verwendet. Potentiell ist damit die erreichbare Renderinggeschwindigkeit ähnlich hoch wie bei direkter Programmierung mit C und OpenGL oder Direct3D. Daher besteht die Möglichkeit, leistungsfähige 3D-Szenarien zu entwickeln, welche auf der GUI visualisiert werden können.
Ein direkter Zugriff auf OpenGL- oder Direct3D-Funktionen ist von Java 3D nicht vorgesehen. Leistungsmerkmale dieser Schnittstellen, die von Java 3D nicht gekapselt werden, können damit von Anwendungsprogrammen auf Basis von Java 3D nicht verwendet werden. Aufgrund der stetigen Weiterentwicklung der Videohardware hat dies wiederholt dazu geführt, dass neu unterstützte Leistungsmerkmale in Java 3D nur verzögert oder gar nicht verfügbar waren.

## Koordinatensystem

Die Orientierung der Raumachsen in Java 3D bildet ein rechtshändiges Koordinatensystem. In der Nomenklatur von Java 3D wird der so aufgespannte Raum als Virtuelles Universum bezeichnet. Lediglich dieses Koordinatensystem ist vorgesehen, es gibt keine Möglichkeit, den Achsen eine andere Orientierung zuzuordnen.
Die sogenannten Locales-Objekte ermöglichen es, ein sehr präzises Koordinatensystem zu verwenden: durch diese Koordinaten, die als 256-Bit-Festkommazahlen implementiert sind, ist es möglich, von atomarer Ebene bis zum Makrokosmos alle Objekte in einem Koordinatensystem berechnen zu lassen. Damit wird die Nutzung der API für viele wissenschaftliche Anwendungen vereinfacht.