Foros del Web » Programación para mayores de 30 ;) » Java »

Traslaciones y rotaciones en java3d

Estas en el tema de Traslaciones y rotaciones en java3d en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 15/04/2008, 07:04
 
Fecha de Ingreso: marzo-2008
Mensajes: 5
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo Traslaciones y rotaciones en java3d

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!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:33.