martes, 9 de febrero de 2010

Rotación de Esfera Jorge Alejandro

Universidad La Salle Noroeste

Animación 4 - Maestro: Enrique Rosales

Jorge Alejandro Ybarra

Mat. 059018


Crear el rigging de una esfera para que gire correctamente en todos sus ejes.


Se comienza creando una esfera y un plano, siendo la esfera hija de este último, para que al mover el plano la esfera gire en los ejes X y Y.

El eje Y de la esferaes el que gira al moverse la posición X del plano; se asigna un controlador Float Expression a la rotación en el eje Y de la esfera, desde el Curve Editor.

Dentro del Float Expression se crean 2 variables:

  • posX: que está vinculada a la posición del eje X del plano.
  • radio: vinculado al radio de la esfera.


Se crea una expresión matemática que calcula los radianes que gira la esfera al desplazarse.


degToRad((posX)/(2*pi*radio))*360


donde:


  • degToRad: convierte grados a radianes.
  • pi: es variable reservada en 3DMax que contiene el valor matemático de π


Para observar la rotación de la esfera se da clic al botón Evaluar, si no hay errores cerramos el Curve Editor y movemos el plano en el eje X. Observamos como la esfera gira correctamente en su eje Y.


Hacemos exactamente lo mismo para la rotación del eje X de la esfera, sólo que se vincula con la posición Y del plano.


Ahora movemos el plano en Y, y observamos la rotación de la esfera en su eje X.
Se ha logrado que la esfera gire en base al movimiento de un controlador, alternadamente en los ejes X y Y. Sin embargo, al mover el controlador en ambos ejes, la esfera gira de forma extraña, de manera inadecuada, así que se debe buscar una solución para este problema.


Una de las posibles soluciones a este problema es el uso de Quaternion. Es una forma alternativa de representar rotaciones a través de cualquier eje. Consiste en números complejos en 4D que representan los valores de rotación mediante funciones de senos y cosenos. En otras palabras, crea un eje imaginario sobre la esfera, que controla la rotación de los demás ejes, haciendo posible que la esfera gire en 2 ejes al mismo tiempo.


Para asignar Quaternion a la esfera, desde el Curve Editor, se asigna el controlador Rotation Script a la rotación general de la esfera. Dentro de este controlador ingresamos el siguiente código:



obj = $Sphere01

timeres = 1f


fn getrot t =

(

if t<=0f then return quat 0 0 0 1

t0 = t-timeres

t1 = t


rot0 = getrot(t0)


p0 = at time t0 obj.position

p1 = at time t1 obj.position

if(p0==p1) then return rot0


dif = p1-p0

len = Length(dif)

vec = dif / len


r0 = at time t0 obj.radius

r1 = at time t1 obj.radius


rotax = cross vec [0, 0, 1]

angle = 360*len/((r0+r1)*pi)

rotdif = quat angle rotax

rot1 = rot0 + rotdif

)


getrot(currentTime)



Al ingresar este código simplemente se da clic en el botón Evaluar y se mueve el controlador en ambos ejes para corroborar que efectivamente la esfera se mueve correctamente en los ejes X y Y, simultáneamente.



Bibliografía: http://www.cuneytozdas.com/tutorials/maxscript/

No hay comentarios:

Publicar un comentario