lunes, 23 de abril de 2012

EXTRUSION


En líneas generales, una forma extruida se obtiene de la siguiente manera:
  • En el plano XZ (horizontal) se define, mediante una serie de puntos, un polígono cerrado: la sección transversal o crossSection. Esta sección es, por tanto, plana.
  • Mediante otra serie de puntos, se define un recorrido en el espacio tridimensional: la espina dorsal o spine.
  • El objeto extruido se obtiene desplazando la sección transversal a lo largo de la espina dorsal. Durante este desplazamiento, la sección transversal puede permanecer invariable, o bien se pueden ir modificando tanto su escala (tamaño), como su orientación.

Extrusion {
       crossSection [

                              X Y
       ]
       spine [
                     X Y Z,
                        …
       ]
       solid FALSE
   }

Se pueden observar los campos:
  • crossSection, cuyo argumento es una serie de puntos que definen la sección transversal. Nótese que estos puntos están definidos por dos coordenadas, y no por tres, que es lo habitual. Veremos a continuación el motivo de esto.

  • spine, cuyo argumento es otra serie de puntos que definen la espina dorsal del objeto extruido. Cada uno de estos puntos está definido por tres coordenadas, como no podía ser menos, puesto que la espina dorsal es un recorrido en el espacio tridimensional.

  • solid, tiene dos opciones: TRUE (la opción por defecto) con la que se ven sólo un lado de las caras. FALSE: se verán ambos lados.




NODO INDEXEDLINESET


Permite unir los diferentes puntos especificados en su campo coord mediante líneas poligonales.


Sintaxis:

IndexedLineSet{ 
    coord Coordinate {
           point [ . . . ]
     }
    coordIndex  [...] 
    colorPerVertex     valor_lógico
    color Color {
           color [ . . . ]
     }
    colorIndex   [...] 

 }





NODO POINTSET


Representa un conjunto de puntos situados en las coordenadas indicadas dentro del sistema de coordenadas del nodo padre. 
  

Sintaxis: 
PointSet { 
       coord Coordinate { 
           point [
                      X Y Z, #PUNTO 1
                     X Y Z, #PUNTO 2
                     X Y Z #PUNTO 3
] 
       } 
       color Color { 
           color [
                        COLOR_RGB #PUNTO1,
                        COLOR_RGB #PUNTO 2,
                       COLOR_RGB #PUNTO3 
] 
       } 
   }





AMPLIA LA IMAGEN PARA PODER VER LOS PUNTOS

NODO COORDINATE


En este paso se ha de indicar mediante el nodo Coordinate la posición de los puntos  que se van a utilizar para construir el objeto. Estos puntos no son visibles en el escenario virtual.  

Sintaxis
Coordinate { 
        point [ 
                   X Y Z,
                   X Y Z,
                   X Y Z        ] 
    }


El campo point puede poseer varios puntos, cuyas coordenadas están separadas por comas.  

NODO VIEWPOINT


El nodo Viewpoint sirve para definir desde qué punto se visualizará el mundo, esto para evitar usar tanto los botones de navegación, gastando tiempo innecesario.
Para hacer esto lo único que debemos hacer es escribir arriba de todo el código (exceptuando la cabecera) lo siguiente:

Viewpoint {
              position   X Y Z
              orientation X Y Z
              description "view all"
          }

Sustituyendo las negritas por los valores que se deseen.

NODO ANCHOR


Este nodo permite que dando un clic a un objeto, éste te lleve a otro documento de cualquier extensión.
Para hacer que un objeto nos enlace a otro documento o fichero lo que debemos hacer es lo siguiente:
     ♥   Arriba de donde tenemos el código del objeto que queremos usar como un enlace (incluyendo el Translate) se escribe:

Anchor{
children[

      ♥    Al terminar el código de la figura, procederemos a poner:

]
url "NOMBRE_DEL_ARCHIVO_SIN_ESPACIOS.EXTENSION_DEL_ARCHIVO"
}






NODO ELEVATION GRID


Este nodo crea una cuadrícula rectangular con alturas variables, lo que la hace especialmente útil para modelar el terreno o un relieve y para la creación de otras superficies en el espacio. 
Sintaxis:
Shape{
                geometry ElevationGrid{
                xDimension     Número de columnas en X
                xSpacing          Espaciado entre columnas en X
                zDimension     Número de filas en Z
                zSpacing           Espaciado entre filas en z
height   [Puntos separados por comas DEBEN DE SER EL TOTAL           ENTRE LA MULTIPLICACIÓN DEL VALOR DE xDimension y zDimension
solid TRUE ó FALSE
                    }

**Si se desea se puede utilizar el nodo Transform

Ejemplo (utilizar botones de navegación):

#VRML V2.0 utf8


Shape {
            appearance Appearance {
              texture ImageTexture{url ["blanco.jpg"]}
                                  }
                        geometry ElevationGrid {
                                   xDimension 11
                                   zDimension 5
                                   xSpacing 5
                                   solid FALSE
                                   height [
                                               5.0, 1.0, 8.0, 5.7, 6.0,
                                               7.2, 12.0, 13.0,14.2,2,
                                       2.1, .5, 3, 2.1, 3.1,
                                       1.1, 2.1, 1.5, .7, .85
                                       5.2, 2.1, .35, .22, 1.5,
                                               2.7, 3.2, 2.1, 8.6, 7.4,
                                               1.111, 3.1, 4.1, 5.2, 3.2,
                                       2.5, 3.25, 7.4, 2.58,.005,
                                       3.22, 2.31, 5.5, 4.4, 6.6,
                                               15.25, 2.7, 4.69, 1.7, 1.4,
                                               2.3, 6.8, 3.2, 4.2, 6.99
                                   ]
                                   }
                        }

                        Transform {
                                   translation      22.5 0 0
                                   rotation 0 0 0 0
                                   children [
                                  
                        Shape {
                                                appearance    Appearance {
                        texture ImageTexture{url ["pasto.jpg"]}
                                               }
                                                          geometry Box {
                                                                                       size   200 1 30
                                                                                                             }
                                                                                                 }
                                                                                     ]
                                                                          }

Transform {
            translation 17 10 -10
    rotation 0 0 0 0    
            children [
Shape{
  appearance Appearance {
          texture ImageTexture{url ["luna.jpg"]}

    }
      geometry Sphere {
      radius 12
    }
}

]
}