Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Eine Seminararbeit von Gerd Mühlinghaus

Ähnliche Präsentationen


Präsentation zum Thema: "Eine Seminararbeit von Gerd Mühlinghaus"—  Präsentation transkript:

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

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

3 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

4 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.

5 Klassenhierarchie der Behavior Animationsklassen

6 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.

7 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);

8 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.

9 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)

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

11 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!

12 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);

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

14 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

15 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);

16 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; }

17 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.

18 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

19 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.

20 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; }

21 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] = weights[alphaIndex]; else weights[0] = weights[alphaIndex];

22 Beispiel einer Morph Animation
weights[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.

23 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);

24 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.

25 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


Herunterladen ppt "Eine Seminararbeit von Gerd Mühlinghaus"

Ähnliche Präsentationen


Google-Anzeigen