Gira y Gira Caramelo! |
Los Sistemas de Coordenadas y los ejes
Aqui estamos de nuevo. Todas las distancias en VRML se miden en metros. Esto no importa demasiado en nuestros propios mundos, pero si se quiere enlazar con otros, o usar archivos externos, será bueno que conserves esta norma. El sistema de coordenadas en VRML funciona tal y como se muestra abajo:
El eje X es horizontal, Y es vertical y Z atraviesa la pantalla hacia fuera directo hacia ti como se ve en el diagrama de arriba.
Las rotaciones en VRML funcionan con la regla de la mano derecha. Si imaginas que envuelves tu mano alrededor de uno de los ejes, con tu dedo pulgar apuntando en dirección positiva, la dirección de rotación positiva es igual que la dirección en que tus dedos se envuelven alrededor, es decir igual que el sentido de las agujas del reloj en una dirección positiva. Esto es para las rotaciones sobre cualquier eje, entonces si quieres rotar un objeto 90 grados fuera de ti alrededor del eje X, tendrias que utilizar en 90 grados la rotación negativa. Esto también aplica a las rotaciones sobre los ejes arbitrarios, como sera explicado mas adelante en este tutorial. Otro punto para resaltar es que todas las rotaciones son medidas en radianes y no en grados. Así que, para hacer la rotación descrita arriba, tendrias que hacer una rotación de -1.57 alrededor del eje X. Abajo tienes una rápida referencia para las conversiones. En genral, sólo tienes que multiplicar el número de grados por pi/180
Grados | Radianes |
0 | 0 |
45 | 0.78 |
90 | 1.57 |
135 | 2.36 |
180 | 3.14 (Pi) |
225 | 3.93 |
270 | 4.71 |
315 | 5.5 |
360 | 6.28 (2*Pi) |
Las transformaciones
OK. Para hacer cualquier uso de nuestro mundo, necesitaremos poder transformar los objetos. VRML tiene tres tipos de transformaciones que nosotros podemos aplicar a los objetos. Éstas son traslaciones, rotaciones, y escalas. Éstas son usadas en el nodo Transform . El nodo Transform no tiene porque tener las tres transformaciones en él. Tu puedes tener solamente una rotación, por ejemplo. Las transformaciones dentro de Transform se aplican a los children del nodo. Esto se llama anidación (nesting), dónde un nodo puede tener cualquier número de nodos dentro del children. La sintaxis para esto se muestra en el ejemplo de abajo, junto con la sintaxis del nodo Transform.
Transform { translation 1 1 1 rotation 0 1 0 0.78 scale 2 1 2 children [ USE FBOX ] }
El nodo Transform puede tener otro anidado dentro de él como un children, lo que te permite hacer secuencias de transformaciones. Recuerda el orden de las transformaciones. Una rotación seguida por una traslación no es igual que una traslación seguida por una rotación. Dentro del nodo Transform , las transformaciones se llevan a cabo en el orden estricto: Escala, entonces Rota, luego Traslada. Así, si quieres una traslación seguida por una rotación, necesitas anidar un nodo Transform dentro de otro.
Volviendo al tema, necesitamos describir cómo funciona cada tipo de transformación.
Traslación y Escala
Estas transformaciones son muy similares. Ambas toman tres argumentos; valores de x y z. La traslación mueve el centro del objeto esas distancias en la apropiada dirección. La escala multiplica el tamaño del objeto por estos valores en las direcciones apropiadas. Una traslación de 0 en una dirección dejará el objeto sin afectar en esa dirección. Un factor de escala 0 hará el objeto infinitamente delgado en esa dirección, cosa que no es normalmente deseable. Un factor de escala 1 no produce ningún efecto.
Es muy importante recordar que el escalado toma el lugar relativo del origen, no el centro del objeto. Así para que para escalar desde el centro de un objeto, debes asegurarte que el objeto se centra en el origen. Esto explica por qué el escalado se hace primero, antes que cualquier rotación o traslación.
La Rotación
La rotación es ligeramente diferente de los dos tipos anteriores. Toma cuatro argumentos. El primero son las tres coordenadas que definen el eje de rotación y el último es el ángulo para rotar, en radianes. Así, para rotar 1 radián sobre el eje de Y, por ejemplo, debes escribir:
Transform { rotation 0 1 0 1 children [ USE FBOX ] }
La longitud del eje de la rotación puede ser cualquier valor, no necesariamente 1. Podrías usar un valor de Y de 50 si te apeteciese, pero haría lo mismo que si pusieses 1. El eje de rotación lo eliges tú, puedes rotar sobre cualquier eje que te guste. Por ejemplo, un eje de 1 0.3 2.45 es absolutamente válido. Sin embargo, puede ser difícil crear rotaciones de este tipo. Pueden ser difíciles de visualizar, sobre todo si no tienes práctica. Debido a esto, Vapour Technology ha creado un par de herramientas llamadas Dizzy y Twister para ayudarte. El Dizzy crea la rotación del eje-ángulo de un tipo más simple, y Twister une a las rotaciones de eje-ángulo múltiples para crear una solo con el mismo efecto. Puedes acostumbrarte a éstos para que se te haga más fácil rotar tus objetos alrededor del mundo. Están disponibles en la página de Vapourtech, http://www.vapourtech.com.
Giremos!
Esto es casi todo sobre las transformaciones y materiales. Todo lo que queda es dar un ejemplo. Así, si nosotros tomamos nuestro mundo del tutorial anterior y agregamos otra caja bajo la primera, rotada 45 grados sobre el eje de Y, y escalada por 2 en X y Z, y por 0.5 en Y, nosotros conseguiremos este código para nuestro mundo.
Puedes ver este mundo pulsando el botón debajo:
Mundo del ccapítulo
1.3.
Muy bien, este es el final de este capítulo. Como puedes ver, estamos consiguiendo un mundo un poco más sofisticado. Ahora, vamos a jugar un rato con el aspecto de las formas, estudiando el nodo Apparance en detalle.