Animation an TransformGroup anpassen

aze

Bekanntes Mitglied
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

Java:
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:

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

        }
    }

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

    }
 
Hat sich erledigt.

Ein einfaches jaws.getRoot().getTransform(targetTransform) am Anfang der Rotationsroutine hat gereicht
 
Na okay,so ganz geht es dann doch nicht.Bei der Rotation funktioniert es ,aber nicht bei der Translation.

Java:
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);
    }
 
Die Beschreibungen sind schon immer sehr dünn. Schon versucht, die Translation auch als Matrix dazuzumultiplizieren?
Java:
//targetTransform.setTranslation(transVector);

Transform3D translation = ... Translation für transVector....
targetTransform.mul(translation);
jaws.getRoot().setTransform(targetTransform);
 
Die Beschreibungen sind schon immer sehr dünn. Schon versucht, die Translation auch als Matrix dazuzumultiplizieren?
Java:
//targetTransform.setTranslation(transVector);

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

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.
 
Ja, deine Maussteuerung mit dem "xchange" usw. hab' ich jetzt nicht nachvollzogen... so wenig Info, kein KSKB... raten dauert so lange...
 

Zurück
Oben