Nodo Group:
El nodo Group permite unir un conjunto de nodos de forma que actúen como una entidad única, pero sin efectuar ninguna transformación en ellos. La principal característica de este tipo de grupo es que los objetos son creados todos en el mismo punto (en el centro del escenario de realidad virtual).
Sintaxis:
- Group {
- children [ ... ]
- }
El campo children contiene la lista de los objetos que se quieren agrupar, representados por sus nodos Shape respectivos:
Ejemplo:
- Group {
- children [
- Shape { ... }.
- Shape { ... }, ...
- ]
- }
Ejemplo:
- #VRML V2.0 utf8
- Group {
- children [
- Shape {
- appearance Appearance {
- material Material { }
- }
- geometry Box {
- size 2.0 0.5 3.0
- }
- }
- Shape {
- appearance Appearance {
- material Material { }
- }
- geometry Cone {
- height 3.0
- bottomRadius 0.75
- } } ] }
Nodo Transform:
Por defecto todos los objetos (Shapes) se construyen en el centro del escenario virtual. El nodo transform nos va a permitir evitar esto, indicando la posición, orientación y tamaño de los diferentes objetos que va a crear.
Sintaxis:
El campo translation permite indicar la posición del origen del nuevo sistema de coordenadas perteneciente al grupo dentro del sistema de coordenadas de nodo que lo engloba (nodo padre). A través del siguiente ejemplo esta idea quedará más clara:
Ejemplo:
Gráficamente los pasos serían los siguientes:
I) Partimos del sistema de coordenadas del nodo padre:

II) Realizamos la translación del sistema de coordenadas del grupo:

Un ejemplo sería el siguiente:

El campo rotation nos permite girar el sistema de coordenadas del grupo alrededor de uno de los ejes del sistema de coordenadas del nodo padre. Para ello, además de indicar sobre que eje se desea realizar el giro, se ha de hacer referencia al grado de inclinación de dicho giro (en radianes).
Ejemplo:
Gráficamente los pasos serían los siguientes:
I) Partimos del sistema de coordenadas del nodo padre:

II) Realizamos la rotación del sistema de coordenadas del grupo:

Un ejemplo sería el siguiente:
A través del campo scale podemos aumentar o reducir el tamaño de los ejes del sistema de coordenadas del grupo utilizando factores de escala que toman como referencia los ejes de coordenadas del sistema del nodo padre. De esta forma aumentamos o disminuimos el tamaño de los objetos que se crean.
Ejemplo:
Ejemplo:
I) Partimos del sistema de coordenadas del nodo padre:

II) Realizamos la translación del sistema de coordenadas del grupo:

Un ejemplo sería el siguiente:

Por último, se muestra un ejemplo en el que se unen las diferentes modificaciones sobre el sistema de coordenadas de un grupo:
Ejemplo:

Poniendo nombres propios a los nodos:
Hay una solución prevista para simplificar las repeticiones de objetos dentro de un escenario virtual. Esta solución consiste en asignar un nombre arbitrario al nodo que se piensa repetir en el código.
Supongamos, por ejemplo, que se van a utilizar repetidamente en un escenario unos cilindros exactamente iguales (que podrían ser las columnas de una casa).Dichos cilindros tendrán el siguiente código:
Se puede definir, para el ámbito de un documento VRML, que este tipo de cilindro tenga un nombre arbitrario, por ejemplo ColumnaRepetida (o como se desee, con tal de que comience por mayúscula), de la siguiente manera:
USE ColumnaRepetida En el ejemplo anterior de la caja y el cono, aparece el nodo Appearancerepetido. Vamos a definirlo, en la primera ocasión que se utiliza con el nombre, "PorDefecto" y la segunda vez que se usa lo invocaremos mediante el comando USE:
Por defecto todos los objetos (Shapes) se construyen en el centro del escenario virtual. El nodo transform nos va a permitir evitar esto, indicando la posición, orientación y tamaño de los diferentes objetos que va a crear.
Sintaxis:
- Transform{
- translation Eje_X Eje_Y Eje_Z
- rotation Eje_X Eje_Y Eje_Z Ángulo
- scale Eje_X Eje_Y Eje_Z
- children[...]
- }
El campo translation permite indicar la posición del origen del nuevo sistema de coordenadas perteneciente al grupo dentro del sistema de coordenadas de nodo que lo engloba (nodo padre). A través del siguiente ejemplo esta idea quedará más clara:
Ejemplo:
- Transform{
- translation 2.0 0.0 0.0
- children [...]
- }
Gráficamente los pasos serían los siguientes:
I) Partimos del sistema de coordenadas del nodo padre:
II) Realizamos la translación del sistema de coordenadas del grupo:
Un ejemplo sería el siguiente:
El campo rotation nos permite girar el sistema de coordenadas del grupo alrededor de uno de los ejes del sistema de coordenadas del nodo padre. Para ello, además de indicar sobre que eje se desea realizar el giro, se ha de hacer referencia al grado de inclinación de dicho giro (en radianes).
Ejemplo:
- Transform{
- rotation 0.0 0.0 1.0 0.52
- children [...]
- }
Rotación sobre el eje X | 1.0 | 0.0 | 0.0 |
Rotación sobre el eje Y | 0.0 | 1.0 | 0.0 |
Rotación sobre el eje Z | 0.0 | 0.0 | 1.0 |
Gráficamente los pasos serían los siguientes:
I) Partimos del sistema de coordenadas del nodo padre:
Un ejemplo sería el siguiente:
A través del campo scale podemos aumentar o reducir el tamaño de los ejes del sistema de coordenadas del grupo utilizando factores de escala que toman como referencia los ejes de coordenadas del sistema del nodo padre. De esta forma aumentamos o disminuimos el tamaño de los objetos que se crean.
Ejemplo:
- Transform
- {
- scale 0.5 0.5 0.5
- children [...]
- }
Ejemplo:
- Transform
- {
- scale 2 2 2
- children [...]
- }
I) Partimos del sistema de coordenadas del nodo padre:
II) Realizamos la translación del sistema de coordenadas del grupo:
Un ejemplo sería el siguiente:
Por último, se muestra un ejemplo en el que se unen las diferentes modificaciones sobre el sistema de coordenadas de un grupo:
Ejemplo:
- Transform{
- translation 2.0 0.0 0.0
- rotation 0.0 0.0 1.0 0.52
- scale 0.5 0.5 0.5
- children [...]
- }
Hay una solución prevista para simplificar las repeticiones de objetos dentro de un escenario virtual. Esta solución consiste en asignar un nombre arbitrario al nodo que se piensa repetir en el código.
Supongamos, por ejemplo, que se van a utilizar repetidamente en un escenario unos cilindros exactamente iguales (que podrían ser las columnas de una casa).Dichos cilindros tendrán el siguiente código:
- Shape {
- appearance Appearance {
- material Material { }
- }
- geometry Cylinder {
- height 2.0
- radius 0.5
- }
- }
Se puede definir, para el ámbito de un documento VRML, que este tipo de cilindro tenga un nombre arbitrario, por ejemplo ColumnaRepetida (o como se desee, con tal de que comience por mayúscula), de la siguiente manera:
- DEF ColumnaRepetida Shape {
- appearance Appearance {
- material Material { }
- }
- geometry Cylinder {
- height 2.0
- radius 0.5
- }
- }
- #VRML V2.0 utf8
- Group {
- children [
- Shape {
- appearance DEF PorDefecto Appearance {
- material Material { }
- }
- geometry Box {size 2.0 0.5 3.0 } },
- Shape {
- appearance USE PorDefecto
- geometry Cone
- { height 3.0 bottomRadius 0.75 }
- }
- ]
- }