sábado, 18 de mayo de 2013


VRML Beans 2.0




VRML Beans 2.0 permite a cualquiera crear mundos de realidad virtual para sus sitios web. Los objetos se dibujan en el paisaje 2-D, y Frijoles VRML convierte el diseño en un mundo virtual 3-D. Los usuarios pueden seleccionar el color del cielo, la textura del suelo, y la música de fondo para sus escenas. Además, los archivos de imágenes ahora pueden ser añadidos a mundos ya sea como objetos planos o como sprites. VRML Beans 2.0 ofrece la magia del 3-D a cualquier persona, independientemente de su capacidad o presupuesto.

VRML Beans 2.0 permite a cualquiera crear mundos virtuales en 3D en cuestión de minutos. Capacidades de autoría de VRML Beans 2.0 incluyen: 

20 + prediseñados objetos 3-D 

VRML Beans 2.0 cuenta con varios objetos que pueden colocarse en escenas VRML (edificios, casas, coches, árboles, etc ..) 

La capacidad de dibujar paredes, pisos, techos. 

Los usuarios pueden utilizar las paredes, pisos y techos para crear piezas interiores de sus mundos. 

Una interfaz de autoría Redimensionable .

A diferencia de la versión 1.0, escalas interfaz VRML Beans 2.0 's a cualquier resolución de pantalla. 

Apoyo a diferentes superficies de tierra y cielo. 

Los usuarios pueden seleccionar distintos colores para el cielo de la escena VRML. Además, la tierra del mundo se puede ajustar a la hierba, tierra o nieve. 

Importion de imágenes 2-D en escenas. 

Los usuarios pueden insertar imágenes (GIF y JPEG) en sus mundos. Esta característica es ideal para 3-D de las galerías de arte y catálogos de productos. GIF transparentes se pueden utilizar como sprites. 

El apoyo a la música de fondo. 

La música de fondo se puede especificar para las escenas creadas en VRML Beans 2.0. Formatos de archivo soportados son *. Wav, *. Mediados y *. Mp3. 

Compatibilidad 
Mundos creados en Frijoles VRML 2.0 son compatibles con Cosmo Player y Cortona VRML Client.


Nodos

 appearance
Las formas (Shapes) son los elementos que nos permiten visualizar los objetos en los mundos VRML. 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)
 
     Mediante la combinación de estas formas geométricas básicas se pueden obtener otras formas de mayor complejidad. 
Color y transparencia con el nodo Material
Como el nodo Material está vacío, se obtiene la apariencia por defecto:

   Material { }
pero puede tener diversos campos, con los que se determinan el color y grado de transparencia. Los má importantes son:

   Material {
       diffuseColor  ...
       emissiveColor ...
       transparency  ...
   }
  • Con el campo diffuseColor se determina el color externo (o difuso) del objeto.
  • Con el campo emissiveColor se determina el color interno (o emisivo), para los objetos iluminados desde dentro.
  • Con el campo transparency se determina el grado de transparencia.
Veámoslos separadamente:
Nodo Texture

La textura es la posibilidad que tenemos de envolver un objeto con:
  • una imagen existente, usando el campo ImageTexture
  • una película, usando el campo MovieTexture
  • una imagen creada por nosotros pixel a pixel, usando el campo PixelTexture
Se van a ver los dos primeros (ImageTexture y MovieTexture) en este capítulo, y el tercero (PixelTexture) en el capítulo siguiente.
Textura con ImageTexture
Tomemos como ejemplo la imagen de la derecha: monalisa.jpg
Vamos a envolver con ella los objetos primitivos (caja, cono, cilindro y esfera).
Para ello, se hace uso del nodo ImageTexture, como valor del campo texture, de la siguiente manera:


   Shape {
       appearance Appearance {
            texture ImageTexture {
                url ["monalisa.jpg"]
            }
       }
       geometry ...
   }


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 



Materiales 



Para la mayoría de los objetos del color viene de un nodo de material. El color dominante es en el campo diffuseColor. El color se especifica en formato RGB con cada componente entre 0 1nd 1. (0,0,0) es de color negro y (1,1,1) es de color blanco. 

Por cero y uno objetos tridimensionales tales como puntos, líneas y curvas, el color está determinado por el campo emissiveColor. 

El campo ambientIntensity establece la cantidad de luz ambiental, y tiene el efecto de iluminar u oscurecer todos los objetos, independientemente de su posición. 











El campo emissiveColor especifica el color de la luz que es emitida por el objeto. En este ejemplo, la diffuseColor es de color amarillo y la emissiveColor es de color rojo. 


El campo de la transparencia contiene un número entre 0 y 1. Si la transparencia es 0, el objeto es completamente opaca, mientras que si la transparencia es 1, el objeto es invisible. 

specularColor:La constante utilizada para acceder al campo specularColor de un nodo de material. 
En X3D/VRML, este campo especifica el color especular material. Los colores se especifican mediante valores hexadecimales (0xRRGGBB). Los campos specularColor brillo y determinar los reflejos especulares (por ejemplo, los puntos brillantes en una manzana). Cuando el ángulo de la luz a la superficie está cerca del ángulo de la superficie para el espectador, se añade el specularColor a los cálculos de color difuso y ambiente. Los valores más bajos producen shininess suavemente brilla intensamente, mientras que los valores más altos producen más nítidas, destaca más pequeños. 

Este campo es de X3D/VRML-type SFColor.

shininess :La constante utilizada para acceder al campo de brillo de un nodo de material.
La constante utilizada para acceder al campo de brillo de un nodo de material. 
En X3D/VRML, este campo especifica el brillo de material, en el rango de 0 a 1. Brillo especifica un material especular exponente dispersión. 


           Medidas por defecto de las Figuras Geometricas

    Existen diversas formas predefinidas en VRML, es decir, para crear un cubo no tenemos que crear todas las caras para construir el cubo (aunque sí podríamos hacerlo así), sino que VRML ya tiene definidos algunos nodos que permiten crear cubos, conos, esferas, etc. de forma más sencilla.
               Para crear uno de estos objetos predefinidos incluiremos en el campo geometry de Shape el nombre del objeto predefinido, por ejemplo:
                    Shape{
                           geometry Box { #opcionalmente incluiremos aquí los campos con sus valores}
                    }
               Estas formas (nodos) predefinidos son:
          Box
 Box es un objeto cubo. Si no le indicamos nada, por defecto es un cubo de 8 metros cúbicos (2 m.x2 m.x2 m.). Para modificar el tamaño de este cubo existe el campo size, que contiene tres valores numéricos: tamaño en el eje x, tamaño en el eje y, tamaño en el eje z. Todos ellos pueden ser valores decimales.
         Si le aplicamos una textura, la estaremos aplicando a cada cara.



Cylinder
 Cylinder es un cilindro. Por defecto toma los valores: 1 m. de radio, centrado en el origen, con altura 2. Los campos que contiene este nodo son
·        radius: especifica el radio del cilindro.
·        height: altura del cilindro.
·        side/top/bottom: campos que toman valores booleanos. Si están a TRUE quiere decir que se muestran el lado/parte alta/parte baja del cilindro. Si están a false quiere indicar que no se muestre el lado/tapa alta/tapa baja del cilindro (por defecto están a TRUE).

Cone
   Cone es un cono. Por defecto toma los valores: radio 1 m., altura 2 m. y centrado en el origen de coordenadas (de tal forma que mitad del cono estará en la parte negativa del eje y, y la otra parte en la parte positiva de ese eje).
               Los campos que contiene son:
·        bottomRadius: valor del radio en la base del cono.
·        height: altura del cono.
·        side/bottom: (igual que el cilindro –no tiene top porque la parte alta es un punto).





 Sphere

 Sphere es una esfera. Toma por defecto radio 1. Este nodo tan sólo contiene un campo que es radius, en el que se indica el valor del radio de la esfera. Si le agregamos una textura a la esfera, lo que hace es envolver la textura a toda la esfera, estrechándose en los polos.





Polígonos

Figura geométrica plana, limitada por una poligonal cerrada que no se corta a si misma.
Clasificación de los Polígonos
Los polígonos se clasifican básicamente en:

Polígono Regular
Polígono en el cual todos sus lados son de igual longitud, y todos sus vértices están circunscritos en una circunferencia. Se clasifican en:
  • triángulo equilátero: polígono regular de 3 lados,
  • cuadrado: polígono regular de 4 lados,
  • pentágono regular: polígono regular de 5,
  • hexágono regular: polígono regular de 6 lados,
  • heptágono regular: polígono regular de 7 lados,
  • octágono regular: polígono regular de 8 lados,... y así sucesivamente.
polígono regular

Polígono Irregular
Polígono en el cual sus lados no son de igual longitud y/o sus vértices no están contenidos en una circunferencia. De acuerdo al número de sus lados, se denominan:
  • triángulo: polígono de 3 lados,
  • cuadrilátero: polígono de 4 lados,
  • pentágono: polígono de 5 lados,
  • hexágono: polígono de 6 lados,
  • heptágono: polígono de 7 lados,
  • octágono: polígono de 8 lados,... y así sucesivamente.
poligono irregular

Triángulo
Polígono de tres lados. De acuerdo a la magnitud de sus ángulos, los triángulos se clasifican en:
  • triángulo isósceles: 2 ángulos iguales,
  • triángulo escaleno: 3 ángulos diferentes,
  • triángulo rectángulo: 1 ángulo recto,
  • triángulo obtusángulo: 1 ángulo obtuso,
  • triángulo acutángulo: 3 ángulos agudos.
triángulo: polígono de 3 lados

Cuadrilátero
Polígono de 4 lados. Se clasifican en:
  • paralelogramo: cuadrilátero en el que los lados opuestos son paralelos, se denominan a su vez:
    • rectángulo: paralelogramo en el cual los cuatro ángulos son rectos, pero los lados adyacentes no son de igual longitud,
    • rombo: paralelogramo que no tiene ángulos rectos, pero sus lados son de igual longitud,
    • romboide: paralelogramo que no tiene ángulos rectos y sus lados adyacentes no son de igual longitud,
  • trapecio: cuadrilátero que tiene solo dos lados paralelos, se definen a su vez como:
    • trapecio rectángulo: trapecio que tiene dos ángulos rectos,
    • trapecio isósceles: trapecio en el que sus lados no paralelos son de igual longitud,
  • trapezoide: cuadrilátero que no tiene lados paralelos.
cuadrilátero: polígono de 4 lados 


 Nodo Billboard


El nodo Billboard permite crear un grupo con un sistema de coordenadas especiales, ya que a través del campo axisOfRotation (eje de rotación) indicamos el eje sobre el que a de girar el objeto, de forma que, siempre esté de cara al espectador.
 Todos los hijos agrupados mediante este nodo serán visualizados.  



Sintaxis: 
Billboard{   


   axisOfRotation  Eje_X  Eje_Y  Eje_Z   

   children[...]   

  

     Al igual que para el campo rotate del nodo transform, únicamente uno de los ejes puede tomar como valor la unidad, permaneciendo el resto a cero:  


  


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
 

  


  

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:   


 

 Shape {  


      appearance Appearance {  

           material Material { }  

      }  

      geometry Cylinder {  
           height 2.0  
           radius 0.5  
      }  
 }

 
(Este es el código de un cilindro con la apariencia por defecto, de 2 unidades de alto y una base de radio 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  
      }  
 }

 
     Entonces, cada vez que se quiera usar este nodo en otra parte del documento, basta con poner lo siguiente:  
 USE ColumnaRepetida
 
     En el ejemplo anterior de la caja y el cono, aparece el nodo Appearance repetido. 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:  
 #VRML V2.0 utf8  


 #Ejemplo de agrupación de una caja y un cono,  

 #haciendo uso de los comandos DEF y USE. 

 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  
          }   
       }  
    ]  
 }

 
     En este caso concreto, la simplificación no ha sido muy grande (sólo un par de líneas menos de código), pero ha servido para ilustrar el concepto.