Buenas, estoy haciendo un cuerpo humano.
Y la idea es que al mover el muslo de la pierna, el resto de la pierna no solamente le siga, sino que ademas tambien se transformen las rotaciones.
Para ello e incluido la pierna(TG) dentro del muslo(TG), asi los 2 se mueven a la vez.
Aqui me surgio un problema, porque al diseñar los shapes, los hice de tamaño desproporcionado por lo que por ejemplo el muslo tengo que escalarlo.
Logicamente al escalar el muslo, como la pierna esta dentro, tambien se escala.
Esto se soluciona facilmente volviendo a reescalar la pierna.
Pero el problema se agrava porque he hecho un sistema de articulaciones:
El sistema de articulaciones son puntos y esta diseñado de la siguiente manera;
La clase articulacion es un shape3d con 1 PointArray de 1 solo punto, facil.
Cada miembro tiene 2 articulaciones, cada una de ellas se conecta con las articulaciones de otros miembros, macho con hembra.
Resulta que al hacer la transformacion estos puntos se descolocan, y mucho.
Si escalo el muslo, y a su vez la pierna y sus articulaciones, los puntos se separan.
Los puntos de articulacion de la pierna shapes, tienen de padre a un TransformGroup, y tiene de hermanos a otros puntos y al shape modelo de la pierna.
El muslo(TG) tiene como padre a un TransformGroup que es el cuerpo, y como hijos al shape3d del modelo del muslo y sus 2 articulaciones shapes; y el TransformGroup de la pierna
Las coordenadas reales se obtienen asi:
TransformGroup t = new TransformGroup(); //Aqui voy a recibir la fransformacion de mi objeto.
miNodo.getLocalToVworld(t); //la recibo
Point3d p = new Point3d(); //en este contenedor se recibiran las coordenadas reales.
t.transform(p); //las recibo
El error viene cuando obtengo la articulacion (shape->point->coordinate[0]) del muslo y la de la pierna, para hayar la diferencia de espacio y mover a la pierna, esa diferencia, asi uniendo los 2 puntos de articulaciones y manteniendo toda la pierna de una pieza.
Teniendo en cuenta que el muslo tiene 1 transformacion, y la pierna tiene una transformacion heredada del muslo y a demás puede tener otras. Al obtener las corrdenadas reales, no me las devuelve escaladas correctamente.
Si escalo el muslo aumentando Y, la pierna se separa, y si disminuyo Y, la pierna entra dentro del muslo literalmente.
No se si es un fallo de jerarquia de como meter los transformGroup dentro de otros, de meter los shapes dentro de un branch y luego dentro del transformgroup.
He provado a ponerlo todo al mismo nivel (la pierna y el muslo como hermanos) dejando solamente el sistema de articulaciones, y si encuentra las coordenadas correctas y me une bien las articulaciones sean cuales sean las escalas de cada uno. FUNCIONA!!! pero el problema es que cuando levanto el muslo (entonces rota) la pierna no se rota, aunque si se une al muslo.
Imagina lo que tengo que hacer si quiero poner manos!! la de cosas que tendria que coordinar!!
Espero que me ayuden a que funcione esto de manera jerarquica y no poniendo a todos como hermanos, ya que me interesa heredar el movimiento y la rotacion, para no tener que rotar la la pierna tambien cada vez que quiero rotar el muslo.