miércoles, 18 de abril de 2012

Nodo Inline



  El nodo Inline va a permitir crear un grupo en donde los hijos, almacenados en distintos ficheros VRML, son recuperados indicando su dirección URL. 
 
Sintaxis:
Inline{
   url"dirección_url"
}

Nodo ElevationGrid


 Este nodo crea una cuadrícula rectangular con alturas variables, lo que la hace especialmente útil para modelar el terreno y para la creación de otras superficies en el espacio. 
 
Sintaxis:
ElevationGrid{ 
xDimension     número_de_columnas(Eje_X) 
xSpacing         valor_real 
zDimension     número_de_filas(Eje_Z) 
zSpacing         valor_real 
height   [altura1, altura2,...,altura(numcolum x numfilas) 
color  Color[...] 
colorPerVertext 
}

Nodo Extrusion: (moldeamiento)


Este nodo permite definir un objeto al desplazar su sección por una trayectoria.

geometry Extrusion {
                      crossSection [punto2D_1, punto2D_2, ..., punto2D_N, punto2D_1]
                        spine[punto3D_1, punto3D_2, ..., punto3D_N]
                        scale [escaladoX_1 escaladoZ_1, escaladoX_2 escaladoZ_2, ...]
                        solid TRUE ó FALSE
                        beginCap TRUE ó FALSE
                        endCap TRUE ó FALSE
                        creaseAngle ángulo       
    

     


Nodo IndexedFaceSet


Este nodo sirve para definir un conjunto de caras planas dentro de nuestro sistema de coordenadas. Nos da una gran libertad para modelar objetos en 3D, pero para objetos complejos se vuelve muy lioso.

Es un nodo geometry. Lo utilizaremos dentro de un nodo Shape (tal como hacíamos con el nodo Box o Sphere
Shape{
                    geometry IndexedFaceSet{
                    coord Coordinate { point [punto0,punto1, ..., puntoi, punto(i+1), ..., punton]}
                    coordIndex [cara 0 -1
                            cara 1 -1
                                ...
                            cara n -1 ]
                        }
                } 
*punto0, punto1,...., punton son los puntos que utilizaremos para definir las caras.
En coordIndex definimos las caras de nuestro objeto. Cada cara se compone de una lista ordenada de puntos (ejemplo: 0 1 2 3). La figura es cerrada automáticamente, por lo que no es necesario que el primer y el último punto de cada cara coincidan.

El nodo Transform


Su estructura general es la siguiente:

Transform {
       translation . . .
       rotation    . . .
       scale       . . .
       children  [ . . . ]
   }
 Como se puede ver, tiene tres campos con los que se determina su posible traslado, rotación o nueva escala, y un cuarto campo children, en donde se especifican cuáles son los objetos agrupados que sufrirán esas transformaciones.
No tienen por qué estar los tres campos a la vez. Por tanto, para simplificar, vamos a ver cada uno de ellos por separado.

Traslación

Poniendo sólo el campo translation, queda el nodo Transform de esta manera:
Transform {
       translation 20 0 0
       children [ . . . ]
   }
 Se ha puesto un valor al campo translation. El orden para el traslado de las coordenadas es X, Y, Z. Por tanto, en este caso, hay una traslación de 20 unidades hacia la derecha (si hubiera sido hacia la izquierda se habría puesto -20.0)
Por supuesto que se podrían haber variado las tres coordenadas, no sólo la X como en este caso.

Con respecto al campo children, se aplica lo dicho anteriormente, para el nodo Group.

Rotación

Poniendo ahora sólo el campo rotation, queda el nodo Transform de esta manera:
Transform {
        rotation 1 0 0 1.57
        children [ ... ]
   }

Nodo PointSet



Representa un conjunto de puntos situados en las coordenadas índicadas dentro del sistema de coordenadas del nodo padre. 
Sintaxis:
PointSet {
       coord Coordinate {
           point [ . . . ]
       }
       color Color {
           color [ . . . ]
       }
   }

Nodo LineSet


El nodo de geometría containes un nodo IndexedLineSet, que tiene un nodo y un nodo coord coordIndex. El nodo coord es igual que en el PointSet. Lleva a cabo una serie de puntos en 3-espacio. El nodo coordIndex es como un "conectar los puntos de juego. 
 Los fragmentos de código restantes dibujar bordes de cada uno de los vértices inferiores al punto de la pirámide.
Debido a que todo el equipo tiene que dibujar líneas es, y las líneas no están sombreadas, estos modelos suelen ser muy rápidamente atraído. Por desgracia, los dibujos de alambre son difíciles de entender una vez que se vuelven complejas.
Con este nodo se crean líneas, uniendo una serie de puntos determinados. Su estructura resumida es la siguiente:

Sintaxis
IndexedLineSet {
     coord Coordinate {
         point [  . . .  ]
     }
     coordIndex [ . . .  ]
 }
Como se puede ver, tiene dos campos:
coord, cuyo valor es el nodo Coordinate, y que sirve para determinar las coordenadas de los puntos aislados que se van a unir entre sí para formar las líneas.
coordIndex, con este campo se define el orden con el que se unen los puntos entre sí, dónde empieza y acaba una línea, etc.

Nodo Anchor


 El nodo Anchor crea un grupo especial ya que seleccionando cualquier objeto perteneciente a dicho grupo se salta hacia otro lugar del escenario virtual o hacia otro mundo virtual almacenado en un fichero VRML (al cual accedemos a través de su dirección URL). Cualquier objeto o grupo de objetos se puede convertir en un enlace. 
Estos enlaces son los equivalentes en el mundo tridimensional a los enlaces existentes en las páginas Web realizadas mediante HTML
Además, todo nodo Anchor posee un campo denominado description en el que mediante una cadena de texto se describe brevemente el objeto.
Sintaxis:
Anchor{ 
              url"dirección_URL
             description "descripción_del_enlace
            children[...] 

Nodo Viewpoint


El nodo Viewpoint especifica la ubicación del usuario y los parámetros de visualización del modelo esta es una enlazable nodo.
Los siguientes campos están presentes:
fieldOfView especifica un ángulo en radianes. Los pequeños ángulos corresponden a los teleobjetivos, mientras que los ángulos de gran tamaño (hasta 3,14) son el equivalente de los objetivos gran angular.
Posición especifica la posición del usuario en el sistema de coordenadas que se define el punto de vista.
Orientación determina la dirección en la que el usuario está buscando, especifica un giro relativo a la orientación predeterminada que apunta a lo largo del eje Z en la dirección negativa.
Descripción proporciona una descripción textual del punto de vista.
Sintaxis
Viewpoint {
fieldOfView 0.785398
position 0 0 10
orientation 0 0 1 0
description ""
jump TRUE
}

Nodo material


 El nodo Material es el que controla las propiedades del color (selección del color, del brillo, del grado de transparencia, etc.) que se van a dar al objeto.   
Nodo Material:  
Con este nodo vamos a determinar el color y grado de transparecia de los objetos.  
Sintaxis: 
Shape{  
   appearance Appearance{  
      material Material{  
         diffuseColor           color_RGB  
         emissiveColor        color_RGB  
         specularColor        color_RGB 
         ambientIntensity   valor  
         transparency         valor  
         shininess               valor  
      }  
   }  
   geometry ...  
 Cada uno de los seis campos del nodo Material tiene su propio efecto específico sobre un objeto.Todos son opcionales.  

Shape


La sintaxis del nodo Shape es la siguiente: 
 
Shape{ 
   appearance ... 
   geometry ... 
}
El campo appearance especifica las propiedades en cuanto a textura, material, etc del objeto que se describe en el campo geometry. 
 
Hablamos de formas primitivas cuando Shape utiliza nodos geométricos primitivos para construir una figura. Los nodos geométricos primitivos son los siguientes: 
 Box            (Caja)
Cone          (Cono)
Cylinder     (Cilindro)
Sphere      (Esfera)  

Nodo primitivo Box: 
 
Sintaxis: 
Box{  
     size anchura altura profundidad  
} 
Nodo primitivo Cone:  
Sintaxis: 
Cone{  
     height               altura  
     bottomRadius   radio_de_la_base 
     bottom               valor_lógico 
     side                    valor_lógico 
Nodo primitivo Cylinder: 
 
Sintaxis: 
Cylinder{  
     height                altura  
     radius                radio  
     bottom               valor_lógico 
     side                    valor_lógico 
     top                     valor_lógico 
Nodo primitivo Sphere: 
 
Sintaxis: 
Sphere{  
     radius radio  

Nodo Background


Incorpora un plano de suelo sombreado, texturas y cielo escénico. Sólo se emplea el primer nodo Background que se encuentre, debiéndose especificar en el archivo principal. 
 
Sintaxis:
Backgroud{
    groundAngle     [ ]
    groundColor     [ ]
    skyAngle          [ ]
    skyColor          [ ]
    backUrl           "dirección_URL"
    bottomURL     "dirección_URL"
    frontUrl           "dirección_URL"
    leftUrl              "dirección_URL"
    rightUrl           "dirección_URL"
    topUrl              "dirección_URL"
}
.  
 
.  

Image texture


El campo de la textura del nodo Apariencia puede contener uno de los diversos tipos de nodos textura: ImageTexture, MovieTexture, o PixelTexture. Con ImageTexture usted puede envolver o el azulejo una imagen alrededor de la forma.
Tanto ImageTexture y los ganglios MovieTexture cargar la textura de una fuente externa (imagen o vídeo), y colocarlos en el objeto de acuerdo con los parámetros de asignación, que se especifican en el interior del nodo. 

Sintaxis

Apariencia {
               Material de materiales {}
                               textura ImageTexture {
                               url "myimage.jpg"
                               repeatS TRUE
                               repeatT VERDADERO
               }
}

Fondos


   
La utilización de fondos en el mundo virtual, nos permite dotarlos de un cielo y de un suelo, añadiendo realismo de esta forma a la escena que se pretende crear. Estos fondos se van a caracterizar porque siempre le van a dar al visitante la sensación de que se encuentran a una gran distancia. 
     Por otra parte, su coste es menor que el uso de geometrías. Se distinguen dos tipos de fondos: 
Este tipo de fondo se caracteriza por definir un cielo y un suelo cuyos colores vienen dados mediante gradientes. Se realiza dentro de una esfera (Sphere).
PanoramaEste tipo de fondo se caracteriza porque define una serie de imágenes que rodean la escena. Se realiza dentro de una caja (Box).
Nodo Background: 
Incorpora un plano de suelo sombreado, texturas y cielo escénico. Sólo se emplea el primer nodo Background que se encuentre, debiéndose especificar en el archivo principal. 
 
Sintaxis: 
Backgroud{ 
    groundAngle     [ ] 
    groundColor     [ ] 
    skyAngle          [ ] 
    skyColor          [ ] 
    backUrl           "dirección_URL" 
    bottomURL     "dirección_URL" 
    frontUrl           "dirección_URL" 
    leftUrl              "dirección_URL" 
    rightUrl           "dirección_URL" 
    topUrl              "dirección_URL" 
}
     Todos estos campos no se utilizan simultaneamente, sino que su uso dependerá del tipo de fondo que se desee crear. 

Backdrop 
 
Sintaxis: 
Backgroud{ 
    groundAngle     [ ] 
    groundColor     [ ] 
    skyAngle          [ ] 
    skyColor          [ ] 
}

El fondo de tipo Backdrop se construye mediante una esfera incompleta (el suelo) inmersa dentro de otra esfera completa (el cielo), en donde el visitante se situa en el centro de ambas. 
El campo skyColor determina el color del cielo en los distintos ángulos de la esfera que lo contiene. 
El campo skyAngle es utilizado para indicar los ángulos (en radianes) en los que un nuevo color debe aparecer.
Los campos groundColor y groundAngle, son equivalentes a skyColor y skyAngle respectivamente, pero referidos a la esfera que representa el suelo. 
 
     
  


Texturas


La textura es la posibilidad que tenemos de envolver un objeto con una imágen determinada que se encuentra almacenada en un fichero, al cual accedemos mediante su URL. Los tipos de imagen que soporta VRML son:
JPEG
GIF
PNG
Pero en realidad puede tener también otros dos campos: texture (cuyo valor suele ser un nodo de tipo ImageTexture o de tipo MovieTexture) y textureTransform, con los que se define la textura de los objetos: 
 Shape {   
    appearance Appearance {   
         material ...   
         texture ImageTexture{...}   
        
textureTransform {...}   
    }   
    geometry ...   
}  

Nodo ImageTexture: 
 
Sintaxis: 
ImageTexture{  
    url            "direccion_URL"  
    repeatS     valor_lógico  
    repeatT    valor_lógico  
} 
     El campo url contiene la dirección URL del fichero gráfico que se va a usar como textura. Los formatos gráficos que admite VRML son jpeg,gig y png.  
 
 La coordenada horizontal se denominada S y la coordenada vertical T.
Nodo TextureTransform: 

     Este nodo define una transformación 2D aplicada a las coordenadas de textura. Esto afecta a la forma en que se aplica la textura a las superficies de los objetos. La transformación consiste (por orden) en un ajuste de la escala no uniforme sobre un punto central arbitrario, una rotación sobre ese mismo punto y una translación. Esto permite al usuario modificar el tamaño, orientación y posición de las texturas de los objetos. 
 
Sintaxis: 
TextureTransform{  
    center            Eje_S   Eje_T  
    rotation         ángulo 
    scale             Eje_S Eje_T  
    translation   Eje_S  Eje_T  
} 
 
     El campo center especifica un punto en el sistema de coordenadas de la textura (S,T) sobre el que los campos rotation y scale van a ser aplicados. 
El campo scale contiene dos factores de escala, uno para el eje S y otro para el eje T de la textura. Puede tomar cualquier valor real en ambos ejes.  
 El campo rotation determina la rotación en radianes de los ejes de coordenadas de la textura con respecto al punto marcado por el campo center, después de haber aplicado el campo scale
El campo translation provoca un desplazamiento del sistema de coordenadas de la textura.   
      
 

Rejillas de elevacion

Nodo ElevationGrid: 
 
    Este nodo crea una cuadrícula rectangular con alturas variables, lo que la hace especialmente útil para modelar el terreno y para la creación de otras superficies en el espacio. 
 
Sintaxis: 
ElevationGrid{ 
xDimension     número_de_columnas(Eje_X) 
xSpacing         valor_real 
zDimension     número_de_filas(Eje_Z) 
zSpacing         valor_real 
height   [altura1, altura2,...,altura(numcolum x numfilas) 
color  Color[...] 
colorPerVertext 
}
 
Los campos xDimension y zDimension especifican el número de puntos de la cuadrícula en las direcciones X y Z 
Los campos xSpacing y zSpacing determinan la distancia entre los puntos de la cuadrícula en el eje X y en el eje Z respectivamente. 
 
El campo height consiste en una ordenación de valores escalares que representan la altura de cada vértice sobre la cuadrícula. 
El campo colorPerVertex indica como se han de aplicar los colores: 
FALSE 
Los colores se aplican sobre las cuadrículas de la rejilla.
TRUE
Los colores se aplican sobre los vértices  de la rejilla

VRML

¿QUE ES VRML?

VRML son las siglas de Virtual Reality Modeling Language: lenguaje de modelado de realidad virtual. Aunque su nombre es similar al del HTML (Hyper Text Markup Language: lenguaje de marcas de hipertexto),  la diferencia fundamental entre ambos se encuentra  en la sustitución de la palabra "marca" por la de "modelado".

     Mientras que en el caso del HTML simplemente se "marca" o "etiqueta" el texto para formatearlo, en el caso del VRML se diseñan objetos tridimensionales y su comportamiento, lo cual requiere una mayor planificación e implica una mayor complejidad en el desarrollo de las páginas.   

Vamos a entender como realidad virtual un espacio en tres dimensiones desarrollado y simulado mediante ordenador,  donde los objetos son interactivos. En estos mundos virtuales el usuario podrá   adentrarse, eligiendo entre varias perspectivas, e interactuar con los objetos que allí se encuentran.Esta tecnología es cada vez más accesible para el usuario medio, debido a que los equipos a su alcance son cada vez más potentes y a que por fin se está desarrollando un completo estándar oficial.

Para crear estos mundos de realidad virtual se utilizan ficheros de texto, cuya extensión será siempre .wrl, los cuales pueden ser desarrollados mediante cualquier editor o procesador de textos. Además existe la posibilidad de utilizar programas de diseño gráfico, los cuales generan automáticamente ficheros en formato VRML.

Todo documento VRML está compuesto por los siguientes elementos:  
Cabecera
Nodos



Cabecera: 
La cabecera de todo fichero VRML es siempre la misma:
 #VRML V2.0 utf8
donde VRML V2.0 indica el estándar empleado y utf8 autoriza el uso de caracteres internacionales.
 
Es importante resaltar que no debe existir ningún espacio en blanco entre el símbolo "#" y la palabra "VRML".

 Comentarios: 
En VRML un comentario se escribe en una sola línea, la cual comienza con el símbolo #. Se pueden tener tantas líneas de comentarios como se desee.

Nodos: 
     Un nodo es la estructura mínima indivisible de un fichero VRML y tiene como misión la de definir las características de un objeto o bien las relaciones entre distintos objetos. La mayoría de los nodos pueden repetirse tantas veces como sea necesario en una escena, salvo una serie de nodos especiales como los que definen la niebla o la panorámica del mundo virtual que aparecen un sola vez.  
Los nodos a su vez contienen campos que describen propiedades. Todo campo tiene un tipo determinado y no se puede inicializar con valores de otro tipo. De este modo, cada tipo de nodo tiene una serie de valores predeterminados para todos sus campos, de forma que cuando lo utilicemos en una escena sólo debemos indicar aquellos campos que se quieran modificar