Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > Java (básico) > Traslaciones y rotaciones en Java3d
-Foros de debate

Java (básico)
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Traslaciones y rotaciones en Java3d
Enviado por elberral el día 15 de abril de 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.

 

Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network