View
112
Download
0
Category
Preview:
Citation preview
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D Application Programming Interface
Graphische Datenverarbeitung
Java3D
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Scene Graph
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 Klassecontent: alle visual objects eines scene graph
Knoten: Instanzen von Java3D KlassenKanten: 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 Kinderb) „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 Knoteneinen Baum.
Die Referenzen und NodeComponent Objekte sind nichtTeil dieses Baums.
Scene Graph Path
Weg von der Wurzel zu einem bestimmten Blatt desscene graph tree
Der scene graph path spezifiziert den Zustand eines Blattsvollständig !
Wurzel eines scene graph tree ist ein Locale Objekt
© 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 nurdurch den scene graph path bestimmt.
Der Java 3D „Erzeuger“ (renderer) erzeugt die Blätter inder Reihenfolge, die er für am effizientesten hält. DerProgrammierer hat (praktisch) keinen Einfluß aufdie Reihenfolge.
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
scene graph Symbole
Eine scene graph Zeichnung kann als Spezifikationdes Programms gesehen werden
Knoten und NodeComponents (Objekte)
VirtualUniverse
Locale
Group (innerer Knoten)
Leaf (Blatt)
NodeComponent
andere Objekte
Beziehungen:
„Eltern-Kind“
Referenz
Klassen Namen !
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Einfacher scene graphVirtualUniverse (nur einmal im Programm)
Locale (Landmarke im Universum)BG istUnterklasse
BG BG BranchGroup Knoten
SShape3D Knoten
Aussehen Geometrie
TG TransformGroup Knoten
View Platform Screen3DCanvas3DView
Physikalischer Körper
Physikalische Umgebung
node components
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
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 Kameraihr Bild überträgt
Screen3D Bildschirm, auf dem das Bildfensterdargestellt 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
SichtAussichtsort, 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 VirtualUniverseObjekt 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 einemvollständigen view branch graph
Das SimpleUniverse benutzt Bequemlichkeitsklassen vonViewingPlatform 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 obigesCanvas3D 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
x
y
z(0,0,0) ist auf der image plate Ebene
© 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ändertwerden
es sei denn, eine entsprechende „capability“ wurde vorhergesetzt
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
compile
durch Kompilieren wird ein branch graph für das Zeichneneffizient gemacht
Am besten wird ein branch graph kompiliert, kurz bevorer „live“ gemacht wird.
Es gibt keinen „starte den Zeichner“ Schritt
Der Java3D Zeichner startet, wenn ein branch graph mit einerInstanz von View „live“ wird
Java3D Renderer (Zeichner)
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Beispiel: HelloJava3Da (siehe JBuilder Projekt)
BGView branch
graph
ColorCube
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Beispiel: Würfel rotieren (HelloJava3Da1)
TG
ColorCube
BG...Transform3D rotate = new Transform3D();rotate.rotX(Math.PI / 4.0d);TransformGroup objRotate = new TransformGroup(rotate)...
Erzeugen der TransformGroup
...BranchGroup objRoot = new BranchGroup();objRotate.addChild(new ColorCube(0.4));objRoot.addChild(objRotate);...
„Einhängen“ in Baum
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Beispiel: Kombinationen von Transformationen (HelloJava3Db)
TG
ColorCube
BG
...rotate .rotX(Math.PI / 4.0d);tempRotate.rotY(Math.PI / 4.0d);rotate.mul(tempRotate);...
Erzeugen der kombinierten Transform3D
© 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 <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, diein einem sceneGraph vorkommen)
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Capabilities von „TransformGroup“
TransformGroup.ALLOW_TRANSFORM_READTransformGroup.ALLOW_TRANSFORM_WRITE } int
Capabilities von „Group“
Group.ALLOW_CHILDREN_EXTEND
Group.ALLOW_CHILDREN_READGroup.ALLOW_CHILDREN_WRITE
Referenzen zu Kindernkönnen gelesen/geschrieben werden
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Animation
activation volume
interaction: Reaktion auf Benutzer Eingabenanimation: Reaktion auf Ablauf der Zeit
Alles was von der ViewPlatform eingesehen wird
scheduling region
Raum, für den ein bestimmtes Verhalten (behavior) gilt
Jedes visual object kann (mind.) ein Verhalten haben.Dieses wird durch ein behavior Objekt beschrieben.
Ein behavior wird aktiv, wenn das activation volume seinescheduling 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 -> TransformGroupPositionInterpolatorScaleInterpolatorColorInterpolatorTransparencyInterpolator
© 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
Die RotationInterpolator Klasse
RotationInterpolator( Alpha alpha, TransformGroup target )
void setSchedulingBounds( Bounds region )
Die BoundingSphere Klasse
BoundingSphere( Point3D center, double radius )
Java3D
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
BGView branch
graph
ColorCube
Beispiel: HelloJava3Dc (siehe JBuilder Projekt)
TGB
Verhalten
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung
Java3D
Farben des ColorCube
gelb blau
y
xRückseite: Grün
violett
positiveDrehrichtg.
türkis
Recommended