0

Hello!
I am new here,
I am posting as I can not find any help on sun.com java forums for my problem!

Here what I posted:
Hello all!
I am intending to do a simple thing: a quick bird like made with 3 boxes: 2 for the wings, one for the body. I want the "wings" to move up and down, but as if they were attached to the body.
I presume its a rotation behavior i have to use.
I did it but it rotate completely, I would only need them to rotate 1/4 of a turn, then restart rotating until 1/4 turn, etc...
I might be making it more difficult than it is, I cant manage to do it!

I tried first a simple translate thing but i can not "bend it"... It seems simplier as I only need the wing boxe to be at two position: up and down, but "constrained" to the body side!
So I chose a Rotate:

HERE IS my code:

//----------------------début de la création de la rotation--------------------------------
 
    TransformGroup WinRSpin=new TransformGroup();
  
    // permet de modifier l'objet pendant l'execution
    WinRSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
 
    // on crée un fonction de rotation au cours du temps
    Alpha rotationAlphaWinRSpin=new Alpha(-1,4000);
    
     Transform3D rot = new Transform3D();
     rot.rotX((float)Math.PI/- 2.0f);
    // on crée un comportement qui va appliquer la rotation à l'objet voulu
    RotationInterpolator rotatorWinRSpin=new RotationInterpolator(rotationAlphaWinRSpin,WinRSpin, rot, 0.50f,(float)(2.0*Math.PI));
 
    // on définit la zone sur laquelle va s'appliquer la rotation
    BoundingSphere boundsWinRSpin=new BoundingSphere();
    rotatorWinRSpin.setSchedulingBounds(boundsWinRSpin);
    WinRSpin.addChild(rotatorWinRSpin);
 
//----------------------début de la création de la rotation--------------------------------

Thanks for any suggestions, comments, etc..

I found out that my "camera" has a special position and viewing angle which is:

transform.rotX(-Math.PI / 4.0)

Therefore if I have in the scene like a cube, and I want to rotate it on the X axis only, for 45degres, it will not be a normal rotation on the x axis.
I think they kind of combine together, but i'm not sure!

I still think I have a few complex things to do, but I cant get the logic... :(

I mean it seems to rotate "from a center point inside its own box". I want to rotate as if the "x line" would be the right side of the bird body, as a nornal wing would do!
And then only 2 positions needed, up and down, up and down, up and down....

Anyone can help?

here is my code so far:


Previous bit: This part is only to show I had a bounding sphere to the bird body, and later on I tried to attach it to the wings, so it rotate from it and not from the wing itself bounding sphere.

//beginning of Rotation for Bird
      TransformGroup Bird=new TransformGroup();
      
      //will allow to modify object while executing
      Bird.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
      
      //alpha rotation time related
      Alpha rotationAlphaBird=new Alpha(-1,400);
      Alpha transAlphaBird=new Alpha(-1,5990);
      
      //transform 3d trans for the interpolatipon
      Transform3D transBird=new Transform3D();
      
          //create transform 3d for the Bird
      transBird.set(new Vector3f(1.90f,-.45f,0.9f));
      
      //create the child tranform group for the Bird Box
      Bird.setTransform(transBird);
      
      //matrix for 2positions
      Point3f[] cheminBird=new Point3f[3];
      cheminBird[0]=new Point3f(1.95f,0.0f,-6.8f);
      cheminBird[1]=new Point3f(1.95f,0.90f,-0.8f);         
      cheminBird[2]=new Point3f(1.95f,0.0f,5.8f);
           
      //matrix of floats to make the dots match with timeline
      float[] timePositionBird={0.00f,0.50f,1.0f};
      PositionPathInterpolator interpolBird=new PositionPathInterpolator(transAlphaBird,Bird,transBird,timePosition,cheminBird);
      BoundingSphere bounds3Bird=new BoundingSphere();
      //BoundingSphere bounds3Bird= new BoundingSphere(new Point3d(0.0, 0.0, -50.0), 0.5);
      interpolBird.setSchedulingBounds(bounds3Bird);
      Bird.addChild(interpolBird);
      
      //behviour for our rotation
      RotationInterpolator rotatorBird= new RotationInterpolator(rotationAlphaBird,Bird);
      
       // area where rotation will be
      BoundingSphere boundsBird=new BoundingSphere();
      rotatorBird.setSchedulingBounds(boundsBird);
      Bird.addChild(rotatorBird);
      
        //end of rotation For Bird



//----------------------début de la création de la rotation--------------------------------
 
    TransformGroup WinRSpin=new TransformGroup();
  
    // permet de modifier l'objet pendant l'execution
    WinRSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
 
    // on crée un fonction de rotation au cours du temps
    Alpha rotationAlphaWinRSpin=new Alpha(-1,2000);
    
     Transform3D rot = new Transform3D();
    // rot.rotX((float)Math.PI/- 2.0f);
    //rot.rotX(-45);
    //rot.rotX((-Math.PI / 4.0)+30); 
    rot.rotZ((-Math.PI / 4.0));
    
    //rot.rotX(-Math.PI / 4.0);
     //rot.rotY(-Math.PI / 4.0);
    // rot.rotZ(-Math.PI / 4.0);
    // rot.rotY(00);
     //rot.rotZ(45);
    // on crée un comportement qui va appliquer la rotation à l'objet voulu
     // on définit la zone sur laquelle va s'appliquer la rotation
   
    
    RotationInterpolator rotatorWinRSpin=new RotationInterpolator(rotationAlphaWinRSpin,WinRSpin, rot, 0.50f,(float)(2.0*Math.PI));
 
    BoundingSphere boundsWinRSpin=new BoundingSphere(new Point3d((Math.PI / 4.0), 0.0, 0.0), 0.5);
   // boundsWinRSpin.setCenter(new Point3d((Math.PI / 4.0),0,0));
    boundsWinRSpin.setCenter(new Point3d(-10,0,0));
    //boundsWinRSpin.setCenter();
    //test put a t3d to a boundingsphere??
    //Transform3D T3Dbounding = new Transform3D();
   // T3Dbounding.set(new Vector3f(5.00f,0.0f,0.00f));
    //WinRSpin.setTransform(T3Dbounding);
    //end test put a t3d to a boundingsphere, not working
    
rotatorWinRSpin.setSchedulingBounds(boundsWinRSpin);
   // test BoundingSphere of BODY BIRD rotatorWinRSpin.setSchedulingBounds(boundsBird);
    WinRSpin.addChild(rotatorWinRSpin);
   
//----------------------End de la création de la rotation--------------------------------
2
Contributors
1
Reply
2
Views
9 Years
Discussion Span
Last Post by mastergreg
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.