Traslaciones y rotaciones en Java3d

elberral
15 de Abril del 2008
Hi!



Estoy haciendo el proyecto de fin de carrera, utilizando para el diseño Java3D.

Consiste en simular el movimiento de peces según diferentes comportamientos.



Tengo un problema a la hora de hacer diversas rotaciones y traslaciones seguidas, sobre un transformGroup modificado.

Aquí esta el codigo de un programa de prueba:



SimpleUniverse universo = new SimpleUniverse(canvas3d);

Pez pez = new Pez();

pez.imagPez = pez.creaPez();

universo.getViewingPlatform().setNominalViewingTransform();

pez.TrasladaPez(new Vector3f(0.3f,0.5f,0.0f),(float)(Math.PI));

universo.addBranchGraph(pez.imagPez);

pez.TrasladaPez(new Vector3f(-0.5f,-0.5f,0.0f),(float)( Math.PI/2));

universo.addBranchGraph(pez.imagPez);





//Aquí la llamada a TrasladaPez



public void TrasladaPez(Vector3f vec, float angle){



Transform3D rotar = new Transform3D();

rotar.rotZ(angle);

rotar.setTranslation(vec);

System.out.println(rotar);

TransformGroup rotarGrupo = new TransformGroup(rotar);

rotarGrupo.getTransform(rotar);

rotarGrupo.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

rotarGrupo.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);



this.imagPez.detach();

Node nodo =this.imagPez.getChild(1);

this.imagPez.removeChild(1);

rotarGrupo.addChild(nodo);

this.imagPez.addChild(rotarGrupo);



}



básicamente lo que hago en este programa de prueba es hacer una llamada a la funcion TrasladaPez(), con parámetros el vector sobre el que se va a hacer la traslación y el angulo sobre el que se quiere rotar este.

Pues bien, la primera llamada la hace bien,

pez.TrasladaPez(new Vector3f(0.3f,0.5f,0.0f),(float)(Math.PI));



Pero en la segunda llamada el pez hace un movimiento indeseado:

pez.TrasladaPez(new Vector3f(-0.5f,-0.5f,0.0f),(float)( Math.PI/2));



Es como si se rotara toda la pantalla en vez de solo el pez, el problema ha de estar al aplicar la rotacion, ya que al pasar como parámetro este codigo:

pez.TrasladaPez(new Vector3f(-0.5f,-0.5f,0.0f),(float)(0.0));



El pez se mueve bien.

Si alguien se presta a ayudarme tengo pantallazos para que se entienda enseguida el problema.

Gracias de antemano.