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.
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{}
} ]
}
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.
}]
}
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.
} ]
}
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:
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).
· 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"
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