domingo, 22 de abril de 2012

VRML 2.0

También se pueden  crear  figuras  a  partir de la  unión de  puntos, para  esto se utiliza el comando de pointset, el de IndexedLineSet, IndexedFaceSet, ElevationGrid, Extrusion, Coord Cordinate. Cada uno de  estos  comandos  nos  ayuda  a formar  figuras complejas como prismas  por ejemplo, entre  otras  cosas.

Primero  empezaremos explicando pointset: 

Este nodo nos permite  especificar  un  conjunto de  puntos 3D en  el  sistema de coordenadas locales, con colores asociados a cada letra , pero no tiene control sobre el tamaño de los puntos, es decir, es  el mismo tamaño para todo  el  número de puntos con los  que  se  desea trabajar.

SINTAXIS  PARA POINTSET
 #VRML V2.0 utf8
 #PointSet example

 Shape {
  geometry PointSet {
   coord Coordinate {
                     point [
     -1.0 -1.0 0.0,
     1.0 1.0 0.0,
     0.0 0.0 0.0,
                     ]
                 }
                 color Color {
                     color [
                         1.0 0.0 0.0,
     0.0 1.0 0.0,
                         0.0 0.0 1.0,
                     ]
                 }
             }
         } 
 
 IndexedLineSet
 En este nodo  existen dos tipos el IndexedLineSet, y IndexedFaceSet,
 primero el IndexedLineSet explicaré, este nodo 
nos  permite dibujar  las  líneas  rectas  en  el espacio 
3D entre los vertices especificados en el campo Coord.
 La sintaxis de dicho nodo es:  
IndexedLineSet { 
  de color NULL
  coord NULL
  ColorIndex []
  coordIndex []
 } 
por ejemplo: 
 
 #VRML V2.0 utf8
 #IndexedLineSet example
 Shape {
  geometry IndexedLineSet {
   coord Coordinate {
                     point [
     -1.0 -1.0 0.0, #vertex 0
     1.0 1.0 0.0, #vertex 1
     1.0 -1.0 0.0, #vertex 2
                     ]
                 }
   color Color {
                     color [
                         1.0 0.0 0.0, #red
     0.0 1.0 0.0, #green
                         0.0 0.0 1.0, #blue
                     ]
             }
   coordIndex [
    #red line
     0, 1, -1,
    #green line
     1, 2, -1,
    #blue line
     2, 0, -1
    ]
   colorIndex [
    0, 1, 2
    ]
   
  }
 }
 
IndexedFaceSet 
El nodo IndexedFaceSet, este nodo nos  permite dibujar los  rostros
dentro del perimetro de puntos, dicho nodo representa una forma 3D 
formado por la construccion de caras(polígonos)de los vétices que 
figuran dentro del campo coord.
Su sintaxis es:
 
IndexedFaceSet {
          coord Coordinate {
              point [.  .  .  ]
          }
          coordIndex [
              1, 0, 3, -1,.  .  .
          ]
      } 
dicha sintaxis se utilza de la siguiente manera:
 #VRML V2.0 utf8
 #IndexedFaceSet example: a pyramid
 Shape {
  appearance Appearance{
   material Material { 
    diffuseColor 1 0 0 #simple red
    }
   }
  geometry IndexedFaceSet {
   coord Coordinate {
                     point [
     # bottom 
     -1.0 -1.0 1.0, #vertex 0
     1.0 -1.0 1.0, #vertex 1
     1.0 -1.0 -1.0, #vertex 2
     -1.0 -1.0 -1.0, #vertex 3
     # top
     0.0 1.0 0.0 #vertex 4
                     ]
                 }
   coordIndex [
    #bottom square
     0, 3, 2, 1, 0, -1,
    #side1
     0, 1, 4, -1,
    #side2
     1, 2, 4, -1,
    #side3
     2, 3, 4, -1,
    #side4
     3, 0, 4, -1,
    ]
   
  }
 }  El nodo coodinate y coordIndex lo explicaremos mas adelante.
 
 ElevationGrid
 Este nodo en VRML nos  permite crear rejillas o dicho de otra manera 
nos permite crear elevaciones,proporciona una forma compacta de representar
a base de que varia en altura sobre una superficie. El nodo especifica 
una rejilla rectangular y la altura del suelo, en cada punto de  la  rejilla
para poder utilizar el nodo ElevationGrid usamos la  siguiente sintaxis:
 ElevationGrid {
     xDimension 3               Donde x, sus puntos se representan de manera horizontal
     xSpacing 1,0               dependiendo de la dimension que se le en xDimension, es decir,             
     zDimension 2               si xDimension 3 en x deben ser tres puntos de la  rejilla
     zSpacing 1,0               representado graficamente asi:
     height [ 
                                  . . . y zDimension son los puntos representados pero de manera  horizontal
         0,0, -0,5, 0,0,        y de  igual  manera  depende del valor k le des, es decir si zDimension=2
         0,2, 4,0, 0,0          debes poner dos puntos de hacia abajo, representado graficamente así:
     ]                          .  
 }                              .
 
                                quedando finalmente asi:
                                1.0,0.0,4.5,    
                                5.3,5.7,2.3,
Es importante que después de cada punto se ponga una coma ya que si no no funcionara la rejilla
 la sintaxis genral quedara asi:
 
 #VRML V2.0 utf8
 #ElevationGrid example:
 Transform {
 translation -9 -2.0 -10.0
 children [
  Shape {
   appearance Appearance{
    material Material { 
     diffuseColor 1 0 0 #simple red
     }
    }
   geometry ElevationGrid {
   xDimension 9
   zDimension 6
   xSpacing 2.1
   zSpacing 2
   height [
    0, 0, 0.2, 0, 0, 0, 0, 0, 0, # row 0
    0, 0.8, 0.4, 0.2, -0.2, 0.2, 0.4, 0.2, 0, # row 1
    0, 1, 0.6, 0.4, 0.2, 0.4, 0.2, -0.2, 0, # row 2
    0, 0.8, 0, 0.4, -0.2, 0.2, -0.4, 0.1, 0, # row 3
    0, 0.2, -0.4, -0.2, 0, 0.4, 0.2, 0.4, 0, # row 4
    0, 0, 0, 0, 0, 0, 0, 0, 0 # row 5
    ]
   }
  }
   ]
 } 
 
EXTRUSION 
Este nodo nos sirve para darle un volumen a  nuestra figura  a crear es decir mediante este nodo podemos inclusive crear prismas de manera mas rapida
el nodo extrusion es una elevacion, este nodo tiene  la  capacidad de crear geometría mediante la definición de una sección en 2D
y una  columna 3DLos caminos sección transversal puede ser escalado y rotado en cada punto de la columna vertebral del programa.
Debe especificar cada uno de ellos como una serie de vértices que se conectan en el orden.
Por ejemplo para producir una forma de cilinro o de otro tupo con una curva de sección transversal co un nodo de extrusion,tiene
que especificar muchos puntos espaciados juntos para aproximarse a una curva.
Su sintaxis es:
 Extrusión {
     crossSection [
         1,0 0,0,.  .  .
     ]
     la columna vertebral [
         10,0 0,0 0,0,.  .  .
     ]
 } 
 
POr ejemplo:
 
 
 #VRML V2.0 utf8
 #extrusion example
 Shape {
   appearance Appearance { material Material { } }
   geometry Extrusion {
     crossSection [ 
       1 0, .71 -.71,
       0 -1, -.71 -.71,
      -1 0, -.71 .71,
       0 1, .71 .71, 1 0
     ]
     spine [ -2 0 0, -2 0 -4, 2 0 -4, 2 0 0]
     scale [ 1 1 , 0.5 0.5 , 0.5 0.5 , 1 1 ]
     beginCap FALSE
     endCap FALSE
     solid FALSE
   }
 } 
 
 COORD COORDINATE
 Este nodo nos permite definir la posición de los puntos que se van a utilizar para construir el objeto,
 estos puntos no son vsbles en el mundo virtual.
su sintaxis es:
          Coordinate { 
                  point [ 
                       Eje_x  Eje_Y  Eje_Z, 
                       Eje_x  Eje_Y  Eje_Z, 
                       ... 
                       Eje_x  Eje_Y  Eje_Z 
                  ] 
              }
           
           Donde x,y,z son los campos en los que se le asignaran los puntos o las  coordenadas, por ejemplo:
           
                Coordinate { 
                        point [ 
                             12.0 11.0 17.1, 
                             20.5 13.8 5.3, 
                             14.0 6.1 22.9 
                        ] 
                    }
                  
                Dado ya un ejemplo complejo, es decir, ya con toda la sintaxis que ya conocemos es:
                 
                #VRML V2.0 utf8
                               #Ejemplo de un grupo de tres puntos con colores

                               Shape {
                                    geometry PointSet {
                                       coord Coordinate {
                                           point [ 
                                               12.0 11.0 17.1,  1º punto
                                               20.5 13.8 5.3,   2º punto
                                               14.0 6.1 22.9    3º punto 
                                           ]
                                        }
                                        color Color {
                                            color [
                                                1.0 0.0 0.0, 1º punto rojo
                                                0.0 1.0 1.0, 2º punto verde
                                                1.0 1.0 0.0  3º punto amarillo
                                           ]
                                        }
                                    }
                               }

                 Bueno para concluir, estoa sido nuestro segundo departamental de la  matria de  VRML(Entornos Virtuales)
                En este tutorial tratamos de demostrar los diferentes temas con los que trabajamos, lo cual  nos  lleva a ver otras maneras de hacer figuras que pueden o no ser solidos pero esta vez mediante puntos, y entre otros códigos que nos permiten por ejemplo darle color a cada cara de nuestra figura, o ubicar puntos que nos permiten unir linas.
                Claro esta al momento de hacer laws figuras mediante estos nuevos nodos el programa o código se extenderá muxo más debido a que se debe identificar cada acción porque ya la figura no es solo una sino que se forma otros codigos como por ejemplo poinset y points junto con coorde¿inate. Tan extenso puede ser dicho código que puede llegar a abarcar hasta más de 4000 líneas de código.