Automatizando la Loco II

Bueno, despues de probar mil cosas y obviando el sistema que cree antes para la locomotora sacamos como conclusión y gracias a la ayuda de Nessito e Ikerclon que esta es la solución más viable para que la locomotora no se desmonte al moverse por el recorrido.

Borramos todos los controles anteriores, wires y demas y lo replanteamos así:

(Comentarios de Nessito)
Las dos vielas tienen el pivote en el mismo sitio (la X marca el lugar) y son hijas de la rueda trasera. Las dos tienen un lookAt constraint, una al Point01 y otra al Point02 (está claro cual a cual).

Al asignar el constraint, lo normal es que se descabalen por el tema de los ejes. Soluciones hay dos:

-Poner en el constraint los ejes como dios manda o...
-...Dar al checkbox "Keep Initial Offset"

El point01 es hijo de la rueda delantera y el point02 es hijo del point03 (que es el que controla el movimiento de toda la locomotora).
El point02 tiene un script controller en el eje x para que siga el movimiento en ese eje del point01 tomando como referencia el point03. Basicamente dice:
"La posicion en x es la posicion en x del point01 respecto de point03"

El point03 tiene un path constraint a la forma del recorrido (forma para usar como path para hacer un loft para las vias).

Las dos ruedas son hijas del point03 ademas del resto de la locomotora con un controlador script (instanciado) en el eje Y (dependerá del eje sobre el que deban girar), que dice:

degtorad(((pathlength/ruedalength)*-(pathpoint/100.0))*360.0)

Relacion de variables:

- pathlength = longitud del path (sacado de poner en el listener "curvelength $" con el path seleccionado)
- ruedalength = longitud de la circunferencia de la rueda (2*pi*R)
- pathpoint = el punto del recorrido en el que se encuentra el point03 (esto es, una variable asignada al controlador percent del path constraint del point03)

Por tanto:

- (pathlength/ruedalength) = numero de vueltas que las ruedas deben hacer para completar el recorrido
- (pathpoint/100.0) = posicion del point03 sobre el recorrido en el rango 0-1. El menos que tiene delante es para invertir el sentido de giro, porque en mi caso las ruedas iban al reves de lo que deberian (depende de la orientacion de los ejes de las ruedas y del sentido del path)
- Multiplicando estas dos expresiones se obtiene la rotacion que deberian tener las ruedas en un punto cualquiera del path en "numero fraccional de vueltas", por eso...
- ...Multiplicamos este valor por 360.0, para obtener el valor en grados
- Y todo esto se lo pasamos a la funcion degtorad que nos lo convierte en radianes (que es como lo necesita el controlador eulerXYZ para que funcione bien)

Con todo esto todavia tengo un par de fallos en la orientación de los lookat contraints que espero tener corregidos en breve y os podre mostrar el primer video de la locomotora rodando.

Ahora se porque me meti a modelar y texturar y no a animar.

0 comentarios:

 
José Ramón Ruiz © 2010 | Designed by Trucks, in collaboration with MW3, Broadway Tickets, and Distubed Tour