Java3D Java3D Application Programming Interface Graphische Datenverarbeitung © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Begriffsbestimmungen visual object: Objekt im scene graph (z.B. Würfel oder Kugel) (auch, wenn es im Augenblick nicht sichtbar ist, d.h. nicht im „view“) object: Instanz einer Klasse content: alle visual objects eines scene graph Scene Graph Knoten: Instanzen von Java3D Klassen Kanten: Beziehungen zwischen den Knoten © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Beziehungen zwischen Knoten im scene graph a) „Eltern - Kind“ innerer Knoten hat beliebig viele Kinder aber nur einen Vater, Blatt Knoten haben keine Kinder b) „Referenz“ Assoziation zwischen einem NodeComponent Objekt und einem Knoten des scene graph. © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Scene Graph Tree Die „Eltern-Kind“ Beziehungen bilden mit ihren Knoten einen Baum. Die Referenzen und NodeComponent Objekte sind nicht Teil dieses Baums. Wurzel eines scene graph tree ist ein Locale Objekt Scene Graph Path Weg von der Wurzel zu einem bestimmten Blatt des scene graph tree Der scene graph path spezifiziert den Zustand eines Blatts vollständig ! © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Zustand eines Blatts des scene graph tree Ort, Orientierung, Größe eines visual object Die visuellen Attribute eines visual object werden nur durch den scene graph path bestimmt. Der Java 3D „Erzeuger“ (renderer) erzeugt die Blätter in der Reihenfolge, die er für am effizientesten hält. Der Programmierer hat (praktisch) keinen Einfluß auf die Reihenfolge. © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D scene graph Symbole Eine scene graph Zeichnung kann als Spezifikation des Programms gesehen werden Knoten und NodeComponents (Objekte) VirtualUniverse Locale Beziehungen: „Eltern-Kind“ Referenz Group (innerer Knoten) Leaf (Blatt) NodeComponent andere Objekte © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Klassen Namen ! Java3D Einfacher scene graph VirtualUniverse (nur einmal im Programm) BG ist Unterklasse Locale (Landmarke im Universum) BG BG Shape3D Knoten S Aussehen BranchGroup Knoten TG TransformGroup Knoten Geometrie node components View Platform Physikalischer Körper © Prof. Dr. H. Gläser, Graphische Datenverarbeitung View Canvas3D Screen3D Physikalische Umgebung Sichtzweig View platform Ort, an dem Betrachter / Fotoapparat / Filmkamera sich befindet View Fotoapparat bzw. dessen Ausrichtung (auf einer View platform können mehrere Kameras postiert sein) Canvas3D Bildfenster, auf das die Kamera ihr Bild überträgt Screen3D Bildschirm, auf dem das Bildfenster dargestellt wird © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Einfacher scene graph Ein VirtualUniverse Objekt hat eine Liste von Locale Objekten BranchGroup Objekt Wurzel eines Untergraphen. Zwei Arten von Untergraphen: a) view branch graph (Sicht) b) content branch graph (Inhalt) Inhalt Geometrie, Erscheinung, Verhalten, Ort, Ton, Licht Sicht Aussichtsort, Blickrichtung © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Kochrezept für eine Java3D Programm Erzeuge ein Canvas3D Objekt Erzeuge ein VirtualUniverse Objekt Erzeuge ein Locale Objekt und trage es in das VirtualUniverse Objekt ein Erzeuge einen view branch graph: a) Erzeuge ein View Objekt b) Erzeuge ein ViewPlatform Objekt c) Erzeuge ein PhysicalBody Objekt d) Erzeuge ein PhysicalEnvironement Objekt e) Trage ViewPlatform, PhysicalBody, PhysicalEnvironement, und Canvas3D Objekt in das View Objekt ein © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Kochrezept für eine Java3D Programm (Fortsetzung) Konstruiere einen content branch graph Kompiliere die branch graph(s) Füge die Untergraphen in das Locale Objekt ein © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D SimpleUniverse Erzeugt scene graph mit VirtualUniverse, Locale, und einem vollständigen view branch graph Das SimpleUniverse benutzt Bequemlichkeitsklassen von ViewingPlatform und View statt den Kern-Klassen (Paket: com.sun.j3d.utils.universe) © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Kochrezept mit SimpleUniverse Erzeuge ein Canvas3D Objekt Erzeuge ein SimpleUniverse Objekt, welches obiges Canvas3D Objekt referenziert a) Anpassen des SimpleUniverse Objekts Konstruiere den content branch Kompiliere den content branch graph Führe den content branch graph in die Locale des SimpleUniverse ein © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Image Plate y z (0,0,0) ist auf der image plate Ebene x © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D live Wenn ein branch graph in ein Locale Objekt eingetragen wird, wird er „live“ „live“ bedeute, dass alle Objekte des branch graph gezeichnet werden. Die Parameter dieser Objekte können nicht mehr geändert werden es sei denn, eine entsprechende „capability“ wurde vorher gesetzt © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D compile durch Kompilieren wird ein branch graph für das Zeichnen effizient gemacht Am besten wird ein branch graph kompiliert, kurz bevor er „live“ gemacht wird. Java3D Renderer (Zeichner) Es gibt keinen „starte den Zeichner“ Schritt Der Java3D Zeichner startet, wenn ein branch graph mit einer Instanz von View „live“ wird © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Beispiel: HelloJava3Da (siehe JBuilder Projekt) BG View branch graph ColorCube © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Beispiel: Würfel rotieren (HelloJava3Da1) Erzeugen der TransformGroup BG ... Transform3D rotate = new Transform3D(); rotate.rotX(Math.PI / 4.0d); TransformGroup objRotate = new TransformGroup(rotate) ... TG „Einhängen“ in Baum ColorCube ... BranchGroup objRoot = new BranchGroup(); objRotate.addChild(new ColorCube(0.4)); objRoot.addChild(objRotate); ... © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Beispiel: Kombinationen von Transformationen (HelloJava3Db) BG TG Erzeugen der kombinierten Transform3D ... rotate .rotX(Math.PI / 4.0d); tempRotate.rotY(Math.PI / 4.0d); rotate.mul(tempRotate); ... ColorCube © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Capabilities Wenn sceneGraph „live“ wird, oder „compiled“ ist, kann das Programm die Parameter (capability) der sceneGraph Objekte nicht mehr ändern ! void boolean <Instanz von SceneGraphObject>.clearCapability(int bit) <Instanz von SceneGraphObject>.getCapability(int bit) void <Instanz von SceneGraphObject>.setCapability(int bit) (SceneGraphObject ist Superklasse von (fast) allen Klassen, die in einem sceneGraph vorkommen) © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Capabilities von „TransformGroup“ TransformGroup.ALLOW_TRANSFORM_READ TransformGroup.ALLOW_TRANSFORM_WRITE } int Capabilities von „Group“ Group.ALLOW_CHILDREN_EXTEND Group.ALLOW_CHILDREN_READ Group.ALLOW_CHILDREN_WRITE Referenzen zu Kindern können gelesen/geschrieben werden © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Animation interaction: Reaktion auf Benutzer Eingaben animation: Reaktion auf Ablauf der Zeit Jedes visual object kann (mind.) ein Verhalten haben. Dieses wird durch ein behavior Objekt beschrieben. activation volume Alles was von der ViewPlatform eingesehen wird scheduling region Raum, für den ein bestimmtes Verhalten (behavior) gilt Ein behavior wird aktiv, wenn das activation volume seine scheduling region schneidet (Effizienz). © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Interpolator • Vordefinierte behavior Klasse • Manipuliert die Parameter eines sceneGraph Objekts in Abhängigkeit von einer Zeitfunktion Beispiele: RotationInterpolator -> TransformGroup PositionInterpolator ScaleInterpolator ColorInterpolator TransparencyInterpolator © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Einfügen von „Verhalten“ (behavior) • Setze „ALLOW_TRANSFORM_WRITE“ der Ziel- TransformGroup • Erzeuge Zeitfunktions („alpha“) Objekt • Erzeuge Interpolator Objekt • Lege scheduling region fest • Mache das behavior zum Kind der TransformGroup © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Die RotationInterpolator Klasse RotationInterpolator( Alpha alpha, TransformGroup target ) void setSchedulingBounds( Bounds region ) Die BoundingSphere Klasse BoundingSphere( Point3D center, double radius ) Mit dieser Klasse können kugelförmige scheduling regions definiert werden. Die alpha Klasse Gibt einen zeitabhängigen alpha Wert (Wert zwischen 0 und 1). © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Beispiel: HelloJava3Dc (siehe JBuilder Projekt) BG View branch graph Verhalten B TG ColorCube © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Farben des ColorCube violett gelb blau y Rückseite: Grün türkis © Prof. Dr. H. Gläser, Graphische Datenverarbeitung positive Drehrichtg. x