Java3D Kapitel1

Werbung
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
Herunterladen