animationen in java 3d eine seminararbeit von gerd mühlinghaus

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

Upload: reinhilde-eble

Post on 05-Apr-2015

115 views

Category:

Documents


1 download

TRANSCRIPT

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

Animationen in Java 3D

Eine Seminararbeit von

Gerd Mühlinghaus

Page 2: 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

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

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

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

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.

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

Klassenhierarchie der Behavior Animationsklassen

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

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.

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

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

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

Eigenschaften einesAlpha 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.

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

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

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

Erstellen einesAlpha Objekts

Konstruktor:

Alpha(int loopCount, long increasingAlphaDuration)

Beispiel:Alpha alpha = new Alpha (-1, 60000);

periodisches Wiederholen Periodendauer 1 Minute

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

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!

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

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

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

Interpolatoren

Interpolator ändert

ColorInterpolator Farbe

PositionInterpolator Position

RotationInterpolator Rotation

ScaleInterpolator Größe

SwitchValueInterpolator Aussehen

TransparencyInterpolator Transparenz

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

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

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

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

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

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

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

Blickwinkelbezogene Animation

Billboard KlasseDreht 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 KlasseJe weiter die Entfernung zu einem visuellen Objekt, je weniger Details beim Rendern. Ersparnis von Rechenzeit

OrientatedShape3D KlasseSoll 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.

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

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

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

Erstellen einerMorph 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.

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

Beispiel einerMorph 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; }

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

Beispiel einerMorph 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];

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

Beispiel einerMorph 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.

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

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

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

Beispiel einerMorph 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.

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

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