Universidad La Salle Noroeste ( ULSA )
Computeranimation II
Teacher: Enrique Rosales
Student: Marlon Alejandro Rábago Heredia
09/Feb/2010
Computeranimation II
Teacher: Enrique Rosales
Student: Marlon Alejandro Rábago Heredia
09/Feb/2010
COMO ROTAR UNA ESFERA CORRECTAMENTE EN 3DMAX
INTRODUCCIÓN
Cuando queremos rotar una esfera al moverla sobre algún eje es común que tenga una rotación errónea.En este documento veremos como rotar una esfera correctamente en cada uno de sus respectivos ejes por medio del uso de flota expresión.
DESARROLLO
Una vez abierto nuestro programa 3D creamos una esfera y le asignamos un material que nos permita ver claramente cuando gira la esfera.
Seguido creamos un plano en nuestra vista tp que nos ayude a simular una superficie.Ahora asignamos nombres a nuestros objetos para facilitar el manejo de estos y los posicionamos en la posición cero.Hacemos a la esfera hija del plano por medio de la herramienta Select and Link de nuestra barra de herramientas. Seleccionamos la herramienta, seleccionamos el hijo (en este caso la esfera) y arrastramos el cursor a el plano.
Siendo el plano la superficie donde se desplazará la esfera, asignaremos que la esfera estará arriba de el plano y programaremos para que no se mueva en el eje de X, así manera cuando movamos el plano la esfera se moverá junto con el, y si movemos la esfera se moverá libremente excepto en el eje de X.
Damos clic derecho en la esfera :wide parameters / transforms/ position / X position
Nos aparecerá otra línea y la linkiamos con la misma esfera y nos aparecera otro menú:seleccionamos Object (Sphere) / radius
Aparecerá la siguiente pantalla donde nos aseguraremos que haya conexión de parte del radio a la posición en X, seleccionamos la flechita y conectar.
Ahora seleccionamos la esfera y abrimos nuestro curve editor, seleccionamos la rotación general de la esfera y le asignamos el controlador de Rotation Script.
Se nos abrirá un cuadro de dialogo donde podremos declarar variables, asignarlas a objetos y programarlas con formulas matemáticas.
( 3D Max cuenta con una lista de variables y funciones asignadas por default entre las cuales se encuentra la función de quaternion entre otras)
El código que pondremos en la sección de expresión es el siguiente:
obj = $Esfera
timeres = 1f
fn getrot t =
(
if t<=0f then return quat 0 0 0 1 -- t=0 =>
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)
Lo que haremos será encontrar el tiempo y la distancia debido a que los cuaterniones ocupan 2 valores para crear uno nuevo imaginario, esto lo haremos basándonos en un tiempo y distancia iniciales y en un tiempo y distancia final.
Obteniendo estos encontramos el eje de rotación:
El plano simula una superficie horizontal, por lo tanto aplicando leyes de la física este implica una gravedad con su eje perpendicular y vector.
Por medio del producto cruz teniendo estos parámetros, encontramos el eje de rotación.
Cada ves que la esfera gira viaja una distancia igual a su circunferencia, por medio de una formula matemática obtenemos cuantas veces girará la esfera.
Una vez obtenidos el eje de rotación y el número de vueltas podemos sacar el quaternion con la función que tiene 3dMax.
EXPLICACIÓN DEL CODIGO:
Se asigna el nombre
Tiempo de diferencia
Función para la rotación
Valida si hay movimiento para regresar al quaternion inicial,si hay se le resta al inicial y se queda ese.
Rotación previa
Posición inicial
Posición final
Si tienen el mismo valor no hay movimiento.
Se restan posiciones
Se hace la normal del vector con la diferencia de longitud
Radio inicial
Radio final
Eje de rotación , producto cruz
Rotaciones en gradosSaca el quaternionRotación final
Manda llamar la función ya actualizada
CONCLUSIÓN
Como nada en esta vida es perfecto y aunque 3D max es una maravilla, cuando queremos rotar una esfera en 2 ejes al mismo tiempo es como si quisieramos caminar para la izquierda y la derecha al mismo tiempo, nuestro cerebro no puede con esa tarea al igual que este programa, por eso usamos los quaterniones que manejan tiempos y distancias y nos facilitan el trabajo.
BIBLIOGRAFÍA:
http://www.cuneytozdas.com/tutorials/maxscript/
timeres = 1f
fn getrot t =
(
if t<=0f then return quat 0 0 0 1 -- t=0 =>
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)
Lo que haremos será encontrar el tiempo y la distancia debido a que los cuaterniones ocupan 2 valores para crear uno nuevo imaginario, esto lo haremos basándonos en un tiempo y distancia iniciales y en un tiempo y distancia final.
Obteniendo estos encontramos el eje de rotación:
El plano simula una superficie horizontal, por lo tanto aplicando leyes de la física este implica una gravedad con su eje perpendicular y vector.
Por medio del producto cruz teniendo estos parámetros, encontramos el eje de rotación.
Cada ves que la esfera gira viaja una distancia igual a su circunferencia, por medio de una formula matemática obtenemos cuantas veces girará la esfera.
Una vez obtenidos el eje de rotación y el número de vueltas podemos sacar el quaternion con la función que tiene 3dMax.
EXPLICACIÓN DEL CODIGO:
Se asigna el nombre
Tiempo de diferencia
Función para la rotación
Valida si hay movimiento para regresar al quaternion inicial,si hay se le resta al inicial y se queda ese.
Rotación previa
Posición inicial
Posición final
Si tienen el mismo valor no hay movimiento.
Se restan posiciones
Se hace la normal del vector con la diferencia de longitud
Radio inicial
Radio final
Eje de rotación , producto cruz
Rotaciones en gradosSaca el quaternionRotación final
Manda llamar la función ya actualizada
CONCLUSIÓN
Como nada en esta vida es perfecto y aunque 3D max es una maravilla, cuando queremos rotar una esfera en 2 ejes al mismo tiempo es como si quisieramos caminar para la izquierda y la derecha al mismo tiempo, nuestro cerebro no puede con esa tarea al igual que este programa, por eso usamos los quaterniones que manejan tiempos y distancias y nos facilitan el trabajo.
BIBLIOGRAFÍA:
http://www.cuneytozdas.com/tutorials/maxscript/
No hay comentarios:
Publicar un comentario