3D Programmierung mit Java

Ähnliche Dokumente
Einführung in Java3D

Einführung - Was ist Java3D?

Einführung - Was ist Java3D?

Einführung in Java3D. Dipl.-Inform. Inform.. Paul Grimm Professur Graphische Datenverarbeitung

Der Szenegraph. Im Folgenden eine kurze Beschreibung der wichtigsten Knoten des Szenegraphen:

Einige weitere Fähigkeiten und Anwendungsbeispiele

Java3D - Teil 6. Michael Haller

Java 3D Einstiegs-Tutorial Teil 3

Einführung in Java3D

Java 3D Einstiegs-Tutorial Teil 1

Java 3D. Linien, Flächen und Objekte Axel Bartsch, Okt. 2002

9. Digitale Verarbeitung 3-dimensionaler Darstellungen

Aktuelle Binaries: Version 1.5.2; download: + Visual Toolkit (VTK -> KITWARE)

3D-Grafik und -Animation: Java3D

B6. 3D-Computergrafik mit Java

Erstellung geometrischer Figuren und Verwendung von Texturen in Java 3D

B6. 3D-Computergrafik mit Java

B6. 3D-Computergrafik mit Java

Java 3D Einstiegs-Tutorial Teil 2 Steuerung des Erscheinungsbildes (Appearance):

B6. 3D-Computergrafik mit Java

B6. 3D-Computergrafik mit Java

Michael Pfeiffer. Java 3D 1.3. für Einsteiger und Fortgeschrittene inclusive erster Ausblicke auf Java 3D Version 1.0

Szenengraphen. Codruţa Cosma. Universität Ulm Sommersemester 2005

Transformationen in Java 3D

Teil 3 - Java. Grundlagen Klassen, Attribute Methoden

Wiederholung JAVA. 1. (Vorbereitung)

Zellaufbau Java 3D Verteilungsalgorithmus

Grundlagen der Java 3D- Programmierung

Einstieg in die Informatik mit Java

3D-Formate im Web. Teil 1: VRML. Von Lars Hillebrandt,

Einstieg in die Informatik mit Java

Projektarbeit. Thema: Entwicklung einer Modellierungs-Software für. Rotationskörper. (Surface of Revolution) Verfasser: Marc Hugo

Die Klassenbibliothek Java 3D am Beispiel eines einfachen Planetensystems

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Einstieg in die Informatik mit Java

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Probeklausur: Programmierung WS04/05

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Swing. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Vor-Geschichte von VRML

Computergrafik Universität Osnabrück, Henning Wenke,

Kapitel 4: Klassen und Unterklassen

Programmieren 2 Java Überblick

Eclipse Tutorial.doc

Objektorientierte Programmierung Studiengang Medieninformatik

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

1. Laboraufgabe. Grafische Nutzerschnittstellen. Studiengang I / IEA / SAT

Instrumentierung und Dekodierung

Anweisungen zur Ablaufsteuerung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Java3D. Beleuchtung und Material

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Institut für Programmierung und Reaktive Systeme 6. Juli Programmieren II. Übungsklausur

Koordinatensystemorientierung. -Drehung. Mittelfinger als -Achse ergibt sich das entsprechende. -Achse, den Zeigefinger als -Achse und den

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog.

Einführung in die Programmierung 1

Einführung in die Systemprogrammierung

Inhalt. Installieren Projekt erstellen UI Bedienen Objekte importieren Blueprints C++

Einführung in die Programmierung I. 1.0 EBNF 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Konzepte objektorientierter Programmierung

Klausur Software-Entwicklung März 01

9. Ausnahmebehandlung

Szenengraph-Architekturen im Kontext von VR- und AR-Anwendungen

Programmieren 2 Java Überblick

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker,

Implementieren von Klassen

ProPra WS 2008/09: LEGO-Sculptor

JAVA - Methoden

Funktionale und Objekt-Orientierte Programmierkonzepte

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Kapitel 4: Schattenberechnung

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009

Java-Einführungskurs Informatik II (D-ITET) Vincent Becker,

XML-basierte 3D-Komponenten

9. Ausnahmebehandlung

Programmieren in Java

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Intensivübung zu Algorithmen und Datenstrukturen

Grafik - wozu? GUI Grafische Benutzungsschnittstellen. Gehört zum Standardumfang des JDK. 2 Varianten: AWT und Swing

Build Management Tool

Übungsblatt 2: Einstieg in JOGL

Universität Karlsruhe (TH)

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Die Elemente einer Szene werden in einer Graphstruktur gespeichert

Aufbau interaktiver 3D-Engines

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Tutoraufgabe 1 (Seiteneekte):

Polymorphie und UML Klassendiagramme

Transkript:

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 java.applet.applet; import java.awt.borderlayout; import java.awt.graphicsconfiguration; import com.sun.j3d.utils.applet.mainframe; import com.sun.j3d.utils.geometry.colorcube; import com.sun.j3d.utils.universe.*; import 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 Wakeup- Kriterien 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