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

Post on 05-Apr-2015

115 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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

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

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.

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

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.

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

top related