3D Programmierung mit Java Danksagung / Quellenangabe

Werbung
3D Programmierung mit Java
Daniel F. Abawi
Professur für Graphische Datenverarbeitung
J. W. Goethe-Universität – Fachbereich 12
Danksagung / Quellenangabe
Die Basis für diesen Foliensatz wurde von Dr. Paul Grimm
(FH Erfurt) mit freundlicher Genehmigung bereitgestellt
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 2
1
Ziele dieser Einführung
• Wie kann ich Java3D benutzen?
• Wo kann ich Informationen finden?
• Wo finde ich Beispiele?
• Welche Konzepte setzt Java3D um?
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 3
Einführung - Was ist Java3D?
• Java Package für interaktive 3D Graphik
• Szenengraph-basierte high-level 3D Graphik API
• Programmieren von interaktiven Anwendungen mit 3D Inhalten
• Nahtlose Integration in Java
– Kein Browser nötig (Applikationen)
– Applet-fähig
– Kompatibilität mit Java Webstart (JWS)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 4
2
Was macht Java3D?
• Übernahme der Bilderzeugung:
– Szenenmanagement
– Verdeckungsrechnung
• Übernahme der Benutzerinteraktion
• Plattformunabhängiges API
• Implementierung für verschiedene Low-Level APIs (Open GL,
Direct3D)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 5
Was macht Java3D?
• Durchführung von Optimierungen
– Paralleles Rendern
– Nutzung von Hardwarebeschleunigung
– Reorganisation des Szenengraphen
(Æ Zusatzinformationen können angegeben werden, die
bei der Optimierung ausgewertet werden)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 6
3
Szenengraphen in Java3D
• 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)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 7
Anwendungsbeispiele
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 8
4
Starten einer Java3D Anwendung?
• Standalone
– Starten wie jede andere Java Applikation
• Applet
– Java Plugin und Java3D wird benötigt
– Applet in eine WWW-Seite einbinden
• Java Webstart (online und offline)
– Installation von Java3D wird nicht vorausgesetzt
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 9
Nutzung von Java (und Java3D)
• Nutzung des Java-Interpreters
java myprogram
• Nutzung des Java-Appletviewers
appletviewer myprogram.html
• Nutzung des Java-Compilers:
javac myprogram.java
• Die Benutzung einer Entwicklungsumgebung (z. B. Eclipse
3.1.2 – http://www.eclipse.org) wird empfohlen
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 10
5
Installation von Java3D
• Mittlerweile gibt es eine Installationsroutine
• Bei manueller (und bei der automatisierten) Installation ist
darauf zu achten, daß Java3D in das korrekte Verzeichnis
kopiert wird (beachte Windows JRE / evtl. installierte
JDKs)
• Bitte die Installationsanweisungen genau beachten!
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 11
Java3D in Web und Literatur
• Offizielle Java3D Homepage
https://java3d.dev.java.net/
– Download von Binaries und Beispielen
– Java3D Tutorial
– Java3D API Spezifikation
• Aktuell ist die Version 1.4.0_01 (hier zu verwenden)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 12
6
Java3D in Web und Literatur (Teil 2)
•
J3D.org (The Java3D Community Site)
http://www.j3d.org
– FAQs
– Loader für unterschiedliche 3D-Formate
– Tutorials
•
Weitere sehr gute Einstiegshilfen
– Michael Pfeiffer (ausführlicher)
http://www.3dchat.org/downctr.php?id=55
– Christopher Schnell und Sascha Strasser (sehr gutes Schnelltutorial)
http://java3d.j3d.org/downloads/Java3D_schnell_tutorial.pdf
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 13
Java3D im Einzelnen
• Aufbau einer einfachen Java3D-Anwendung mit einzelnen
Objekten
• Gruppierung und Transformation
• Aufbau einer komplexen Szene mit mehreren Objekten und
mit Animationen
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 14
7
Eine Applikation in Kürze
• Konstruktion einer virtuellen Welt, in der alle 3D Daten enthalten
sind (z. B. BranchGroups, TransformationGroups, Shape3D,
Geometry, Appearance, Light, Behavior etc.)
• Auswahl einer Kamera, um die 3D Daten zu betrachten
• Einfügen der 3D Inhalte in die Szene
– Hierarchische Anordnung der Objekte in einem
Szenengraphen
– Beschreibung der Interaktionen
• Einbetten in eine Java-Anwendung
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 15
Minimalbeispiel (Teil 1/2)
package startj3d;
import
import
import
import
import
import
import
java.applet.Applet;
java.awt.BorderLayout;
java.awt.GraphicsConfiguration;
com.sun.j3d.utils.applet.MainFrame;
com.sun.j3d.utils.geometry.ColorCube;
com.sun.j3d.utils.universe.*;
javax.media.j3d.*;
public class Minimalbeispiel extends Applet {
private SimpleUniverse u = null;
public BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
objRoot.addChild(new ColorCube(0.4));
return objRoot;
}
public Minimalbeispiel() {
}
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 16
8
Minimalbeispiel (Teil 2/2)
public void init() {
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
add("Center", c);
BranchGroup scene = createSceneGraph();
u = new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public void destroy() {
u.cleanup();
}
public static void main(String[] args) {
new MainFrame(new Minimalbeispiel(), 256, 256);
}
}
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 17
Aufbau eines Szenengraphen
• Erzeugen von Knoten
Primitive myShape1 = new Box();
Primitive myShape2 = new Cone();
• Gruppieren von Knoten
BranchGroup myGroup =
new BranchGroup( );
myGroup.addChild( myShape );
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 18
9
Utility Klassen
• Utility Klassen bauen auf Java3D auf
• Vereinfachen oft auftretender Operationen:
– Aufbau einer virtuellen Welt
– Setzen der Kamera
SimpleUniverse mySimple =
new SimpleUniverse( myCanvas );
mySimple.addBranchGraph(myBranch);
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 19
SimpleUniverse
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 20
10
Einbetten in eine Java Anwendung
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
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 21
Einbetten in eine Java Anwendung
public initializeUniverse() {
Frame frame = new Frame( );
frame.setSize( 640, 480 );
frame.setLayout( new BorderLayout( ) );
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
frame.add( "Center", canvas );
SimpleUniverse univ =
new SimpleUniverse( canvas );
BranchGroup scene = createSceneGraph();
univ.addBranchGraph( scene );
frame.show( );
}
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 22
11
Benötigte Java Packages (Beispiele)
• Java Packages
import java.awt.*;
• Java3D Packages
import javax.media.j3d.*;
import javax.vecmath.*;
• Java3D Utility Packages
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 23
Position
• Damit der Würfel sichtbar wird, muss er aus dem Ursprung
verschoben werden (falls nicht die die Methode
setNominalViewingTransform() angewendet wurde)
TransformGroup tg = new TransformGroup();
objRoot.addChild(tg);
Transform3D t3d = new Transform3D();
t3d.set(new Vector3d (2,2,-5));
tg.setTransform(t3d);
tg.addChild(new ColorCube(0.4));
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 24
12
Materialeigenschaften
• Zur Beschreibung der Materialeigenschaften muss das
Appearance-Objekt entsprechend konfiguriert werden:
Appearance app = new Appearance();
Material mm = new Material();
mm.setAmbientColor(1.0f, 0.0f, 0.0f );
mm.setLightingEnable(true);
app.setMaterial(mm);
myShape1.setAppearance(app);
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 25
Licht
• Aufnahme einer Lichtquelle
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
Color3f ambientColor = new Color3f(0.8f, 0.3f, 0.9f);
AmbientLight ambientLightNode =
new AmbientLight(ambientColor);
ambientLightNode.setInfluencingBounds(bounds);
myGroup.addChild(ambientLightNode);
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 26
13
Rückblick
• Darstellung von Graphik Primitiven
– Beispiel 1: Box
– Beispiel 2: Cone
• Einbettung in eine Java-Applikation
• Beschreibung der Materialeigenschaften
• Verschieben des Objekts
• Einfügen einer Lichtquelle
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 27
3D-Modelle
• Modelle sind Beschreibungen von Objekten
• Ein Shape3D-Knoten besteht aus
– Geometrie
– Appearance (Erscheinen)
Shape3D( Geometry geometry, Appearance appearance )
• Geometrie kann aus mehreren Teilen bestehen
• Appearance enthält verschiedene Attribute, die beschreiben wie
die Geometrie gezeichnet wird
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 28
14
Elemente einer Geometrie
• Koordinaten:
Position der Knoten im Raum
• Normalen (können auch automatisch berechnet werden):
Nach außen orientierte Normale pro Knoten
• Farben:
Farbe pro Knoten
• Textur-Koordinaten:
Texel Position im Knoten
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 29
GeometryArray
• GeometryArray erbt von Geometry
• Ein GeometryArray Objekt hat vier Basistypen
– Punkte
– Linien
– Dreiecke
– Vierecke
• GeometryArray bietet set und get Methoden
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 30
15
Modelle sind facettiert
• Ideale Dreiecke und Vierecke
• Einseitige Primitive
• Reihenfolge der Eckpunkte bestimmt die Flächennormale
• Gegen den Uhrzeigersinn Æ nach außen gerichtet
(Beachtung der rechten Hand)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 31
Beispiel eines Quadrats mit Punkten
Point3f a = new Point3f (-width/2,-width/2,height/2);
Point3f b = new Point3f (width/2,-width/2,height/2);
Point3f c = new Point3f (width/2,width/2,height/2);
Point3f d = new Point3f (-width/2,width/2,height/2);
Point3f[] shape = new Point3f[4];
int z = 0;
shape[z++] = a;
shape[z++] = b;
shape[z++] = c;
shape[z++] = d;
int[] stripCount = {4};
GeometryInfo gi = new GeometryInfo(GeometryInfo.POLYGON_ARRAY);
GeometryArray ga = gi.getGeometryArray();
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 32
16
Beispiel eines Quadrats mit einem
QuadArray und Texturkoordinaten
QuadArray rect = new QuadArray(4, GeometryArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);
Point3f p3f = new Point3f(width/2, -width/2, -height/2);
rect.setCoordinate(0, p3f);
p3f.set(-width/2, -width/2, -height/2);
rect.setCoordinate(1, p3f);
p3f.set(-width/2, width/2, -height/2);
rect.setCoordinate(2, p3f);
p3f.set(width/2, width/2, -height/2);
rect.setCoordinate(3, p3f);
TexCoord2f tc2f = new TexCoord2f(0, 0);
rect.setTextureCoordinate(0, 0, tc2f);
tc2f.set(1, 0);
rect.setTextureCoordinate(0, 1, tc2f);
tc2f.set(1, 1);
rect.setTextureCoordinate(0, 2, tc2f);
tc2f.set(0, 1);
rect.setTextureCoordinate(0, 3, tc2f);
Shape3D rectobj = new Shape3D(rect);
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 33
Appearance
• Kontrolle über den Rendering-Prozeß
– Farbe
– Transparenz
– Beleuchtungsmodell
– Linieneigenschaften
– Und viele andere!
• Alle Eigenschaften sind in der Appearance-Klasse und
ihren Komponenten enthalten
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 34
17
Beispiel für verschiedene
Appearance
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 35
Andere Eigenschaften
•
Das TransparencyAttributes
Objekt steuert die Tranzparenz (0.0-1.0)
• PointAttributes und LineAttributes
enthalten Punktgröße und Liniendicke
• PolygonAttributes regeln „culling“ und Fülleigenschaften
(Punkt, Linien, Fläche)
• RenderingAttributes steuern im Depth- und Alpha-Buffer
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 36
18
Texturen
• Java 3D hat zwei Typen von Texturen
– Texture2D für Bilder
– Texture3D für Volumentexturen
• Beide Typen beinhalten
– Texturdaten
– Filtermodi
– Wrappingmodi
– Berandungsfarbe
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 37
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);
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 38
19
Weiteres Vorgehen
• Bis jetzt:
Aufbau einzelner 3D Objekte
• Ab jetzt:
Integration mehrerer 3D Objekte
– Gruppierung von Objekten
– Transformation von Objekten
– Bewegung von Objekten
– Lichtquellen
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 39
Live Nodes
• BranchGraph, der einem Locale hinzugefügt wird ist live,
d.h. er kann dargestellt werden
BranchGroup myBranch = new BranchGroup( );
myBranch.addChild( myShape );
myLocale.addBranchGraph( myBranch );
• boolean isLive()
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 40
20
Compiled Nodes / Capabilities
• BranchGroup kann kompiliert (optimiert) werden
void compile();
• Beachte: compile bevor live
• Capabilities geben an, was in einem Szenengraph noch gelesen
und verändert werden darf, nachdem der Szenengraph compiled
oder live ist
• Capabilities wirken auf Optimierung
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 41
Capabilities (1)
• Methoden für SceneGraphObject
void setCapability( int bit )
void clearCapability( int bit )
boolean getCapability( int bit )
• Capabilities gibt es für jeden Knoten
• In jedem Knoten gibt es Capabilities für die Attribute
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 42
21
Capabilities (2)
• Beispiele von Shape3D:
– ALLOW_APPEARANCE_READ
– ALLOW_APPEARANCE_WRITE
– ALLOW_GEOMETRY_READ
– ALLOW_GEOMETRY_WRITE
myShape.setCapability(
Shape3D.ALLOW_APPEARANCE_WRITE );
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 43
Gruppen in Java 3D
•
Unterschiedliche Typen
– Group
– BranchGroup
– OrderedGroup / DecalGroup
– SharedGroup
– Switch
– TransformGroup
•
Alle Gruppen haben Kinder
– Modelle, Lichtquellen, Geräusche, Verhalten
•
Eigenschaften von Gruppen
– Hat genau einen Vater
– Beliebig viele Kinder
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 44
22
BranchGroup
• 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
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 45
TransformGroup
• Transformationen sind Translation, Rotation und Skalierung
• Transformationen akkumulieren sich bei der Traversierung
des Szenengraphen
• Die Transformationen tiefer im Graph werden zuerst
ausgeführt
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 46
23
Transformation
• Alle Modelle werden bezüglich der Weltkoordinaten plaziert
• Ein TransformGroup Objekt erlaubt die Verwendung
eines neuen Koordinatensystems relativ zum Vater
• Verändert man die TransformGroup, so bewegen sich
auch die Modelle in der Gruppe
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 47
Transform3D
• Ein Transform3D Objekt beschreibt die Transformation einer
TransformGroup
• Dargestellt als 4x4 Double Matrix
• Beispiel:
Transform3D t = new Transform3D();
t.set(scale, new Vector3d(xpos, ypos, 0.0));
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 48
24
Beispiel eines Szenengraph
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 49
Verhalten (Behavior-Klassen)
• Programmierbarkeit
– Verhalten sind Java-Methoden
• Effizienz
– Java3D führt Verhalten nur aus wenn nötig
• Komposition
– Verhalten werden mit Objekten verbunden
– Verhalten können nebeneinander existieren und dynamisch
verändert werden
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 50
25
Vorgefertigte Behavior
• Interpolatoren
– Alpha
– Rotation
– Position
– Pfad
• Billboards
• Level of Detail Knoten
• Mousebehavior
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 51
Verhalten (Behavior-Klassen)
• Jedes Verhalten enthält:
– Code zur Ausführung in einer processStimulus
Methode
– „wakeupOn“ Bedingungen, um zu steuern wann der
Code durchgeführt wird
– Bounding Information für die Ausführung (Bereich
spezifizieren)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 52
26
Verhalten - Bounds
• Verhalten werden nur durchgeführt, wenn sich Sichtradius vom
Betrachter und Bounding-Objekt des Verhaltens schneiden
• 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
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 53
Verhalten - Wakeup
• Ein Verhalten wird nur durchgeführt, wenn die WakeupKriterien erfüllt sind
– 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
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 54
27
Beispiel eines Behaviors
class WakeUpAfterMovement extends Behavior {
protected WakeupCondition m_WakeupCondition = null;
public WakeUpAfterMovement() { }
public void initialize() {
wakeupOn(new WakeupOnElapsedTime(1000));
}
public void processStimulus(java.util.Enumeration criteria) {
while (criteria.hasMoreElements())
{
WakeupCriterion wakeUp = (WakeupCriterion) criteria.nextElement();
if (wakeUp instanceof WakeupOnElapsedTime)
{
System.out.println(“1000 ms sind vorbei! ");
}
}
}
}
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 55
RotationInterpolator
Alpha spinAlpha = new Alpha( -1,4000 );
// unendlich oft, 4000 ms Dauer
RotationInterpolator spinner =
new RotationInterpolator(
spinAlpha, trans );
spinner.setSchedulingBounds(
new BoundingSphere(
new Point3d( ), 1000.0 ) );
trans.addChild( spinner );
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 56
28
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();
...
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 57
Lichtquellen
• Java3D bietet folgenden Typen
– Ambientes Licht:
AmbientLight
– Gerichtetes Licht:
DirectionalLight
– Punktlichtquelle:
PointLight
• Attribute von allen Lichtquellen
– Status (aus/an)
– Farbe
– Bounding-Volumen
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 58
29
Definition von Lichtquellen
•
Ambientes Licht:
AmbientLight( Color3f color )
•
Gerichtetes Licht:
DirectionalLight(boolean lightOn,
Color3f color, Vector3f direction)
•
Punktlichtquelle:
PointLight(Color3f color, Point3f
position, Point3f attenuation)
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 59
Picking
• Java3D bietet Möglichkeiten zur Auswahl von Objekten des
Szenegraphen
• Ein PickShape wird mit BranchGroups geschnitten
• BranchGroups enthalten Methoden zur Auswertung des
Picking
• Verschiedene Kriterien bei der Auswahl
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 60
30
Picking
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 61
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 62
31
Zusammenfassung
• Grundlagen
• Virtuelle Welt und Physikalische Welt
• Modelle
• Gruppierung und Transformation
• Verhalten
• Lichtquellen
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 63
Danke für die Aufmerksamkeit
Daniel F. Abawi – Einführung in Java3D – 20. Juni 2006
Folie 64
32
Herunterladen