martes, 9 de febrero de 2010

Rotación de una esfera en todos sus ejes.

Universidad La Salle Noroeste

Animación por computadora IV

Guillermo Ruiz Félix


Objetivo


Rodar una esfera sobre una superficie plana en cualquiera de sus ejes.


Desarrollo


Se comenzará creando una esfera y un plano, donde la esfera será hija del plano para que al mover el plano, se mueva la esfera junto con él. Ahora nos dedicaremos a realizar la rotación de la esfera en el eje X, se selecciona la esfera, después abrimos el Curve Editor, buscamos la rotación de la esfera en el eje que queramos, en este caso el eje X, ya ubicado el eje deseado, le asignamos un controlador (Float Expression).


A continuación se mostrará una ventana donde crearemos dos variables:

  1. Una de ellas será para la posición en X de la esfera
  2. La otra sería para el radio de la esfera.


A la primera variable le vamos a asignar un controlador, el cual será la posición X de la esfera. A la segunda variable le asignaremos el controlador del radio de la esfera.


Volviendo al Float Expression, agregamos la siguiente expresión matemática:


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


  • degToRad es para convertir los grados en radianes.
  • posX es la variable que habíamos creado anteriormente.
  • pi es la expresión matemática de 3.1416 y es variable reservada de 3DsMax.


Para confirmar que nuestro procedimiento fue correcto damos clic en el botón “Evaluate” y si no marca ningún error, significa que el procedimiento fue correcto y ya podemos cerrar Float Expression.


Desde la vista perspectiva, podemos arrastrar a la esfera desde su eje X y observar con claridad que la esfera rueda correctamente en su eje X.


Hasta ahora, la esfera gira en un solo eje, para poder hacer que la esfera gire correctamente en su eje Y, simplemente se aplica el mismo procedimiento utilizado para el eje X, cambiando las variables correspondientes.


Después de haber realizado el procedimiento para el eje Y, se puede observar que la esfera gira correctamente en los dos ejes, pero al momento de desplazar los dos ejes de manera simultánea, el giro de la esfera es irregular. Por lo que nos damos cuenta que el procedimiento utilizado hasta el momento, no ofrece una solución completa para alcanzar nuestro objetivo, el cuál les recuerdo que es hacer girar la esfera en todos sus ejes.


A continuación les mostraré una alternativa que dará una solución completa a nuestro problema de la esfera, utilizando “cuaterniones”.


Para los que no han escuchado acerca de los cuaterniones, aquí les presento una breve introducción, los cuaterniones son una forma alternativa de representar rotaciones a través de cualquier eje. Un cuaternión consiste en números complejos en 4D que representa los valores de rotación mediante funciones sinodales y cosinodales.


Ya que sabemos que es un cuaternión, ahora veremos como asignárselo a la esfera:


Seleccionamos la esfera y nos vamos al Curve Editor, le asignamos el controlador Rotation Script, pero ésta vez en lugar de asignarlo a cualquier eje de rotación de la esfera, se lo asignamos a la rotación general de la esfera.


Dentro del controlador Rotation Script agregamos el siguiente código:


obj = $Sphere01

timeres = 1f

-----------------------------------------------------

fn getrot t =

(

if t<=0f then return quat 0 0 0 1 -- t=0 => no rotation

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)


Después de ingresar el código, da clic en el botón “Evaluate” para confirmar que no existe ningún error, de ser así, podemos cerrar la ventana.


Éste código permitirá que al esfera gire libremente hacia cualquier dirección.


Bibliografía:

http://www.cuneytozdas.com/tutorials/maxscript/

No hay comentarios:

Publicar un comentario