Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Animationen in Java 3D Eine Seminararbeit von Gerd Mühlinghaus."—  Präsentation transkript:

1 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 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 4 Phasen der Alpha Wellenform Startzeit des Programms(1) increasingAlphaDuration(4) Aktivierungszeit(2) alphaAtOneDuration(5) Phasenverzögerungszeit(3) decreasingAlphaDuration(6) alphaAtZeroDuration(7) Alpha Objekt Zeitgeber einer Animation

10 Erstellen eines Alpha Objekts Konstruktor: Alpha(int loopCount, long increasingAlphaDuration) Beispiel: Alpha alpha = new Alpha (-1, 60000); periodisches WiederholenPeriodendauer 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 ColorInterpolatorFarbe PositionInterpolatorPosition RotationInterpolatorRotation ScaleInterpolatorGröße SwitchValueInterpolatorAussehen TransparencyInterpolatorTransparenz

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 "Animationen in Java 3D Eine Seminararbeit von Gerd Mühlinghaus."

Ähnliche Präsentationen


Google-Anzeigen