# Geschwindigkeit einer Animation aendern



## ThorinVII (14. Jan 2008)

Hallo,

Ich habe folgendes Problem: Ich möchte ein Objekt rotieren lassen, was an sich erstmal kein Problem ist. DIeses Objekt soll, aber sich genau zwei Runden drehen und ständig beschleunigen. Das bekomme ich irgendwie nicht hin.


```
objekt.setLoopCount(2);

objekt.setIncreasingAlphaDuration(10000);
objekt.setAlphaAtOneDuration(10000);
objekt.setIncreasingAlphaRampDuration(5000);
```

Was ich nicht verstehe ist wie sich diese Werte zusammensetzen. Bei meinen Angaben dauert eine Rotation 10 Sekunden, warum? Ich hätte gedacht sie würde 20 Sekunden dauern, IncreasingDuration + AlphaAtOneDuration. Bei mir kommt das Objekt auch nach einer UMdrehung zum Stillstand, das möchte ich aber nicht, es soll erst nach der zweiten Umdrehung zum Stillstand kommen. Wie mache ich das?

Habe mir auch das Java Tutorial angeschaut, das konnte mir aber auch nicht bei meinem Problem helfen.

mfg
  Thorin[/code]


----------



## Illuvatar (14. Jan 2008)

Ich vermute, du drehst mit einem RotationInterpolator?
Dann setzt du den maximumAngle von dem Interpolator auf 4 * Math.PI, und machst dein Alpha so:


```
objekt.setLoopCount(1);
objekt.setIncreasingAlphaDuration(20000);
objekt.setIncreasingAlphaRampDuration(20000);
```

Und dann schaust du mal hier nach, was die Methoden denn bedeuten


----------



## ThorinVII (14. Jan 2008)

Danke, habs mit deiner Hilfe nun hinbekommen. Ich werfe mal die nächste Frage hinterher, ich möchte ein SpotLight erstellen. Habe folgenden Code genommen:


```
SpotLight sl = new SpotLight();
sl.setInfluencingBounds(view);
sl.setPosition(new Point3f(5f, 1f, 0f));
sl.setSpreadAngle(0.1f);
sl.setConcentration(50.0f);
```

Nun möchte ich das SpotLight genau positioniere, habe aber nicht viele Objekte im Raum. Ist es möglich das SpotLight irgendwie sichtbar zu machen, damit ich es korrekt setzen kann? Sprich das es irgendwie als Kegel dargestellt wird oder so.


----------



## Guest (15. Jan 2008)

Hallo,

Ich nun noch ein weiteres Problem. Ich habe den Rotationinterpolator so wie ich das möchte. Das Objekt dreht zwei runden wie gewünscht. Nun möchte ich das das Objekt an der selben Stelle, hochgeht in der Bewegung, soll eine Art Berg darstellen. Ich dachte ich erstelle einfach einen PositionInterpolator und wende den auch auf das Objekt an, nur wirken beide Interpolatoren nicht gleichzeitig auf das Objekt. Im Sun Tutorial steht glaube ich, das man nicht zwei Interpolatoren auf das selbe Objekt gleichzeitig anwenden kann. Wie kann ich trotzdem diesen Berg simulieren? Bei mir passiert momentan einfach folgendes: Mein Objekt dreht wie gewünscht zwei Runden und danach geht es einfach hoch und runter. Sprich die Interpolatoren werden nacheinander ausgeführt.

Jemand vielleicht Ideen?


----------



## Gast (17. Jan 2008)

Du könntest dir einen eigenen Interpolator bauen der von TransformInterpolator abgeleitet wird. In dem findet dann Rotation und Translation statt.


----------



## Guest (17. Jan 2008)

Also irgendwie finde ich nicht den richtigen Einsatz. Ich wollte die neue Klasse ableiten vom RotationInterpolator. Wie soll man vorgehen?



```
import javax.media.j3d.*;


public class RotPosInterpolator extends RotationInterpolator {

        public RotPosInterpolator(Alpha alpha, TransformGroup target) {
               super(alpha, target);
        }
       
}
```


Wenn ich diese Klasse normal aufrufe dreht sich natürlich das Objekt. Wie baue ich nun die Steigung ein? Muss ich ein PositionInterpolator erzeugen?


```
PositionInterpolator positionInterpolator = new PositionInterpolator (alpha, target);
```


Wie baut man diesen dann ein?


Ich habe in meiner Hauptklasse, eine volle Rotation mit "setMaximumAngle" auf "4*PI" gesetzt, damit mein Objekt flüßig die zwei Runden dreht und nicht dazwischen stehen bleibt. Wie wird sich das auf den PositionInterpolator auswirken oder kann ich den Wert dann für diesen wieder neu setzen?


----------



## ThorinVII (18. Jan 2008)

So habe eine simplere Lösung parat, falls jemand interessiert ist:

Man benutzt zwei Interpolatoren den PositionInterpolator und den RotationInterpolator. Wie schon gesagt kann man diese nicht auf die selbe TransformGroup anwenden, aber man kann sie auf zwei verschiedene TransformGroups anwenden, die in der Hierarchie untereinander stehen. Dann wird das Objekt rotiert und man kann die Bewegung noch reinnehmen.


----------

