Let's Twist Again... |
Billboards
Sólo un par de cosas más antes de meternos con las cosas buenas de la animación, y la primera es el nodo Billboard. Realmente es un nodo Transform que rota automáticamente para estar de cara al usuario. No es necesario decir lo útil que resulta para carteles de texto, sprites, y un montón más de cosas. Echemos un ojo al nodo mismo para ver qué tenemos para jugar.
Billboard { eventIn MFNode addChildren eventIn MFNode removeChildren exposedField SFVec3f axisOfRotation 0 1 0 exposedField MFNode children [] field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 }
Como todos los nodos de agrupación, posee los eventos addChildren, removeChildren, bboxCenter y bboxSize, todos los cuales cubriremos más adelante. Tiene además un campo children, que contiene los objetos que quieres en tu billboard. De modo que si quieres un cubo que muestre siempre la misma cara al ususario, colócalo en este campo. Esto nos deja sólo el campo axisOfRotation. Este es el eje sobre el que va a rotar el nodo. El valor por defecto es 0 1 0, que es el eje Y. Esto es lo que normalmente querrías para que el usuario pueda ver el billboard. Pero si tienes un objeto con un ángulo dado, o lo que sea, puedes querer un ángulo diferente. El caso especial para el billboard es el 0 0 0. Normalmente, este no es un eje válido, pero en este caso le dice al nodo que puede rotar sobre CUALQUIER eje. Normalmente, cuando el nodo gira alrededor de un ángulo, si te apartas de él dejarás de verlo claramente. Si tienes un eje de 0 0 0, apuntará al usuario, no importa donde esté.
Bueno, eso fue todo para el nodo Billboard, muy cortito, pero nos ha dado algo divertido con lo que jugar. Echa un ojo a este ejemplo y su código para una demostración. Todos los árboles son Billboard que giran respecto a su eje Y, de modo que simpre mirarán al usuario.
Más Transforms
Hemos cubierto el nodo Transform hace años y años, pero hay más cosas que podemos hacer con él. La última vez, cubrimos rotaciones, traslaciones y escalas. El nodo Transform al completo es más complejo que todo eso. La definición completa se muestra aquí:
Transform { eventIn MFNode addChildren eventIn MFNode removeChildren exposedField SFVec3f center 0 0 0 exposedField MFNode children [] exposedField SFRotation rotation 0 0 1 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation scaleOrientation 0 0 1 0 exposedField SFVec3f translation 0 0 0 field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 }
Como puedes ver este nodo de agrupamiento tiene además los eventos addChildren, removeChildren, bboxCenter y bboxSize. los cubriremos posteriormente con los capítulos de optimización y scripting. De momento los dejaremos aparte para concentrarnos en los otros campos. Ya hemos visto rotation, scale, translation y children Hay un par de ellos más que controlan cómo se aplican las rotaciones y las escalas. Los campos center y scaleOrientation transforman el sistema de coordenadas local del nodo mientras las otras transformaciones se aplican.
El campo center afecta a las transformaciones de rotación y escala. Define el origen local de la transformación. Así que si defines un centro de 5 0 0, las rotaciones y escalas serán relativas a este punto. El objeto rotará alrededor de ese punto, lo que es equivalente a trasladar el objeto por el inverso de ese centro, rotarlo, y volver a trasladarlo de vuelta. Esto afecta también a escalas, de modo que si escals algo, pero mueves el origen de las escala, afectará todas las coordenadas del objeto relativas al center en vez de al origen local del objeto.
el campo scaleOrientation tiene también efecto en la escala, sólo que esta vez es una rotación lo que se aplica en vez de una traslación. Esto te permitirá escalar en las direcciones que mejor te parezca. Con scale, sólo puedes escalar sobre los ejes, lo cual es algo limitado. Usando scaleOrientation puedes rotar las sirecciones de escala para un objeto. Tiene el mismo efecto que aplicar la rotación inversa, escalar, y rotar el objeto de vuelta. Esencialmente, rota los ejes de la escala con el campo scaleOrientation.
Echa un ojo a este ejemplo y a su código. En la izquierda, tenemos una rotación sobre un punto arbitrario. El punto rojo marca el centro, sobre el cual ha sido rotada la caja verde. Las cajas púrpuras han sido escaladas. El centro es una caja normal, sin escalar. La caja de abajo ha sido escalada con un valor de 2 en la dirección X. La de arriba también, pero con un scaleOrientation de 0 0 1 0.78. Esto la hace rotar sobre el eje X 45 grados en el sentido contrario a las agujas del reloj, dándole una extraña apariencia.
Hacer el Índio
Esto fue todo para las cosas que se mantienen quietecitas. Ahora, en la tercera parte, echaremos un ojo a la animación y a material por el estilo. ¡Sujétate!