Java3D-Einführung
Einführung - Was ist Java3D?
- Java Package für interaktive 3D Grafik
- High-level 3D Grafik API
- Programmieren von interaktiven Anwendungen mit
dreidimensionalen Inhalten
- Nahtlose Integration in Java
- Applet-fähig
- Standalone-Anwendungen ebenso möglich
Computergrafik - SS 2004
Java3D-1
Java3D-Einführung
Was macht Java3D?
- Bilderzeugung:
– Szenenmanagement
– Hidden Surface Berechnung
- Benutzerinteraktion
- Plattformunabhängiges High-Level API
- Implementierung für verschiedene Low-Level APIs (Open GL,
DirectX)
Computergrafik - SS 2004
Java3D-2
Java3D-Einführung
Was macht Java3D?
- Bereitstellung einer Klassenbibliothek
– Beschreibung des attributierten Szenengraphen
– Animation
– Virtuelle Kamera
– Benutzerinteraktion
– ...
Computergrafik - SS 2004
Java3D-3
Java3D-Einführung
Starten einer Java3D Anwendung
- Standalone
– Starten wie jede andere Java Applikation
- Applet
– Java Plugin wird benötigt, dies installiert ggf. auch Java3D
– Applet in eine WWW-Seite einbinden
Computergrafik - SS 2004
Java3D-4
Java3D-Einführung
Nutzung von Java
- Nutzung des Java-Interpreters
java myprogram
- Nutzung des Java-Appletviewers
appletviewer myprog.html
- Nutzung eines beliebigen Internet-Browsers
Öffnen der Seite myprog.html im Browser
- Nutzung des Java-Compilers:
javac myprogram.java
Computergrafik - SS 2004
Java3D-5
Java3D-Einführung
Beispielanwendungen
- Java3D Demos von Sun
http://java.sun.com/products/java-media/3D/demos/
- xj3d Java3D VRML Loader
Installiert auf den HTW-Rechnern
- Beispiele:
HelloJava3D
YoyoApp
LoaderDemo
Computergrafik - SS 2004
Java3D-6
Java3D-Einführung
Java3D in Web und Literatur
- SUNs Java3D Homepage
http://java.sun.com/products/java-media/3D
– Download
– Java3D Tutorial
– Java3D API Spezifikation
- J3D.org
http://www.j3d.org
– FAQs
– Loader für unterschiedliche 3D-Formate
– Tutorial
Computergrafik - SS 2004
Java3D-7
Java3D-Einführung
Java3D VRML Viewer
- XJ3D
http://www.xj3d.org
– Installiert auf den HTW-Rechnern
– VRML Loader
- VRML Library for Java3D
http://www.j3d.org/utilities/loaders/vrml/web3d.html
– VRML Viewer
– VRML Loader
- Cortona VRML Viewer (installiert auf HTW-Rechnern)
– http://www.parallelgraphics.com/products/cortona
Computergrafik - SS 2004
Java3D-8
Java3D-Einführung
Erstellung von Java3D-Szenen
Der Szenengraph
- Hauptkonzept um 3D-Szenen darzustellen
- Enthält alle Informationen über die Szene
- Gerichteter azyklischer Graph
- Unterscheidet zwischen Knoten und Blättern
- „Capabilities“ der Szenegraph-Objekte legen fest, welche
Operationen auf ihnen erlaubt sind. Die Klasse
SceneGraphObject enthält eine Methode setCapability, mit denen
dies für die einzelnen Objekte festgelegt werden kann.
Computergrafik - SS 2004
Java3D-9
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
VirtualUniverse
- Top-Level-Knoten eines
Szenengraphen
- Bezugsraum für eine
gesamte 3D-Szene
- Enthält alle für die
Darstellung der Szene
notwendigen Objekte
- Eine Anwendung kann
mehrere Universen besitzen
Computergrafik - SS 2004
Java3D-10
Java3D-Einführung
Erstellung von Java3D-Szenen
Locale
VirtualUniverse
- Definiert eine high-resolution
Position innerhalb eines
VirtualUniverse
Locale
- Container für eine Menge von
Untergraphen and dieser
Position, die eine BranchGroup
als Wurzelknoten besitzen
- Objekte innerhalb einer Locale
sind in standard doubleprecision Koordinaten, relativ
zum Ursprung der Locale
beschrieben
Computergrafik - SS 2004
Java3D-11
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
BranchGroup
Locale
- Container für weitere
Untergraphen
- Einzige Knotenart, die an
Locales angehängt werden
kann
BG
BG
- Umhängen zur Laufzeit
möglich
Computergrafik - SS 2004
Java3D-12
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
TransformGroup
Locale
- Führt beliebige
Transformationen aus
- Enthält Transform3D Objekt
- Lokales Koordinatensystem
wird durch Multiplikation alles
Transformationsmatrizen
entlang des Szenengraphen
nach oben zum
VirtualUniverse berechnet
BG
BG
T
Computergrafik - SS 2004
Java3D-13
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
Blatt: Primitive
Locale
- Java3D Geometrie-Primitive
- Kugel
BG
BG
- Kegel
- Zylinder
T
- Quader
P
P
Computergrafik - SS 2004
Java3D-14
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
Blatt: Shape3D
- Enthält Spezifikation für
komplexe 3D Geometrie (z.B.
TriangleStrip)
- Definiert zusätzlich das
Erscheinungsbild der
Geometrie
Locale
BG
T
BG
P
S
Geometry
P
Appearance
Computergrafik - SS 2004
Java3D-15
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
ViewingPlatform
Locale
- Unterklasse von BranchGroup
- Definiert Sicht auf die Szene
mittels
- ViewPlatform und
BG
BG
BG
Viewers
T
- Viewern
- denen entsprechende
Transformationen
vorgeschaltet sein können
T
P
S
Geometry
VP
P
Appearance
Computergrafik - SS 2004
Java3D-16
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
SimpleUniverse
- Unterklasse von
VirtualUniverse mit minimalem
User-Environment und
Standard-Einstellungen Viewer
- Locale
Locale
BG
T
- ViewingPlatform
- Viewer
- ViewPlatform
VP
Computergrafik - SS 2004
Java3D-17
Java3D-Einführung
Erstes Beispielprogramm
import
import
import
import
com.sun.j3d.utils.universe.SimpleUniverse;
com.sun.j3d.utils.geometry.ColorCube;
com.sun.j3d.utils.geometry.Sphere;
javax.media.j3d.BranchGroup;
public class Hello3d {
public Hello3d()
{
SimpleUniverse universe = new SimpleUniverse();
BranchGroup group = new BranchGroup();
group.addChild(new ColorCube(0.3));
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(group);
}
public static void main( String[] args ) {
new Hello3d();
}
} // end of class Hello3d
Computergrafik - SS 2004
Java3D-18
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
Beispiel-Szenengraph
Locale
- Enthält SimpleUniverse
- Enthält BranchGroup mit
geometrischem Primitiv
BG
BG
Viewer
T
P
VP
Computergrafik - SS 2004
Java3D-19
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
Struktur des Szenengraphen im
Programm „LoaderDemo“
- SimpleUniverse mit
ViewingPlatform, ViewTransformation und
Viewer
Locale
BG
BG
Viewer
T
T
- BranchGroup als Root-Knoten
- Top-Level TransformGroup zur
Transformation der gesamten
Szene
BG
VP
- BranchGroup, die den vom Loader
gelieferten Unterbaum enthält
Scene
Computergrafik - SS 2004
Java3D-20
Java3D-Einführung
Interaktion mit der Szene
VirtualUniverse
Simple Interaktion: Abstrakte
Klasse MouseBehavior
Locale
- Spezielles Blatt
BG
- Wirkt auf eine TransformGroup
BG
- Unterklassen:
- MouseRotate
MB
T
- MouseTranslate
- MouseZoom
Subgraph
Computergrafik - SS 2004
Java3D-21
Java3D-Einführung
Beleuchtung
VirtualUniverse
Klasse Light
Locale
- Abstrakte Klasse
- Spezielles Blatt
BG
BG
- Influencing Bounds beschreiben
ausgeleuchtete Region
- Unterklassen:
L
- AmbientLight (Umgebungslicht)
- PointLight (Punktlichtquelle mit
entfernungsabhängiger
Abschwächung)
Subgraph
- DirectionalLight (gerichtetes Licht von
unendlich entfernter Lichtquelle)
Computergrafik - SS 2004
Java3D-22
Java3D-Einführung
Beispielprogramm mit Beleuchtung
import
import
import
import
com.sun.j3d.utils.geometry.*;
com.sun.j3d.utils.universe.*;
javax.media.j3d.*;
javax.vecmath.*;
public class Ball {
public Ball() {
SimpleUniverse universe = new SimpleUniverse(); // Create the universe
BranchGroup group = new BranchGroup(); // Create a structure to contain objects
Sphere sphere = new Sphere(0.5f); // Create a ball and add it to the group of objects
group.addChild(sphere);
// Create a red light that shines for 100m from the origin
Color3f light1Color = new Color3f(1.0f, 0.1f, 0.1f);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
group.addChild(light1);
universe.getViewingPlatform().setNominalViewingTransform(); // look towards the ball
universe.addBranchGraph(group); // add the group of objects to the Universe
}
public static void main(String[] args) { new Ball(); }
}
Computergrafik - SS 2004
Java3D-23
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
Struktur des Szenengraphen des
Programms „Ball“
- SimpleUniverse mit
ViewingPlatform mit ViewTransformation und
Viewer
Viewer
- Kugel als geometrisches Primitiv
Locale
BG
T
BG
L
P
- Gerichtete Lichtquelle
VP
Computergrafik - SS 2004
Java3D-24
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
Aufgabe:
Modifizieren Sie das Programm
„Ball.java“ so, dass Sie mittels
Maus-Interaktion den Ball über
eine Punkt-Lichtquelle von
Viewer
verschiedenen Seiten
beleuchten können.
Locale
BG
T
BG
MB
T
P
L
VP
Computergrafik - SS 2004
Java3D-25
Java3D-Einführung
Erstellung von Java3D-Szenen
VirtualUniverse
Aufgabe:
Modifizieren Sie das Programm
„Ball.java“ so, dass Sie mittels
Maus-Interaktion die Sicht auf
die Szene verändern
Viewer
können.
Locale
BG
T
Ersetzen Sie dazu in der Szene
die Kugel durch einen Kegel.
BG
MB
T
P
L
VP
Computergrafik - SS 2004
Java3D-26