Eine Seminararbeit von Gerd Mühlinghaus

Slides:



Advertisements
Ähnliche Präsentationen
Konzeptioneller Vergleich von VRML, Java3D und OpenGL hinsichtlich ihrer Eignung zur Erstellung von Animationen von Christian Stein.
Advertisements

DES-Simulator in JAVA, objektorientiert
Animation in Java 3D Ausarbeitung im Seminar Java 3D
Abstrakte Klassen Basisklassen sollten in der Regel sehr allgemein sein. Oft ist es nicht notwendig, dass Objekte dieser generellen Basisklassen angelegt.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Java3D Einfacher scene graph View branch graph BG Shape3D Knoten S
Application Programming Interface Graphische Datenverarbeitung
Linien, Flächen & geometrische Figuren von Mario Linge
Geometrie Programmierung beginnend bei 0 ist
Kapselung , toString , equals , Java API
Java Beans von Raoul Schneider.
Objektorientierte Programmierung Definition von Klassen
Gliederung Motivation / Grundlagen Sortierverfahren
Threads Richard Göbel.
Java: Objektorientierte Programmierung
FH-Hof Geometrie Richard Göbel. FH-Hof Aufbau des virtuellen Universums.
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
Java: Dynamische Datentypen
Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D
FH-Hof Automatisches Erzeugen von Geometrie Richard Göbel.
FH-Hof Animation - Teil 1 Richard Göbel. FH-Hof Themen Darstellung der Geometrie ändern (Transformation, Appearance, etc.) Geometrie ändern (Morphing)
Java: Grundlagen der Sprache
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe.
Abstrakte Klassen.
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
C++ Vererbung und Polymorphie
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben.
Einführung in die Programmierung Datensammlung
FH-Hof Konfiguration eines Universums Richard Göbel.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Java programmieren mit JavaKara
Verhalten von Objekten in der Szene
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Konstruktoren.
Hello World! Javakurs 2013 Arne Kappen
Grundkurs Informatik 11-13
 Präsentation transkript:

Eine Seminararbeit von Gerd Mühlinghaus Animationen in Java 3D Eine Seminararbeit von Gerd Mühlinghaus

Inhalt dieses Vortrags Grundlagen der Animation in Java 3D Animationsarten Alpha Objekt Interpolatoren Billboard Level of Detail Morph

Animation ≠ Interaktion Benutzereingaben verändern ein visuelles Objekt im virtuellen Raum. Animation Animation nennt man Veränderungen in der virtuellen Welt die ohne Benutzerinteraktion stattfinden. schauen wir uns dieses Beispiel einmal an

Animationsarten Zeitbasierte Animation Ein Alpha Objekt bestimmt den Zeitpunkt der Veränderung eines visuellen Objektes durch einen Interpolator. Blickwinkelbezogene Animation Im Gegensatz dazu steuern „Billboard“ und „Level of Detail“ eine Animation über den Blickwinkel des Betrachters.

Klassenhierarchie der Behavior Animationsklassen

Erstellen einer zeitbasierten Animation in Java 3D  Erstellen eines Zielobjektes mit seinen Eigenschaften.  Erstellen eines Alpha Objektes.  Erstellen eines Interpolator Objektes mit Verweis auf Alpha und Ziel Objekt.  Spezifizieren des Wirkungsbereichs (SchedulingBound) des Interpolator Objektes.  Einfügen des Interpolator Objekts in den Szenegraphen.

Erstellen eines Zielobjektes // Erstellen des Zielobjektes (hier beispielhaft ein TransformGroup Objekt) TransformGroup objSpin = new TransformGroup(); // mit seinen Eigenschaften (Capabilities). // ALLOW_TRANSFORM_WRITE bedeutet, dass die Parameter des // Zielobjekts verändert werden können. objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

Eigenschaften eines Alpha Objekts Startzeit ist immer die Systemstartzeit  alle Alpha Objekte haben die gleiche Startzeit  Interpolatoren beginnen alle synchron Beginn der Startzeit kann verzögert werden, durch  Aktivierungszeit (TriggerTime) Zeitpunkt nach der Startzeit, an dem die Operationen des Alpha Objektes beginnen sollen.  Phasenverzögerungszeit (PhaseDelayDuration) Zeitdauer nach der Aktivierungszeit bis der Zyklus der Wellenform beginnt.

Alpha Objekt Zeitgeber einer Animation 4 Phasen der Alpha Wellenform Startzeit des Programms(1) increasingAlphaDuration(4) Aktivierungszeit(2) alphaAtOneDuration(5) Phasenverzögerungszeit(3) decreasingAlphaDuration(6) alphaAtZeroDuration(7)

Erstellen eines Alpha Objekts Konstruktor: Alpha(int loopCount, long increasingAlphaDuration) Beispiel: Alpha alpha = new Alpha (-1, 60000); periodisches Wiederholen Periodendauer 1 Minute

Was machen denn diese Interpolatoren? Interpolatoren legen fest, welches Objekt auf welche Art animiert werden soll. Vordefinierte Behavier Klassen (es können auch eigene erstellt werden). Alpha Objekt bestimmt wann die Interpolatoren ihren Einsatz haben. Sie werden als Kind ihres Ziel Objektes im Szenengraph eingefügt. Achtung die Interpolatoren haben unterschiedliche Zielobjekte!

Erstellen eines Interpolators // Einfacher Konstruktor mit Alpha und Zielobjekt. Interpolator(Alpha alpha, target) // Interpolatoren können auch gleich mit ihren spezifischen Eigenschaften // erstellt werden. Hier am Beispiel eines RotationInterpolators. RotationInterpolator (Alpha alpha, TransformGroup target, Transform3D axisOfRotation, float minimumAngle, float maximumAngle) // Konkretes Beispiel: Erstellen eines Interpolator Objektes mit Verweis auf // Alpha und Ziel Objekt; // mit der Standardeinstellung: volle Drehung um die y-Achse. RotationInterpolator rotInt = new RotationInterpolator(alpha, objSpin);

Interpolatoren Interpolator ändert ColorInterpolator Farbe PositionInterpolator Position RotationInterpolator Rotation ScaleInterpolator Größe SwitchValueInterpolator Aussehen TransparencyInterpolator Transparenz

Spezifizieren des Wirkungsbereichs und Einfügen in den Szenengraphen // Aus Performancegründen muss ein Wirkungsbereich festgelegt werden. // Außerdem sind Interpolatoren nur in diesem aktiv. // Hier beispielhaft für den vorhin erstellten RotationInterpolator. rotInt.setSchedulingBounds(new BoundingSphere()); // Zuletzt wird der Interpolator in den Szenengraph eingefügt. objRoot.addChild(rotInt); drehen wir doch einfach mal unsere Uhr um die y-Achse

Beispiel eines RotationInterpolators public BranchGroup createSceneGraph() { // Erstellen der Wurzel des branch graph. BranchGroup objRoot = new BranchGroup();  // Erstellen des Zielobjektes (hier ein TransformGroup Objekt). TransformGroup objSpin = new TransformGroup(); // mit seinen Eigenschaften. ALLOW_TRANSFORM_WRITE bedeutet, // dass die Parameter des Zielobjekts verändert werden können. objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);  // Erstellen eines Alpha Objekts // das sich kontinuierlich, mit einer Periode von 1 Minute, dreht. Alpha alpha = new Alpha (-1, 60000);

Beispiel eines RotationInterpolators  // Erstellen eines Interpolator Objektes mit Verweis auf Alpha und // Ziel Objekt; mit der Standardeinstellung: volle Drehung um die // y-Achse. RotationInterpolator rotInt = new RotationInterpolator(alpha, objSpin);  // Festlegen des Wirkungsbereichs. rotInt.setSchedulingBounds(new BoundingSphere()); objRoot.addChild(objSpin); objSpin.addChild(new Clock());  // Einfügen des Interpolator Objekts in den Szenegraphen. objRoot.addChild(rotInt); objRoot.compile(); return objRoot; }

Blickwinkelbezogene Animation Billboard Klasse Dreht 2D Bilder so, dass diese immer dem Betrachter zugewandt sind. So können 2D Objekte ihre 3D Pentands ersetzen.  Ersparnis von Rechenzeit! Level of Detail Klasse Je weiter die Entfernung zu einem visuellen Objekt, je weniger Details beim Rendern.  Ersparnis von Rechenzeit OrientatedShape3D Klasse Soll in Zukunft die Billboard Klasse ersetzen. Ermöglicht mehr als einen Blickwinkel auf die Objekte. Stammt nicht von der Behavior sondern von der Shape3D Klasse ab.

Interpolation von Geometrie  Die Morph Klasse animiert komplette GeometryArray Objekte keine Behavior, sondern eine Node Klasse jede Geometrie kann in eine andere umgewandelt werden Objekte müssen der gleichen Klasse abstammen Objekte müssen die gleiche Anzahl an Polygonen besitzen natürlich können auch visuelle Objekte animiert werden Anwendung nicht sehr komplex, aber benötigt Behavior Objekt um Animation oder Interakion zu ermöglichen

Erstellen einer Morph Animation  Erstellen einer eigenen Behavior Klasse zum Ermöglichen der Animation.  Erstellen eines Arrays mit GeometryArray Objekten.  Erstellen eines Morph Objektes mit ALLOW_WEIGHTS_WRITE Eigenschaft.  Einfügen des Morph Objekts in den Szenegraphen.

Beispiel einer Morph Animation  Erstellen der MorphBehavior Klasse. public class MorphBehavior extends Behavior{ private Morph targetMorph; private Alpha Alpha; // Da in diesem Beispiel 4 Schlüsselbilder verwendet werden, muss das // GeometryArray auch 4 Einträge enthalten. private double[] weights = {0, 0, 0, 0}; private WakeupCondition trigger = new WakeupOnElapsedFrames(0); // Erstellen der MorphBehavior MorphBehavior(Morph targetMorph, Alpha Alpha){ this.targetMorph = targetMorph; this.alpha = Alpha; }

Beispiel einer Morph Animation public void initialize(){ // Festlegen der initial wakeup condition. this.wakeupOn(trigger); } public void processStimulus(Enumeration criteria){ // Initialisieren des Gewichte Arrays. weights[0] = 0; weights[1] = 0; weights[2] = 0; weights[3] = 0; // Ändern der Gewichte in Abhängigkeit von Alpha. float alphaValue = 4f * alpha.value(); int alphaIndex = (int) alphaValue; weights[alphaIndex] = (double) alphaValue - (double)alphaIndex; if(alphaIndex < 3) weights[alphaIndex + 1] = 1.0 - weights[alphaIndex]; else weights[0] = 1.0 - weights[alphaIndex];

Beispiel einer Morph Animation weights[0] = 1.0 - weights[alphaIndex]; targetMorph.setWeights(weights); this.wakeupOn(trigger); //Setzen der nächsten wakeup condition. } } // Ende der MorphBehavior Klasse.  Erstellen eines Arrays mit GeometryArray Objekten.  Erstellen eines Morph Objektes.  Einfügen des Morph Objekts in den Szenegraphen.

Beispiel einer Morph Animation public BranchGroup createSceneGraph() { // Erstellen der Wurzel des branch graph. BranchGroup objRoot = new BranchGroup(); Transform3D t3d = new Transform3D(); t3d.set(new Vector3f(0f, -0.5f, 0f)); TransformGroup translate = new TransformGroup(t3d);  // Erstellen eines Arrays mit GeometryArray Objekten. GeometryArray[] geomArray = new GeometryArray[4]; geomArray[0] = createGeomArray0(); geomArray[1] = createGeomArray1(); geomArray[2] = createGeomArray2(); geomArray[3] = createGeomArray3();  // Erstellen eines Morph Objektes mit ALLOW_WEIGHTS_WRITE. Morph morphObj = new Morph(geomArray); morphObj.setCapability(Morph.ALLOW_WEIGHTS_WRITE);

Beispiel einer Morph Animation // Erstellen eines Alpha Objekts. Alpha Alpha = new Alpha(-1, 2000); // continuous 2 sec. period alpha.setIncreasingAlphaRampDuration(100);  // Erstellen der Morph Behavior MorphBehavior morphBehav = new MorphBehavior(morphObj, Alpha); morphBehav.setSchedulingBounds(new BoundingSphere());  // Einfügen des Morph Objekts in den Szenegraphen. objRoot.addChild(translate); translate.addChild(morphObj); objRoot.addChild(morphBehav); return objRoot; } // Ende der CreateSceneGraph Methode der MorphApp.

Literatur Bouvier, D. J.: Getting Started with the Java 3D™ API - Chapter 5, Sun Tutorial Version 1.5 (Java 3D API v 1.1.2) Haller, M.: Java 3D Teil 6