Einführung in Java3D

Werbung
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 Beispiele?
n
Welche Konzepte setzt Java3D um?
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
2/93
Überblick
Einführung in Java 3D
n Benutzung
n Dokumentation
n Aufbau
n
– Szenengraph
– Animationen
– Interaktion
n
Mai 2001
Ausblick
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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)
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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)
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
6/93
Was macht Java3D?
n
Bereitstellung einer Klassenbibliothek
– Beschreibung des attributierten
Szenengraphen
– Animation
– Virtuelle Kamera
– Benutzerinteraktion
– ...
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
7/93
Anwendungsbeispiele
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
8/93
Anwendungsbeispiele
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
9/93
Anwendungsbeispiele
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
10/93
Anwendungsbeispiele
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
12/93
Nutzung von Java
Nutzung des Java-Interpreters
java myprogram
n Nutzung des Java-Appletviewers
appletviewer myprog.html
n Nutzung des Java-Compilers:
javac myprogram.java
n Java Installation auf SUN am AGC
/usr/java1.2/bin/
n
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
13/93
Beispielanwendungen
n
Mitgelieferte Demo sind im Verzeichnis
… / jdk1.2/demos/java3d
n
Beispiele:
AppearanceTest
FourByFour
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
15/93
Java3D in Web und Literatur
n
J3D.org
http://www.j3d.org
– FAQs
– Loader für unterschiedliche 3D-Formate
– Tutorial
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
16/93
Java3D VRML Viewer
n
VRML Library for Java3D
http://www.j3d.org/utilities/loaders/vrml/web3d.html
– VRML Viewer
– VRML Loader
n
Enstanden durch X3D Workinggroup
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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/
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
18/93
Fragen und Anmerkungen
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
19/93
Grundlagen
Mai 2001
n
Graphiksysteme
n
Koordinatensystem
n
Szenengraph
Einführung in Java3D, Paul Grimm, [email protected]
20/93
Graphiksysteme
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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)
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
24/93
Der Szenengraph
Struktur der Szenenhierarchie
n Kanten: Abhängigkeitsrelation
n Knoten ( engl. Nodes ):
n
–
–
–
–
Mai 2001
Geometrien
Transformationen
Materialeigenschaften
...
Einführung in Java3D, Paul Grimm, [email protected]
25/93
Szenengraphen in Java3D (1)
n
Java3D wertet Szenengraph
Beschreibung in separaten,
asynchronen Threads aus
–
–
–
–
–
Mai 2001
Rendering von Graphik
„Rendering“ von Sound
Animation
Management der Eingabegeräte
Event Erzeugung (z.B. bei Kollisionen)
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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 );
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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);
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
30/93
Simple Universe
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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( );
}
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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.*;
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
38/93
Rückblick
n
Darstellung von Graphik Primitiven
– Beispiel 1: Box
– Beispiel 2: Cone
n
Einbettung in eine Java-Applikation
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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.)
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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)
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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);
}
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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,
...
}
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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,
...
}
Mai 2001
0.0f,
Einführung in Java3D, Paul Grimm, [email protected]
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);
}
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
49/93
Beispiel für verschiedene
Appearance
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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.
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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.
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
55/93
Texturen
n
Java 3D hat zwei Typen von Texturen
– Texture2D für Bilder
– Texture3D für Volumentexturen
n
Beide Typen beinhalten
–
–
–
–
Mai 2001
Texturdaten
Filtermodi
Wrappingmodi
Berandungsfarbe
Einführung in Java3D, Paul Grimm, [email protected]
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);
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
57/93
Weiteres Vorgehen
n
Bis jetzt: Aufbau einzelner 3D Objekte
n
Ab jetzt:Integration mehrerer 3D
Objekte
–
–
–
–
Mai 2001
Gruppierung von Objekten
Transformation von Objekten
Bewegung von Objekten
Lichtquellen
Einführung in Java3D, Paul Grimm, [email protected]
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()
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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 );
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
66/93
Switch
n
Ein Switch Objekt erlaubt die
Auswahl der zu bearbeitenden Kinder
n
Es wird keine Reihenfolge vorgegeben
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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));
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
71/93
Beispiel eines Szenengraph
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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) {}
}Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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 );
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
78/93
Vorgefertigte Verhalten
n
Interpolatoren
–
–
–
–
Alpha
Rotation
Position
Pfad
Billboards
n Level of Detail Knoten
n Mousebehavior
n
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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();
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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)
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
82/93
Weitere Java3D Features
n
Eingabegeräte und Picking
n
Einsatz von unterschiedlicher Loader
n
Einsatz von 3D Sound
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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)
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
85/93
Picking
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
86/93
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
87/93
Hintergrund
n
Der Background Knoten bestimmt den
Hintergrund der Szene und besteht aus
–
–
–
–
Mai 2001
Konstanter Farbe
Bild
Geometrie
Bounding-Informationen
Einführung in Java3D, Paul Grimm, [email protected]
88/93
Beispiel eines Hintergrunds
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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);
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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);
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
91/93
Zusammenfassung
n
Grundlagen
n
Virtuelle Welt und Physikalische Welt
n
Modelle
n
Gruppierung und Transformation
n
Verhalten
n
Lichtquellen
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
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
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
93/93
Fragen und Anmerkungen
Mai 2001
Einführung in Java3D, Paul Grimm, [email protected]
94/93
Herunterladen