# RotationInterpolator um die eigene X-Achse



## Netscanner Waldi (29. Okt 2007)

Hallo,  
ich habe ein VRML-Flugobjekt in Java3D geladen und möchte nun die Rotoren (es sind 4) rotieren lassen. (Rotoren zur besseren Unterscheidung nun Propeller genannt ) 

Bild Quadrocopter

Dafür habe ich mit dem Rotationsinterpolator experimentiert, bin aber nicht zu einem richtigen Ergebniss gekommen. 
Problem: Die Propeller rotieren um das Flugobjekt-Zentrum, nicht aber um ihre einige Achse. Wie kann ich das Rotationszentrum der Transformgroup auf die Propeller-Achse setzen?

Hier mein Code für den ersten Propeller:

```
TransformGroup rotorA = (TransformGroup) t_root.getChild(5);
        rotorA.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        rotorA.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                
        Transform3D rotAxis = new Transform3D(); 

        Alpha rotationAlpha = new Alpha( -1, 3000 );
        RotationInterpolator rotator= new RotationInterpolator(rotationAlpha, rotorA);
        rotator.setTransformAxis(rotAxis);
        
        rotator.setSchedulingBounds(globalBounds); 
        t_root.addChild(rotator);
```

Wenn es nur ein Propeller wäre, so würde ich den globalen Koordinatenursprung auf die Propeller-Achse verschieben, aber was mache ich bei 4 Propellern? Ich bräuchte nur einen kleinen Anstoss :roll:


----------



## Marco13 (30. Okt 2007)

Vielleicht hilft schon dieses Bild
http://glprogramming.com/red/chapter03.html#name2

Ansonsten: Wenn man Eine Rotationsmatrix R, eine Translationsmatrix T und einen Vertex v hat, dann bewirkt
R * T * v
dass der Vertex ERST verschoben und (der verschobene Vertex) DANN rotiert wird. Mit
T * R * v 
wird erst der Vertex um den Ursprung rotiert, und dann (der rotierte Vertex) verschoben.


----------



## Netscanner Waldi (30. Okt 2007)

Danke dir, das Bild hat zu mehr Verständnis verholfen. 
Ich habe einfach die jeweilige Rotationsachse eines jedes Propellers angepasst:

Rotationsachse gedreht: t3d_rotAxis.rotX(Math.toRadians(270));
Rotationsachsenmittelpunkt auf die Propellerachse verschoben:  t3d_rotAxis.setTranslation(new Vector3d(-16.25,-10.25,0));

Folglich hat jede TransformGroup ein eigenes Zentrum, ich dachte immer, die beziehen sich alle auf das selbe, globale Zentrum. Wieder was gelernt


----------

