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().setNominalViewingTra  nsform();
   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_TRAN  SFORM_WRITE);
	rotarGrupo.setCapability(TransformGroup.ALLOW_TRAN  SFORM_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.
 
Para que se entienda algo mejor adjunto algunas pantallas con los parámetros correspondientes:
 
 
(Sin llamadas a TrasladaPez())
Coord.(0.0,0.0,0.0);
 
 
(Con una sola llamada a TrasladaPez())
pez.TrasladaPez(new Vector3f(0.3f,0.5f,0.0f),(float)(Math.PI));
Coord.(0.3,0.5,0.0);
 
 
 
(2 transformaciones seguidas, sin modificar el angulo en la 2ª)
pez.TrasladaPez(new Vector3f(0.3f,0.5f,0.0f),(float)(Math.PI));
pez.TrasladaPez(new Vector3f(-0.3f,-0.8f,0.0f),(float)(0.0));
Coord.(0.0,-0.3,0.0);
 
 
 
 
(2 transformaciones seguidas, modificando el angulo en la 2ª)
pez.TrasladaPez(new Vector3f(0.3f,0.5f,0.0f),(float)(Math.PI));
pez.TrasladaPez(new Vector3f(-0.3f,-0.8f,0.0f),(float)( Math.PI/2));
Coord. aprox(-0.4,-0.4,0.0); dibujo 1-> MAL
Coord. Deberian ser: Coord.(0.0,-0.3,0.0); dibujo 2->BIEN
 
 
No me deja meter los pantallazos!!
Si alguien puede ayudarme le enviare las imagenes, con las que se entiende rapidamente el problema.
Gracias de antemano! 
   
 
 Traslaciones y rotaciones en java3d
 Traslaciones y rotaciones en java3d 
