27
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D pplication Programming Interfac Graphische Datenverarbeitung Java3D

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

Embed Size (px)

Citation preview

Page 1: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung

Java3D Application Programming Interface

Graphische Datenverarbeitung

Java3D

Page 2: © 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

Page 3: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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.

Page 4: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 5: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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.

Page 6: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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 !

Page 7: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 8: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 9: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 10: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 11: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 12: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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)

Page 13: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 14: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung

Java3D

Image Plate

x

y

z(0,0,0) ist auf der image plate Ebene

Page 15: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 16: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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)

Page 17: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung

Java3D

Beispiel: HelloJava3Da (siehe JBuilder Projekt)

BGView branch

graph

ColorCube

Page 18: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 19: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 20: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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)

Page 21: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 22: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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).

Page 23: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 24: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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

Page 25: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© 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).

Page 26: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung

Java3D

BGView branch

graph

ColorCube

Beispiel: HelloJava3Dc (siehe JBuilder Projekt)

TGB

Verhalten

Page 27: © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Application Programming Interface Graphische Datenverarbeitung Java3D

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung

Java3D

Farben des ColorCube

gelb blau

y

xRückseite: Grün

violett

positiveDrehrichtg.

türkis