# Animation an TransformGroup anpassen



## aze (18. Feb 2010)

Hi

Ich hab in meinen Programm eine TransformGroup(jaws) und ein Transformobject(TargetTransform).Beide sind global vorhanden.Durch folgende Methode füge ich eine Rotation ein


```
private void rotateJCanvas3D(int x,int y,int z)
    {
        xChangeTransform = x * rotXMul; // rotXMul   =  0.01
        YChangeTransform = y * rotYMul;// rotYMul   =  0.01
        ZChangeTransform = z * rotZMul;// rotZMul   = 0.01

        yTransform.rotY( xChangeTransform );
    	XTransform.rotX( YChangeTransform );
        zTransform.rotZ(ZChangeTransform);

    	targetTransform.mul(targetTransform, XTransform);
    	targetTransform.mul(targetTransform, yTransform);
        targetTransform.mul(targetTransform,zTransform);

        jaws.getRoot().setTransform(targetTransform);


    }
```

Das klappt soweit auch ganz gut.Allerdings habe ich von meine Vorgänger ein paar Animationen geerbt,die damit nicht harmonieren.Das heißt : Wenn eine Animation abläuft, in der die TransformGroup gedreht wird und dann die Rotation aufgerufen wird , bleibt diese im Zustand vor der Animation hängen.

Hier die beiden Animation:


```
private void createLineToothAnimation(Alpha a, BranchGroup bg) {
        for (int n=0;n<JawsConst.TEETH_COUNT;n++) {
            Quat4f[] qs=getToothRotations(n);
            Point3f[] ps=getToothPositions(n);
            RotPosPathInterpolatorAlpha rpp=new RotPosPathInterpolatorAlpha( a,
            getToothPosTransform(n), new Transform3D(), knotsDummy, qs, ps);
            rpp.setSchedulingBounds(new BoundingSphere(new Point3d(0,0,0),10000.0));
            animation.addChild(rpp);

        }
    }
```


```
private void createRecenterAnimations(Alpha a, BranchGroup bg, int nm) {
        Transform3D t3d=new Transform3D();
        root.getTransform(t3d);
        RotPosPathInterpolatorAlpha rppi=new RotPosPathInterpolatorAlpha(
        a, root, new Transform3D(), knotsDummy, getRootRotation(nm), 
        getRootPosition());
        rppi.setSchedulingBounds(new BoundingSphere(new Point3d(0,0,0),10000.0));
        bg.addChild(rppi);

    }
```


----------



## aze (18. Feb 2010)

Hat sich erledigt.

Ein einfaches jaws.getRoot().getTransform(targetTransform)  am Anfang der Rotationsroutine  hat gereicht


----------



## aze (18. Feb 2010)

Na okay,so ganz geht es dann doch nicht.Bei der Rotation funktioniert es ,aber nicht bei der Translation.


```
private void mouseZoomJCanvas3D(int zoomfactor )
    {
        jaws.getRoot().getTransform(targetTransform);

        targetTransform.get(transVector);

        transVector.z = zoomfactor;

        targetTransform.setTranslation(transVector);


        jaws.getRoot().setTransform(targetTransform);


    }

   private void mouseTranslateJCanvas3D(MouseEvent me)
    {
        jaws.getRoot().getTransform(targetTransform);

        targetTransform.get(transVector);

        int xchange = me.getX() - mousePressedX;
        int ychange = me.getY() - mousePressedY;

        xtrans+= xchange * transXMul;
        ytrans-= ychange * transYMul;
        
        transVector.x =  xtrans; 
    	transVector.y =  ytrans; 

        targetTransform.setTranslation(transVector);

        jaws.getRoot().setTransform(targetTransform);
    }
```


----------



## Marco13 (18. Feb 2010)

Die Beschreibungen sind schon immer sehr dünn. Schon versucht, die Translation auch als Matrix dazuzumultiplizieren?

```
//targetTransform.setTranslation(transVector);

Transform3D translation = ... Translation für transVector....
targetTransform.mul(translation);
jaws.getRoot().setTransform(targetTransform);
```


----------



## aze (19. Feb 2010)

Marco13 hat gesagt.:


> Die Beschreibungen sind schon immer sehr dünn. Schon versucht, die Translation auch als Matrix dazuzumultiplizieren?
> 
> ```
> //targetTransform.setTranslation(transVector);
> ...



Ja,aber dann sind die Transformationen(Verschiebung nach Lionks ,Verschiebung nach rechts) sehr träge.Also wenn ich von Linksverschiebung auf Rechtsverschiebung wechsle,dauert es erstmal ne Weile bis die Richtung wirklich verschoben wird.


----------



## Marco13 (19. Feb 2010)

Ja, deine Maussteuerung mit dem "xchange" usw. hab' ich jetzt nicht nachvollzogen... so wenig Info, kein KSKB... raten dauert so lange...


----------

