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? April 2002 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 April 2002 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 April 2002 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) April 2002 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) April 2002 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 – ... April 2002 Einführung in Java3D, Paul Grimm, [email protected] 7/93 Anwendungsbeispiele April 2002 Einführung in Java3D, Paul Grimm, [email protected] 8/93 Anwendungsbeispiele April 2002 Einführung in Java3D, Paul Grimm, [email protected] 9/93 Anwendungsbeispiele April 2002 Einführung in Java3D, Paul Grimm, [email protected] 10/93 Anwendungsbeispiele April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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/ April 2002 Einführung in Java3D, Paul Grimm, [email protected] 18/93 Fragen und Anmerkungen April 2002 Einführung in Java3D, Paul Grimm, [email protected] 19/93 Grundlagen April 2002 n Graphiksysteme n Koordinatensystem n Szenengraph Einführung in Java3D, Paul Grimm, [email protected] 20/93 Graphiksysteme April 2002 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 April 2002 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) April 2002 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 April 2002 Einführung in Java3D, Paul Grimm, [email protected] 24/93 Der Szenengraph Struktur der Szenenhierarchie n Kanten: Abhängigkeitsrelation n Knoten ( engl. Nodes ): n – Geometrien – Transformationen – Materialeigenschaften – ... April 2002 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) April 2002 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 April 2002 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 April 2002 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 ); April 2002 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); April 2002 Einführung in Java3D, Paul Grimm, [email protected] 30/93 Simple Universe April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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( ); } April 2002 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.*; April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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.) April 2002 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) April 2002 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); } April 2002 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, ... } April 2002 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, ... } April 2002 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); } April 2002 Einführung in Java3D, Paul Grimm, [email protected] 48/93 Appearance n Kontrolle über den Rendering-Prozeß – Farbe – Transparenz – Beleuchtungsmodell – Linieneigenschaften – Und viele andere! n Alle Eigenschaften sind in der Appearance-Klasse und ihren Komponenten enthalten April 2002 Einführung in Java3D, Paul Grimm, [email protected] 49/93 Beispiel für verschiedene Appearance April 2002 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. April 2002 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. April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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); April 2002 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 April 2002 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() April 2002 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 April 2002 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 April 2002 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 ); April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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 April 2002 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)); April 2002 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 April 2002 Einführung in Java3D, Paul Grimm, [email protected] 71/93 Beispiel eines Szenengraph April 2002 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 April 2002 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 April 2002 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 April 2002 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 – Ein gewisse Zeit ist verstrichen – Ein Event wird generiert – Transformation wird durchgeführt – Kollision oder Nähe n Kriterien können durch logische Operationen verbunden werden April 2002 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) {} }April 2002 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 ); April 2002 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 April 2002 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(); April 2002 Einführung in Java3D, Paul Grimm, [email protected] 80/93 Lichtquellen n Java3D bietet folgenden Typen – Ambientes Licht: AmbientLight – Gerichtetes Licht: DirectionalLight – Punktlichtquelle: PointLight – Spot n Attribute von allen Lichtquellen – Status (aus/an) – Farbe – Bounding-Volumen April 2002 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) April 2002 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 April 2002 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) April 2002 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 April 2002 Einführung in Java3D, Paul Grimm, [email protected] 85/93 Picking April 2002 Einführung in Java3D, Paul Grimm, [email protected] 86/93 April 2002 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 April 2002 Einführung in Java3D, Paul Grimm, [email protected] 88/93 Beispiel eines Hintergrunds April 2002 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); April 2002 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); April 2002 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 April 2002 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 April 2002 Einführung in Java3D, Paul Grimm, [email protected] 93/93