270 likes | 403 Views
Java3D. Java3D Application Programming Interface Graphische Datenverarbeitung. Java3D. Begriffsbestimmungen. visual object : Objekt im scene graph (z.B. Würfel oder Kugel) (auch, wenn es im Augenblick
E N D
Java3D Java3D Application Programming Interface 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
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.
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 !
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.
Klassen Namen ! Java3D scene graph Symbole Eine scene graph Zeichnung kann als Spezifikation des Programms gesehen werden Knoten und NodeComponents (Objekte) Beziehungen: VirtualUniverse „Eltern-Kind“ Locale Referenz Group (innerer Knoten) Leaf (Blatt) NodeComponent andere Objekte
BG ist Unterklasse BG BG TG S Aussehen Geometrie View Canvas3D Screen3D Physikalischer Körper Physikalische Umgebung Java3D Einfacher scene graph VirtualUniverse (nur einmal im Programm) Locale (Landmarke im Universum) BranchGroup Knoten Shape3D Knoten TransformGroup Knoten View Platform node components
Sichtzweig Ort, an dem Betrachter / Fotoapparat / Filmkamera sich befindet View platform Fotoapparat bzw. dessen Ausrichtung View (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
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
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
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
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)
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
Java3D Image Plate y z (0,0,0) ist auf der image plate Ebene x
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
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
Java3D Beispiel: HelloJava3Da (siehe JBuilder Projekt) BG View branch graph ColorCube
Java3D Beispiel: Würfel rotieren (HelloJava3Da1) Erzeugen der TransformGroup ... Transform3D rotate = new Transform3D(); rotate.rotX(Math.PI / 4.0d); TransformGroup objRotate = new TransformGroup(rotate) ... BG TG „Einhängen“ in Baum ... BranchGroup objRoot = new BranchGroup(); objRotate.addChild(new ColorCube(0.4)); objRoot.addChild(objRotate); ... ColorCube
Java3D Beispiel: Kombinationen von Transformationen (HelloJava3Db) BG Erzeugen der kombinierten Transform3D ... rotate .rotX(Math.PI / 4.0d); tempRotate.rotY(Math.PI / 4.0d); rotate.mul(tempRotate); ... TG ColorCube
Java3D Capabilities Wenn sceneGraph „live“ wird, oder „compiled“ ist, kann das Programm die Parameter (capability) der sceneGraph Objekte nicht mehr ändern ! void <Instanz von SceneGraphObject>.clearCapability(int bit) boolean <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)
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
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).
Java3D Interpolator • Vordefinierte behavior Klasse • Manipuliert die Parameter eines sceneGraph Objekts in Abhängigkeit von einer Zeitfunktion Beispiele: RotationInterpolator -> TransformGroup PositionInterpolator ScaleInterpolator ColorInterpolator TransparencyInterpolator
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
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).
Java3D Beispiel: HelloJava3Dc (siehe JBuilder Projekt) BG View branch graph Verhalten B TG ColorCube
Java3D Farben des ColorCube violett gelb blau y türkis Rückseite: Grün positive Drehrichtg. x