Einführung in
Java3D
Dipl.-Inform. Paul Grimm
Professur Graphische Datenverarbeitung
Ziele des Seminars
n
Wie kann ich Java3D benutzen?
n
Wo kann ich Informationen finden?
n
Wo finde ich Beispiele?
n
Welche Konzepte setzt Java3D um?
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
2/93
Überblick
Einführung in Java 3D
n Benutzung
n Dokumentation
n Aufbau
n
– Szenengraph
– Animationen
– Interaktion
n
Oktober 2001
Ausblick
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
3/93
Einführung - Was ist Java3D?
n
Java Package für interaktive 3D Graphik
n
High-level 3D Graphik API
n
Programmieren von interaktiven
Anwendungen mit 3D Inhalten
n
Nahtlose Integration in Java
n
Kein Browser nötig und Applet-fähig
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
4/93
Was macht Java3D?
n
Übernahme der Bilderzeugung:
– Szenenmanagement
– Verdeckungsrechnung
n
Übernahme der Benutzerinteraktion
n
Plattformunabhängiges API
n
Implementierung für verschiedene Low-Level
APIs (Open GL, Direct3D)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
5/93
Was macht Java3D?
n
Durchführung von Optimierungen
– Paralleles Rendern
– Nutzung von Hardwarebeschleunigung
– Reorganisation des Szenengraphen
(=> Zusatzinformationen können
angegeben werden, die bei der
Optimierung ausgewertet werden)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
6/93
Was macht Java3D?
n
Bereitstellung einer Klassenbibliothek
– Beschreibung des attributierten
Szenengraphen
– Animation
– Virtuelle Kamera
– Benutzerinteraktion
– ...
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
7/93
Anwendungsbeispiele
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
8/93
Anwendungsbeispiele
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
9/93
Anwendungsbeispiele
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
10/93
Anwendungsbeispiele
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
11/93
Starten einer Java3D Anwendung?
n
Standalone
– Starten wie jede andere Java Applikation
n
Applet
– Java Plugin wird benötigt, dies installiert
ggf. auch Java3D
– Applet in eine WWW-Seite einbinden
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
12/93
Nutzung von Java
n
Nutzung des Java-Interpreters
java myprogram
n
Nutzung des Java-Appletviewers
appletviewer myprog.html
n
Nutzung des Java-Compilers:
javac myprogram.java
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
13/93
Beispielanwendungen
n
Mitgelieferte Demo sind im Verzeichnis
… / jdk1.2/demos/java3d
n
Beispiele:
AppearanceTest
FourByFour
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
14/93
Java3D in Web und Literatur
n
SUNs Java3D Homepage
http://java.sun.com/products/java-media/3D
– Download
– Java3D Tutorial
– Java3D API Spezifikation
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
15/93
Java3D in Web und Literatur
n
J3D.org
http://www.j3d.org
– FAQs
– Loader für unterschiedliche 3D-Formate
– Tutorial
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
16/93
Java3D VRML Viewer
n
VRML Library for Java3D
http://www.j3d.org/utilities/loaders/vrml/web3d.html
– VRML Viewer
– VRML Loader
n
Entstanden durch X3D Workinggroup
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
17/93
Java Resourcen
n
Offizielle Java Homepage
http://java.sun.com
n
Downloads unter
http://java.sun.com/products/
n
Java Tutorial
http://developer.java.sun.com/developer/infodocs/
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
18/93
Fragen und Anmerkungen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
19/93
Grundlagen
Oktober 2001
n
Graphiksysteme
n
Koordinatensystem
n
Szenengraph
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
20/93
Graphiksysteme
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
21/93
Versionen
n
1998:
Java3D Version 1.0
n
1999:
Java3D Version 1.1.3
n
2000:
Java3D Version 1.2
n
2001:
Java3D Version 1.2.1
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
22/93
Das Koordinatensystem
n
Java3D benutzt ein rechthändiges
Koordinatensystem
y
x
z
n
3D - Koordinaten, z.B. (2.0, 1.5, 7.21)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
23/93
Globale und lokale
Koordinatensysteme
n
Hierarchie von Koordinatensystemen
– Bsp. Gabel eines Gabelstaplers
» Koordinaten der Gabel bzgl. Stapler
» Koordinaten des Staplers bzgl. der Welt
n
Spitze der Hierarchie: Weltkoordinaten
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
24/93
Der Szenengraph
Struktur der Szenenhierarchie
n Kanten: Abhängigkeitsrelation
n Knoten ( engl. Nodes ):
n
–
–
–
–
Oktober 2001
Geometrien
Transformationen
Materialeigenschaften
...
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
25/93
Szenengraphen in Java3D (1)
n
Java3D wertet Szenengraph
Beschreibung in separaten,
asynchronen Threads aus
–
–
–
–
–
Rendering von Graphik
„Rendering“ von Sound
Animation
Management der Eingabegeräte
Event Erzeugung (z.B. bei Kollisionen)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
26/93
Roadmap
n
Aufbau einer einfachen Java3DAnwendung mit einzelnen Objekten
n
Gruppierung und Transformation
n
Aufbau einer komplexen Szene mit
mehreren Objekten und mit
Animationen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
27/93
Eine Applikation in Kürze
n
Konstruktion einer virtuellen Welt, in der alle
3D Daten enthalten sind
n
Auswahl einer Kamera, um die 3D Daten zu
betrachten
n
Einfügen der 3D Inhalte in die Szene
– Hierarchische Anordnung der Objekte in einem
Szenengraphen
– Beschreibung der Interaktionen
n
Einbetten in eine Java - Anwendung
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
28/93
Aufbau eines Szenengraphen
n Erzeugen
von Knoten
Shape3D myShape1 = new Box();
Shape3D myShape2 = new Cone();
n Gruppieren
von Knoten
BranchGroup myGroup =
new BranchGroup( );
myGroup.addChild( myShape );
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
29/93
Utility Klassen
Utilitity Klassen bauen auf Java3D auf
n Vereinfachen oft auftretende
Operationen:
n
– Aufbau einer virtuellen Welt
– Setzen der Kamera
SimpleUniverse mySimple =
new SimpleUniverse( myCanvas );
mySimple.addBranchGraph(myBranch);
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
30/93
Simple Universe
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
31/93
Viewing-Modell in Java3D
Die meisten APIs transformieren die
Szene
n Java3D transformiert das Auge
n Der Inhalts Zweig der Szene wird nicht
verändert wenn sich der Betrachter
bewegt
n Saubere Trennung von physikalischer
und virtueller Welt
n
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
32/93
Terminologie (1)
n
Virtual universe
– Menge von Szenengraphen
– Ein Universum pro Applikation
n
Locale
– Position im Universum, an der
Szenengraph eingefügt wird
n
Branchgraph
– Ein Szenengraph im Locale
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
33/93
Terminologie (2)
n
Branchgraph wird unterteilt in
– Content branch
z.B. Geometrien,
Beleuchtung, ...
– View branch
virtuelle Kamera,
i.d.R. eine Kamera
pro Universum
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
34/93
Eine Applikation in Kürze II
n
n
n
Konstruiere ein Virtual Universe, das alle 3D
Daten enthalten wird
Wähle ein View, um zu beschreiben wie die
3D Daten betrachtet werden
Konstruiere einen Content Branch um die
3D Inhalte der Szene zu beschreiben
– Plaziere diesen Zweig an ein Locale
– Mehrere Zweige an verschiedenen Locales sind
möglich
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
35/93
Einbetten in eine Java
Anwendung I
n
Folgende Schritte sind notwendig:
1. Erzeugen eines Java AWT Frames
2. Setzen eine Java AWT Layouts
3. Erzeugen eines Canvas3D
4. Einfügen des Canvas3D
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
36/93
Einbetten in eine Java
Anwendung
public static void main( String[] args ) {
Frame frame = new Frame( );
frame.setSize( 640, 480 );
frame.setLayout( new BorderLayout( ) );
Canvas3D canvas = new Canvas3D( null );
frame.add( "Center", canvas );
SimpleUniverse univ =
new SimpleUniverse( canvas );
BranchGroup scene = createSceneGraph();
scene.compile( );
univ.addBranchGraph( scene );
frame.show( );
}
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
37/93
Benötigte Java Packages
n
Java Packages
import java.awt.*;
n
Java3D Packages
import javax.media.j3d.*;
import javax.vecmath.*;
n
Java3D Utility Packages
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
38/93
Rückblick
n
Darstellung von Graphik Primitiven
– Beispiel 1: Box
– Beispiel 2: Cone
n
Einbettung in eine Java-Applikation
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
39/93
3D-Modelle
n
n
Modelle sind Beschreibungen von Objekten
Ein Shape3D - Knoten besteht aus
– Geometrie
– Appearance (Erscheinen)
Shape3D( Geometry geometry,
Appearance appearance )
n
n
Geometrie kann aus mehreren Teilen
bestehen
Appearance enthält verschiedene Attribute,
die beschreiben wie die Geometrie gezeichnet
wird
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
40/93
Elemente einer Geometrie
n
Koordinaten:
Position der Knoten im Raum
n
Normalen:
Nach außen orientierte Normale pro Knoten
n
Farben:
Farbe pro Knoten
n
Textur-Koordinaten:
Texel Position im Knoten
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
41/93
GeometryArray
n
n
GeometryArray erbt von Geometry
Ein GeometryArray Objekt hat vier
Basistypen
–
–
–
–
n
n
Punkte
Linien
Dreiecke
Vierecke
GeometryArray bietet set und get
Methoden
Es gibt Index- und “Strip”-Versionen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
42/93
GeometryArray
n
GeometryArray ist eine Basisklasse,
konkrete Ausführungen
– LineArray, PointArray, QuadArray,
TriangleArray
n
GeometryStripArray (mit Erben
TriangleStripArray, etc.)
n
IndexedGeometryArray (mit Erben
IndexedTriangleArray, etc.)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
43/93
Modelle sind facettiert
n
Ideale Dreiecke und Vierecke
n
Einseitige Primitive
n
Reihenfolge der Eckpunkte bestimmt
die Flächennormale
n
Gegen den Uhrzeigersinn => nach
außen gerichtet
(Beachtung der rechten Hand)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
44/93
Beispiel eines Würfels
class myCube extends QuadArray {
private float[] verts = { ... };
private float[] normals = { ... };
private float[] colors = { ... };
myCube() {
super( 24,QuadArray.COORDINATES |
QuadArray.NORMALS |
QuadArray.COLOR_3);
setCoordinates(0, verts);
setNormals(0, verts);
setColors(0, colors);
}
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
45/93
Beispiel eines Wüfels
private float[] verts =
{
// front face
1.0f, -1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, -1.0f, 1.0f,
...
}
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
46/93
Normalen eines Würfels
private float[] normals =
{
// Front Face
0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f,
0.0f, 1.0f,
...
}
Oktober 2001
0.0f,
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
47/93
Beispiel eines Würfels
class myCube extends QuadArray {
private float[] verts = { ... };
private float[] normals = { ... };
private float[] colors = { ... };
myCube() {
super( 24,QuadArray.COORDINATES |
QuadArray.NORMALS |
QuadArray.COLOR_3);
setCoordinates(0, verts);
setNormals(0, verts);
setColors(0, colors);
}
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
48/93
Appearance
n
Kontrolle über den Rendering-Prozeß
–
–
–
–
–
n
Farbe
Transparenz
Beleuchtungsmodell
Linieneigenschaften
Und viele andere!
Alle Eigenschaften sind in der
Appearance-Klasse und ihren
Komponenten enthalten
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
49/93
Beispiel für verschiedene
Appearance
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
50/93
Farbattribute
n
Ein ColoringAttribut node component
Objekt regelt
– Farbe (wenn kein Beleuchtungsmodell
verwendet wird)
– Beleuchtungsmodell
n
Farbattribute werden verwendet wenn kein
Beleuchtungsmodell verwendet wird
– Emittierende Punkte, Linien, Polygone, etc.
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
51/93
Farbattribute
n
Konstruktor der Klasse
public ColoringAttributes(
float red, float green,
float blue, int shadeModel)
n
Über setColoringAttributes und
getColoringAttributes der Klasse
Appearance werden die Farbattribute
gesetzt.
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
52/93
Materialeigenschaften
n
Ein Material node component Objekt
regelt
– Ambiente, emittierte, diffuse und spekuläre
Farben
– Glanzlicht-Faktor
n
Materialeigenschaften werden verwendet,
wenn das Modell beleuchtet ist
– Die meisten Szenen-Modelle
– Gilt vor den Farbattributen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
53/93
Material
n
Konstruktor der Klasse Material:
Material( Color3f ambientColor,
Color3f emissiveColor,
Color3f diffuseColor,
Color3f specularColor,
float
shininess)
n
Über die Methoden setMaterial und
getMaterial der Appearance werden die
Materialeigenschaften gesetzt
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
54/93
Andere Eigenschaften
n
Das TransparencyAttributes
Objekt steuert die Tranzparenz (0.0-1.0)
n
PointAttributes und LineAttributes
enthalten Punktgröße und Liniendicke
n
PolygonAttributes regeln „culling“ und
Fülleigenschaften (Punkt, Linien, Fläche)
n
RenderingAttributes steuern im Depthund Alpha-Buffer
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
55/93
Texturen
n
Java 3D hat zwei Typen von Texturen
– Texture2D für Bilder
– Texture3D für Volumentexturen
n
Beide Typen beinhalten
–
–
–
–
Texturdaten
Filtermodi
Wrappingmodi
Berandungsfarbe
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
56/93
Texturen
TextureLoader loader = new
TextureLoader("stripe.jpg", this);
ImageComponent2D image =
loader.getImage();
Texture2D texture = new Texture2D();
texture.setImage(0, image);
Appearance appear = new Appearance();
appear.setTexture(texture);
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
57/93
Weiteres Vorgehen
n
Bis jetzt: Aufbau einzelner 3D Objekte
n
Ab jetzt:Integration mehrerer 3D
Objekte
–
–
–
–
Gruppierung von Objekten
Transformation von Objekten
Bewegung von Objekten
Lichtquellen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
58/93
Live Nodes
n
Branch graph, der einem Locale
hinzugefügt wird heißt live, d.h. er
kann dargestellt werden
BranchGroup myBranch = new
BranchGroup( );
myBranch.addChild( myShape );
myLocale.addBranchGraph( myBranch );
n
boolean isLive()
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
59/93
Compiled Nodes
n
BranchGroup kann kompiliert werden
void compile();
n
Beachte: compile bevor live
n
Capabilities geben an, was in einem
Szenengraph noch gelesen und verändert
werden darf, nachdem der Szenengraph
compiled oder live ist
n
Capabilities wirken auf Optimierung
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
60/93
Capabilities (1)
n
Methoden für SceneGraphObject
void setCapability( int bit )
void clearCapability( int bit )
boolean getCapability( int bit )
n
Capabilities gibt es für jeden Knoten
n
In jedem Knoten gibt es Capabilities für die
Attribute
n
Knoten erben die Capabilities der Vaterklasse
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
61/93
Capabilities (2)
n
Beispiele von Shape3D:
–
–
–
–
ALLOW_APPEARANCE_READ
ALLOW_APPEARANCE_WRITE
ALLOW_GEOMETRY_READ
ALLOW_GEOMETRY_WRITE
myShape.setCapability(
Shape3D.ALLOW_APPEARANCE_WRITE );
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
62/93
Gruppen in Java 3D
n
Unterschiedliche Typen
–
–
–
–
–
–
n
Group
BranchGroup
OrderedGroup / DecalGroup
SharedGroup
Switch
TransformGroup
Alle Gruppen haben Kinder
– Modelle, Lichtquellen, Geräusche, Verhalten
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
63/93
Group
n
Die Group Klasse ist der allgemeinste
der Gruppen Knoten
– Hat Genau einen Vater
– Beliebig viele Kinder
n
Man Kinder anfügen, einfügen,
löschen und auslesen
n
Die Rendering-Reihenfolge wird
normalerweise von Java3D bestimmt
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
64/93
BranchGroup
n
Ein BranchGroup Objekt ist ein
Teilbaum des Szenengraphen
– Kann an ein Locale angehängt werden
– Kann compiled werden
– Kann als Kind einer anderen Gruppe
verwendet werden
– Kann zur Laufzeit verschoben oder
gelöscht werden
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
65/93
Ordered / DecalGroup
n
Ein OrderedGroup Objekt garantiert,
daß die Kinder in der vorgegebenen
Reihenfolge bearbeitet werden
n
Ein DecalGroup Objekt ist für den
speziellen Fall von Objekten auf einem
Hintergrund gedacht
– Das Hintergrund-Objekt ist
vorgeschrieben
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
66/93
Switch
n
Ein Switch Objekt erlaubt die
Auswahl der zu bearbeitenden Kinder
n
Es wird keine Reihenfolge vorgegeben
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
67/93
Transformation
n
Alle Modelle werden bezüglich der
Weltkoordinaten plaziert
n
Ein TransformGroup Objekt erlaubt
die Verwendung eines neuen
Koordinaten-systems relativ zum Vater
n
Verändert man die
TransformGroup, so bewegen sich
auch die Modelle in der Gruppe
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
68/93
TransformGroup
Transformationen sind Translation,
Rotation und Skalierung
n Transformationen akkumulieren sich
bei der Traversierung des
Szenengraphen
n Das ergibt die Composite Modelling
Transform (CMT)
n Die Transformationen tiefer im Graph
werden zuerst ausgeführt
n
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
69/93
Transform3D
n
n
n
n
Ein Transform3D Objekt beschreibt die
Transformation einer TransformGroup
Dargestellt als 4x4 Double Matrix
Muß allerdings affin sein (keine
perspektivischen Transformationen)
Beispiel:
Transform3D t = new Transform3D();
t.set(scale, new Vector3d(xpos, ypos,
0.0));
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
70/93
SharedGroups
n
Ein SharedGroup Objekt dient zur
Wiederverwendung von Teilen des
Szenengraphen an mehreren Stellen
– Wird nie direkt in den Szenengraph
eingefügt
– Wird über den Link Knoten referenziert
Veränderungen der SharedGroup
verändern alle Referenzen
n Kann compiled werden
n
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
71/93
Beispiel eines Szenengraph
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
72/93
Verhalten
n
Programmierbarkeit
– Verhalten sind Java-Methoden
n
Effizienz
– Java 3D führt Verhalten nur aus wenn nötig
n
Komposition
– Verhalten werden mir Objekten verbunden
– Verhalten können nebeneinander existieren und
dynamisch verändert werden
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
73/93
Verhalten
n
Jedes Verhalten enthält:
– Code zur Ausführung in einer
processStimulus Methode
– „Wakeup“ Bedingungen, um zu steuern
wann der Code durchgeführt wird
– Bounding Information für die Ausführung
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
74/93
Verhalten - Bounds
n
Verhalten werden nur durchgeführt, wenn
sich Sichtradius vom Betrachter und
Bounding-Objekt des Verhaltens schneiden
n
Bounding-Objekt
– Kugel, Würfel, Polyeder, etc
– Default: Kein Bounding Objekt (deswegen auch
keine Durchführung des Verhaltens)
– Die Position des Verhaltens im Szenengraph
bestimmt den Ursprung des Bounding-Objekts
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
75/93
Verhalten - Wakeup
n
Ein Verhalten wird nur durchgeführt,
wenn die Wakeup-Kriterien erfüllt sind
–
–
–
–
n
Ein gewisse Zeit ist verstrichen
Ein Event wird generiert
Transformation wird durchgeführt
Kollision oder Nähe
Kriterien können durch logische
Operationen verbunden werden
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
76/93
Beispiel eines Behaviors
public class MorphingBehavior extends Behavior
{
WakeupOnElapsedFrames w =
new WakeupOnElapsedFrames(0);
public void initialize() {
alpha.setStartTime(
System.currentTimeMillis());
wakeupOn(w);
}
public void processStimulus(Enumeration
criteria) {}
public MorphingBehavior(Alpha a, Morph m) {}
}Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
77/93
Rotation Interpolator
Alpha spinAlpha =
new Alpha( -1,4000 );
RotationInterpolator spinner =
new RotationInterpolator(
spinAlpha, trans );
spinner.setSchedulingBounds(
new BoundingSphere(
new Point3d( ), 1000.0 ) );
trans.addChild( spinner );
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
78/93
Vorgefertigte Verhalten
n
Interpolatoren
–
–
–
–
Alpha
Rotation
Position
Pfad
Billboards
n Level of Detail Knoten
n Mousebehavior
n
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
79/93
MouseBehavior
TransformGroup objTrans =
new TransformGroup();
MouseRotate behavior = new MouseRotate();
behavior.setTransformGroup(objTrans);
objTrans.addChild(behavior);
behavior.setSchedulingBounds(bounds);
MouseZoom behavior2 = new MouseZoom();
MouseTranslate behavior3 =
new MouseTranslate();
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
80/93
Lichtquellen
n
Java3D bietet folgenden Typen
–
–
–
–
n
Ambientes Licht: AmbientLight
Gerichtetes Licht: DirectionalLight
Punktlichtquelle: PointLight
Spot
Attribute von allen Lichtquellen
– Status (aus/an)
– Farbe
– Bounding-Volumen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
81/93
Definition von Lichtquellen
n
Ambientes Licht:
AmbientLight( Color3f color )
n
Gerichtetes Licht:
DirectionalLight(boolean lightOn,
Color3f color, Vector3f direction)
n
Punktlichtquelle:
PointLight(Color3f color, Point3f
position, Point3f attenuation)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
82/93
Weitere Java3D Features
n
Eingabegeräte und Picking
n
Einsatz von unterschiedlicher Loader
n
Einsatz von 3D Sound
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
83/93
Eingabegeräte
n
Zugriff auf Echtzeit-Eingabegeräte
– Joystick, 6DOF Geräte, Knöpfe und Regler
n
Einfache Integration in bestehende
Applikationen
n
Eingabegeräte können virtuell sein
n
Alle Eingabegeräte sind Sensoren (für
physikalische oder virtuelle Größen)
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
84/93
Picking
n
Java3D bietet Möglichkeiten zur
Auswahl von Objekten des
Szenegraphen
n
Ein PickShape wird mit
BranchGroups geschnitten
n
BranchGroups enthalten Methoden
zur Auswertung des Picking
n
Verschiedene Kriterien bei der Auswahl
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
85/93
Picking
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
86/93
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
87/93
Hintergrund
n
Der Background Knoten bestimmt den
Hintergrund der Szene und besteht aus
–
–
–
–
Konstanter Farbe
Bild
Geometrie
Bounding-Informationen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
88/93
Beispiel eines Hintergrunds
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
89/93
Hintergrund
import com.sun.j3d.utils.image.TextureLoader;
BoundingSphere bounds =
new BoundingSphere(new
Point3d(0.0,0.0,0.0), 100.0);
// Set up the background
TextureLoader bgTexture = new
TextureLoader(bgImage, this);
Background bg = new
Background(bgTexture.getImage());
bg.setApplicationBounds(bounds);
objRoot.addChild(bg);
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
90/93
3D Sound und Geräusche
n
Java3D unterstützt Audio
(Capabilities beachten!)
BackgroundSound sound1 =
new BackgroundSound();
PointSound sound2 = new PointSound();
BoundingSphere soundBounds =
new BoundingSphere(
new Point3d(0.0,0.0,0.0), 100.0);
sound1.setSchedulingBounds(soundBounds);
objTrans.addChild(sound1);
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
91/93
Zusammenfassung
n
Grundlagen
n
Virtuelle Welt und Physikalische Welt
n
Modelle
n
Gruppierung und Transformation
n
Verhalten
n
Lichtquellen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
92/93
Ausblick
n
Neue Features von Java3D Version 1.2
–
–
–
–
Offscreen Rendering
Model clipping plane
OrientedShape3D-Node
Multiple Geometries in einem Shape3D
Node
– Multitexture und Textur Farbtabellen
– Neue Picking Mechanismen
Oktober 2001
Einführung in Java3D, Paul Grimm, grimm@agc.fhg.de
93/93