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, [email protected] 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, [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 Oktober 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) Oktober 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) Oktober 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 – ... Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 7/93 Anwendungsbeispiele Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 8/93 Anwendungsbeispiele Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 9/93 Anwendungsbeispiele Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 10/93 Anwendungsbeispiele Oktober 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 Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 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, [email protected] 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, [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 Oktober 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 Oktober 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 Entstanden durch X3D Workinggroup Oktober 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/ Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 18/93 Fragen und Anmerkungen Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 19/93 Grundlagen Oktober 2001 n Graphiksysteme n Koordinatensystem n Szenengraph Einführung in Java3D, Paul Grimm, [email protected] 20/93 Graphiksysteme Oktober 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 Oktober 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) Oktober 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 Oktober 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 – – – – Oktober 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 – – – – – 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, [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 Oktober 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 Oktober 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 ); Oktober 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); Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 30/93 Simple Universe Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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( ); } Oktober 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.*; Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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.) Oktober 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) Oktober 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); } Oktober 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, ... } Oktober 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, ... } Oktober 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); } Oktober 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 Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 49/93 Beispiel für verschiedene Appearance Oktober 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. Oktober 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. Oktober 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 Oktober 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 Oktober 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 Oktober 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 – – – – Texturdaten Filtermodi Wrappingmodi Berandungsfarbe Oktober 2001 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); Oktober 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 – – – – Gruppierung von Objekten Transformation von Objekten Bewegung von Objekten Lichtquellen Oktober 2001 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() Oktober 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 Oktober 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 Oktober 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 ); Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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)); Oktober 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 Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 71/93 Beispiel eines Szenengraph Oktober 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 Oktober 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 Oktober 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 Oktober 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 Oktober 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) {} }Oktober 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 ); Oktober 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 Oktober 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(); Oktober 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 Oktober 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) Oktober 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 Oktober 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) Oktober 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 Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 85/93 Picking Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 86/93 Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 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, [email protected] 88/93 Beispiel eines Hintergrunds Oktober 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); Oktober 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); Oktober 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 Oktober 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 Oktober 2001 Einführung in Java3D, Paul Grimm, [email protected] 93/93