viernes, 20 de abril de 2012

FORMAS COMPLEJAS

 Se ha visto en temas anteriores como mediante la superposición y unión de diferentes nodos geométricos básicos es posible construir objetos más complejos. Sin embargo, si la única manera de generar formas complejas fuese ésta, la construcción de mundos virtuales será bastante ardua. Es por ello por lo que aparecen una serie de nuevos nodos, los cuales, además de facilitar el diseño (al tener más control sobre ellos y al ser más flexibles), generan mundos VRML de una forma más eficiente. 


     Lo más recomendable a la hora de diseñar un objeto es describir su geometría en dos pasos aislados:
ESPECIFICACIÓN DE LAS COORDENADAS.
CREACIÓN DE LA FORMA GEOMÉTRICA.



Especificación de las coordenadas:  

     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. 
Nodo Coordinate:

Sintaxis: 
    Coordinate {          
    point [   Eje_x  Eje_Y  Eje_Z,  
    Eje_x  Eje_Y  Eje_Z, 
    Eje_x  Eje_Y  Eje_Z          ]      }
     El campo point puede poseer varios puntos, cuyas coordenadas están separadas por comas. 
 Ejemplo: 
    Coordinate {point [12.0 11.0 17.1, 20.5 13.8 5.3, 14.0 6.1 22.9      ] }


Creación de la forma geométrica:
     Una vez definidos los puntos que forman el esqueleto del objeto, se han de conectar. Existen tres maneras de unir estos puntos, cada una de las cuales está asociada a un nodo diferente:







Nodo PointSet

Nodo IndexedLineSet

Nodo IndexedFaceSet
      Estos tres nodos poseen un campo denominado coord que acepta como valor un nodo Coordinate.

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





       El campo coord  toma como valor un nodo de tipo Coordinate, el cual define los puntos que se desean representar.

     El campo color sirve para definir el color de cada uno de los puntos. Este campo toma  como valor un nodo Color, que a su vez contiene un campo de tipocolor de nuevo. Este último campo describe una lista de colores RGB, de forma que el primer color corresponde al primer punto descrito por el nodoCoordinate del campo coord ; el segundo color corresponde al segundo punto y así sucesivamente.

Ejemplo: 
    PointSet { coord Coordinate { point [    12.0 11.0 17.1,  #1º punto20.5 13.8 5.3,   #2º punto14.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 verde1.0 1.0 0.0  # 3º punto amarillo      ] } }
      Si se incluyese este código, tal como está, en un documento VRML, no podríamos ver ninguno de estos puntos, ya que como se ha visto anteriormente, para crear un objeto visible se debe utilizar el nodo Shape.

     Obsérvese que se ha prescindido del campo appearance del nodo Shape  ya que no es necesario, pues los puntos no van a tener la apariencia por defecto, sino la que se determina en el campo color

Ejemplo: 
    #VRML V2.0 utf8Shape { 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    ]   }  }  }