viernes, 24 de mayo de 2013


Nodo Transform.
Por defecto todos los objetos son creados en el centro del escenario de realidad virtual. El primer paso es conocer el sistema de coordenadas usado por el lenguaje, para poder colocar un objeto en otro punto.
En VRML tenemos:
  • Eje X derecha (+), izquierda (-)
  • Eje Y arriba (+), abajo (-)
  • Eje Z delante (+), atrás (-)



Un mundo virtual tiene su sistema de coordenadas situado en el centro. Con el nodo Transform, se determina un nuevo sistema de coordenadas para un grupo de objetos.
Este nuevo sistema de coordenadas sufre unas transformaciones: puede ser trasladado a un punto determinado, puede ser girado un determinado ángulo y puede tener una escala distinta a la original. El grupo de objetos especificados en el nodo sufrirán las mismas transformaciones, es decir, serán trasladados, girados y variados de escala.
La estructura general del nodo Transform es:
Transform{
translation x y z
rotation x y z Radianes
scale x y z
children[
]
}
En este nodo nos encontramos los campos de translación, rotación y escala. El campo children, es donde se especifican los objetos que sufrirán esas transformaciones. No es necesario que estén los tres términos en una transformación.
Escalado (Scale): 
Sirve para cambiar de tamaño a los objetos. Podemos hacerlos más grandes o más pequeños, rescaldando respecto a cada eje (es decir, multiplicando el tamaño del objeto por un factor respecto a cada eje. 
Nota: Los factores no pueden ser negativos. 
            scale factor_x factor_y factor_z
                     Ejemplo:
                     Transform{
                            scale 2 0.5 1 #Establecemos que los objetos de children doblen su extensión en   
                                                   #el eje x, la reduzcan a la mitad en el  eje y y no la varíen en el eje z.
                            children[
                               Shape{
                                  geometry Box{}
                                    } ]
                          }

Traslación:
Es una transformación muy simple. Desplaza el centro de los objetos.
translation dx dy dz
Si el centro de un objeto está en el punto (x,y,z), tras esta translation pasará a estar en (x + dx, y + dy, z + dz)
Ejemplo:
Transform{
translation 3 -1 2   # suponiendo que estamos mirando en la dirección del eje z y en su sentido
# negativo, estaríamos desplazando los objetos 3 unidades la derecha,
                                                             # 1hacia  abajo y 2 hacia nosotros. 
                                children[ Shape{
                                          geometry Box{} #El nodo Shape deja los objetos en el 0,0,0 por defecto.
                                            }]
                                   }


Rotación: 
Las rotaciones se definen por un vector y por un ángulo de giro. Si no indicamos nada más, los objetos giran alrededor de su centro.
         rotation v1 v2 v3 angulo 
            (v1, v2, v3) son las coordenadas del vector, y angulo los radianes que giramos respecto al vector
                  Ejemplo:
                           Transform{
                                        rotation 0 1 0 0.79 #Giramos lo que esté dentro del nodo children
                                        children[ Shape{
                                              geometry Box{} #El nodo Shape deja los objetos en el 0,0,0 por defecto.
                                        } ]                               
}



Otras transformaciones: el nodo Billboard:
Además de todas las transformaciones vistas existen otro tipo de transformaciones, quizás más interesantes que las vistas hasta ahora.
Este nodo es realmente un nodo Transform, puesto que lo que hace es mostrar siempre la misma cara al usuario aunque se considera distinto. Lo que se está haciendo es que, según va moviéndose el observador (usuario) por el mundo, el nodo Billboard rota sobre un mismo eje (en función de los movimientos que haga el usuario).
 Los campos que posee este nodo Billboard son:
 · addChildren: permite añadir un hijo (children).
· removeChildren: permite eliminar un hijo (children).
 · axisOfRotation: eje de rotación del objeto (nodo).Tiene tres coordenadas (por defecto es 0 1 0).
 · children: contiene los objetos que queremos en el Billboard.
 · bboxCenter (se utiliza para los scripts).
 · bboxSize (se utiliza para los scripts).
                    Ejemplo:
                            Billboard  {
                             
                                    axisOfRotation 0 0 0
                                    children
                                            [
                                                Shape
                                                   {
                                                                geometry Text
                                                         {
                                                            string "Hola"
                                                         }
                                                  } ]
                                    }

Nota: Composición de transformaciones.
Una transformación puede representarse por una matriz. Las transformaciones pueden componerse, multiplicando matrices. Dado que el producto de matrices no es conmutativo, tampoco lo son las transformaciones. (Ejemplo: no es lo mismo rotar y trasladar que trasladar y rotar) Por lo tanto, hay que tener cuidado. Las transformaciones que se aplican primero son las más cercanas al objeto que se va a transformar, y luego se retrocede en el código. (En general)

No hay comentarios:

Publicar un comentario