domingo, 22 de abril de 2012

CORTONA-3D

DESCARGA

VRML-VIDEO

CORTONA-3D















OBJETIVOS


·        El VRML esta diseñado para ser utilizado sobre Internet, Intranets o como clientes locales.
·        Los formatos VRML están diseñados para integrar  gráficos tridimensionales y multimedia.
·        El VRML está pensado para diversidad de aplicaciones en áreas como ingeniería, simulación, entretenimiento, educación etc.

CARACTERISTICAS DEL VRML
EL VRML fue concebido  bajo las siguientes características de diseño:
·        Originalidad: los programas VRML son creados, editados y mantenidos de manera muy sencilla mediante la manipulación directa de los formatos fuente. presentando además la posibilidad de importación de objeto s 3D de otros formatos industriales.
·        Integrabilidad: los programas VRML permiten usar diferentes objetos 3D formando escenas compuestas  lo que a su vez permite la reusabilidad de ambientes.
·        Extensibilidad: los programas VRML ofrecen la posibilidad de adicionar nuevos elementos aun no explícitos en VRML.
·        Implementabilidad: los programas VRML son fácilmente implementados bajo un amplio rango de sistemas.
·        Rendimiento: los elementos VRML son diseñados para brindar optimo rendimiento bajo una amplia variedad de plataformas.
·        Escalabilidad: Los elementos VRML son diseñados para brindar flexibilidad en las composiciones futuras.
·        Potencial multi-usuario: facilita la implementación de ambientes multiusuario.
·        Ortogonalidad:  Los elementos de VRML son independientes uno de otro y cualquier dependencia es estructurada y bien definida.
·        Estructuración: Los elementos VRML tiene bien definido sus interfaces por cuanto el uso de múltiples elementos no tiene efectos impredecible.

ALCANCES Y LIMITACIONES
Una escena VRML es una integración básica de gráficos 3D y multimedia los objetos integrados en una escena pueden ser modificados en momento de ejecución a través de diferentes mecanismos. VRML compone, encapsula y da extensibilidad a una escena.
VRML no define dispositivos físicos u otros conceptos afines como resolución de pantalla o dispositivos de entrada, VRML interpreta un amplio rango de posibilidades sin particularizar sobre el uso de ciertos elementos por ejemplo VRML no asume la existencia de mouse en 2D.

ARCHIVOS VRML.
Un archivo VRML puede contener:
a.       Una escena compuesta de objetos
b.      un conjunto de posibilidades multimedia
c.       encadenamiento a otros archivos y aplicaciones.
d.      mecanismos de modificación del comportamiento de los objetos.

VRML

VRML (sigla del inglés Virtual Reality Modeling Language. "Lenguaje para Modelado de Realidad Virtual") - formato de archivo normalizado que tiene como objetivo la representación de escenas u objetos interactivos tridimensionales; diseñado particularmente para su empleo en la web. Se usa por medio de comandos en inglés, los cuales agregan y determinan las características.

El lenguaje VRML posibilita la descripción de una escena compuesta por objetos 3D a partir de prototipos basados en formas geométricas básicas o de estructuras en las que se especifican los vértices y las aristas de cada polígono tridimensional y el color de su superficie. VRML permite también definir objetos 3D multimedia, a los cuales se puede asociar un enlace de manera que el usuario pueda acceder a una página web, imágenes, vídeos u otro fichero VRML de Internet cada vez que haga click en el componente gráfico en cuestión.
El Consorcio Web3D fue creado para desarrollar este formato. Su primera especificación fue publicada en 1995; la versión actual funcionalmente completa es la VRML 97 (ISO/IEC DIS 14772-1).
VRML, es la base en la que se ha desarrollado X3D - Extensible 3D.

VRML-INTRODUCCION

VRML
  

FORMAS PRIMITIVAS

     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.


Nodo primitivo Box:  

 
Sintaxis:
    Box{
    size {anchura, altura, profundidad  }
    } 
Ejemplo: 
    Box{
     size {2.0 0.5 3.0} 
      Las dimensiones que se manejan en VRML son dimensiones abstractas pero lo normal es suponer que la unidad de medida es el metro. De esta forma, en el ejemplo anterior estaríamos definiendo una caja de 2 metros de ancho, 0.5 metros de alto y 3 metros de profundidad.  



Nodo primitivo Cone:  

Sintaxis:
    Cone{
     height               altura
    bottomRadius   radio_de_la_base
    bottom               valor_lógico
     side                    valor_lógico
     Mediante los campos bottom y side se indica si se desea dibujar la base y la superfice lateral respectivamente. Por defecto estos campos toman el valor TRUE, lo cual indica que se dibuja el cono completo.  
 Ejemplo: 

    Cone{
     height  3.0
    bottomRadius   .75


Nodo primitivo Cylinder:  
 
Sintaxis:
    Cylinder{
     height                altura
     radius                radio 
     bottom               valor_lógico
     side                    valor_lógico 
    top                     valor_lógico 
  
     Mediante los campos bottom, side y top se indica si se desea dibujar la base inferior,la superfice lateral y la base superior del cilindro. Por defecto estos campos toman el valor TRUE, lo cual indica que se dibuja el cilindro completo.  
 Ejemplo:
    Cylinder{
     height 2.0
    radius 1.5 


Nodo primitivo Sphere: 
 
Sintaxis:
    Sphere{ 
     radius radio
 
Ejemplo:  
    Sphere{ 
     radius 1.0 
     
 
      Sin embargo, la definición de un nodo primitivo implica la definición de un objeto, pero no su visualización. Es por ello por lo que se han de englobar dentro de un nodo Shape, el cual determina la apariencia de estos objetos. 




Ejemplo: 

#VRML V2.0 utf8


Shape{
appearance Appearance{
material Material {}
}
geometry Cylinder{
height 2.0
radius 1.5
}

NODO TEXTO

En los mundos virtuales será a menudo necesario utilizar textos para guiar al visitante Para ello existe un nodo específico, el nodo Text. Una de las principales características de los textos es que son planos, es decir, no tienen profundidad.  
 
Nodo Text:  
  
     Como en cualquier procesador de textos, se nos permitirá indicar el tipo de fuente, su estilo, su tamaño, el espaciado entre caracteres, justificación de los parrafos, etc.  Sintaxis:
        Text {          string ["linea_texto"
    "linea_texto 2", 
    .
    .
    .
     "linea_texto N",] 
    fontStyle FontStyle {  
                                                family "Nombre_Fuente",                                              style "Estilo_Fuente",                                              size Tamaño_Fuente                                              spacing espaciado_entre_caracteres                                              justify "justificación_del_texto"                                            }      }   
     Como se puede apreciar el nodo Text posee dos campos:  string:  
     Aquí se introduce el texto que se desea visualizar.  

fontStyle: 
     Este segundo campo es opcional, de forma que si se omite, el texto tendrá el estilo de la fuente por defecto. 
Siempre que aparezca este campo tomará como valor el nodo llamadoFontStyle.  






Nodo FontStyle:  
 
Sintaxis:
    FontStyle {
    family "Nombre_Fuente",
    style "Estilo_Fuente", 
    size Tamaño_Fuente 
     spacing espaciado_entre_caracteres 
     justify "justificación_del_texto"
      }    
     Los posibles valores de los campos del nodo FontStyle son los que se muestran a continuación: 
 
family: 
     Determina la fuente que se va a utilizar para el texto. Se puede escoger entre "SERIF", "SANS" o "TYPEWRITER". Obsérvese que los nombres están en mayúsculas.  
  

style 
     Se puede escoger entre "BOLD" (negrita), "ITALIC" (cursiva), "BOTH" (negrita y cursiva) o "NONE" (tipo de letra normal).  
 

size:  
     Determina el tamaño de la fuente, pero en unidades VRML.  
 

spacing:  
     Determina la separación entre líneas, también en unidades VRML.  
 

justify:
     Determina la justificación del texto. Puede ser "BEGIN" (Alinear a la izquierda), "MIDDLE" (centrar el texto) o "END" (Alinear a la derecha).   

 

Ejemplo:
        Text {
    string ["Esta es la primera fila de texto",
    "esta es la segunda fila",
    "etc."]
    fontStyle FontStyle {
    family "SERIF",
    style "BOLD",
    size 1.0
    spacing 1.0  
    justify "BEGIN"
    } 
     De igual forma que con los nodos geométricos primitivos, mediante el nodo Text lo único que se consigue es definir la estructura del texto, sin embargo no se puede visualizar, ya que no hemos indicado como se ha de presentar en el mundo virtual. Para conseguir esto, se integra en el nodo Shape, de la misma manera que se hacía con los nodos primitivos: 
  


    Shape { 
    appearance ... 
    geometry Text { ... }
 
 
 
     Una vez que  el texto se encuentra en el mundo virtual se puede manipular como cualquier otro objeto (girándolo, etc.), ya que lo único que lo diferencia de los nodos primitivos es que posee dos dimensiones en lugar de tres.  
  Ejemplo: 

    #VRML V2.0 utf8
    Shape{
    appearance Appearance{
    material Material {}
    }
    geometry Text {
    string ["Esta es la primera fila de texto"
    "esta es la segunda fila", 
    "etc."]
    fontStyle FontStyle {   
    family "SERIF",
     style "BOLD",
     size 1.0
    spacing 1.0 
     justify  "BEGIN"  
    }
    }

NODOS DE AGRUPACIÓN Y TRANSFORMACIÓN

Hasta ahora hemos visto los objetos aisladamente. Veamos ahora cómo podemos agruparlos para conseguir formas más complejas. Existen diversos nodos que nos permiten agrupar objetos:

Nodo Group:  

     El nodo Group permite unir un conjunto de nodos de forma que actúen como una entidad única, pero sin efectuar ninguna transformación en ellos. La principal característica de este tipo de grupo es que los objetos son creados todos en el mismo punto (en el centro del escenario de realidad virtual). 

Sintaxis:  
        Group { 
     children [ ... ] 
    }
  
      El campo children contiene la lista de los objetos que se quieren agrupar, representados por sus nodos Shape respectivos:   

Ejemplo: 
        Group {
    children [ 
    Shape { ... }.
    Shape { ... },  ...
    ]
    }


Ejemplo:
 

     #VRML V2.0 utf8
     Group { 
     children [ 
    Shape {
    appearance Appearance {
      material Material {   }
      }
    geometry Box { 
    size 2.0 0.5 3.0 
    }
     }
    Shape {
    appearance Appearance {
    material Material {   }
    }
    geometry Cone {
    height 3.0
    bottomRadius 0.75
    }  ]  }  
Nodo Transform:

    Por defecto todos los objetos (Shapes) se construyen en el centro del escenario virtual. El nodo transform nos va a permitir evitar esto, indicando la posición, orientación y tamaño de los diferentes objetos que va a crear. 

Sintaxis: 
    Transform{
    translation  Eje_X  Eje_Y  Eje_Z
    rotation      Eje_X  Eje_Y  Eje_Z  Ángulo
    scale          Eje_X  Eje_Y  Eje_Z
    children[...]
    }    
     Cada grupo creado mediante el nodo Transform va a poseer su propio sistema de coordenadas, cuyos atributos se determinan a través de los campos translationrotation scale, los cuales son optativos.    
 El campo translation permite indicar la posición del origen del nuevo sistema de coordenadas perteneciente al grupo dentro del sistema de coordenadas de nodo que lo engloba (nodo padre). A través del siguiente ejemplo esta idea quedará más clara: 

Ejemplo: 
    Transform{
    translation 2.0 0.0 0.0
    children [...]
    }   
     Mediante este ejemplo se consigue que el grupo creado tenga un sistema de coordenadas idéntico a sistema de coordenadas principal, con la única salvedad de que su origen se encontraría desplazado dos unidades sobre el eje X del sistema principal. También es posible apreciar en este ejemplo que sólo se han de contemplar los campos que interesen, ignorándose el resto.
 
Gráficamente los pasos serían los siguientes:  

     I) Partimos del sistema de coordenadas del nodo padre:


       
     II) Realizamos la translación del sistema de coordenadas del grupo:


 
      Un ejemplo sería el siguiente:  


  
 El campo rotation nos permite girar el sistema de coordenadas del grupo alrededor de uno de los ejes del sistema de coordenadas del nodo padre. Para ello, además de indicar sobre que eje se desea realizar el giro, se ha de hacer referencia al grado de inclinación de dicho giro (en radianes).  

Ejemplo: 
    Transform{   
    rotation 0.0 0.0 1.0   0.52
      children [...]  
    }    
     Con este ejemplo se pretende hacer girar el sistema de coordenadas del grupo sobre el eje Z 0.52 radianes. Nótese que solamente uno de los ejes puede tomar un valor (que ha de ser forzosamente la unidad) mientras el resto ha de permanecer a cero. De esta forma sólo hay tres combinaciones posibles con las que rellenar los ejes del campo rotation:  


Rotación sobre el eje X1.00.00.0
Rotación sobre el eje Y0.01.00.0
Rotación sobre el eje Z0.00.01.0

      Gráficamente los pasos serían los siguientes:  

     I) Partimos del sistema de coordenadas del nodo padre:  


     II) Realizamos la rotación del sistema de coordenadas del grupo: 


      Un ejemplo sería el siguiente:  


  

 A través del campo scale podemos aumentar o reducir el tamaño de los ejes del sistema de coordenadas del grupo utilizando factores de escala que toman como referencia los ejes de coordenadas del sistema del nodo padre. De esta forma aumentamos o disminuimos el tamaño de los objetos que se crean.  

Ejemplo: 
    Transform
    {
    scale      0.5 0.5 0.5
    children [...]
    }  
     
     El ejemplo anterior hace que los ejes del sistema de coordenadas del grupo sean un 50% (0.5) más pequeños que los ejes del sistema principal y por lo tanto el objeto diseñado en estos ejes reducirá su tamaño a la mitad. Si se hubiese querido que fuesen el doble de grandes, el ejemplo hubiese sido el siguiente:  
 Ejemplo: 
    Transform
    {
    scale      2     2    2 
    children [...]
    }   
     Gráficamente los pasos serían los siguientes:
 
     I) Partimos del sistema de coordenadas del nodo padre:  



      II) Realizamos la translación del sistema de coordenadas del grupo:  



      Un ejemplo sería el siguiente:  


 
     Por último, se muestra un ejemplo en el que se unen las diferentes modificaciones sobre el sistema de coordenadas de un grupo:  

Ejemplo: 
    Transform{
    translation 2.0 0.0 0.0
    rotation 0.0 0.0 1.0   0.52
    scale       0.5 0.5 0.5
    children [...]
    }
     Gráficamente si se realizasen estas tres operaciones sobre un cilindro obtendríamos los siguiente:  


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 Appearancerepetido. 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 
    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.

viernes, 20 de abril de 2012

NODO DE COLOR

Anteriormente se ha comentado que el nodo Shape contenía dos campos,appearance y geometry, de los cuales el segundo indicaba el tipo de objeto a representar y del que se ha hablado ya ampliamente. Sin embargo la misión del campo appearance apenas se ha comentado, por lo que procederemos a analizarla con más detalle en este punto. 
 

    El campo appearance va a permitir seleccionar el color y la textura del objeto que va a ser representado dentro del escenario virtual. Este campo toma como valor un nodo de  tipo Appearance, el cual a su vez, posee un campo denominado material que toma como valor un nodo de tipo 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.  
 

     Los colores que se le dan a los objetos son colores RGB, es decir, vienen dados por tres valores en coma flotante, cada uno de los cuales representa uno de los colores primarios (Red, Green, Blue ) [ Rojo,Verde y Azul]. El valor 0.0 representa la ausencia de color y el 1.0 la máxima intensidad.  
 

     Muchos programas de dibujo darán un valor para cada color RGB en un formato 256x256x256. Para poder utilizar estos colores en  VRML es preciso convertirlos, dividiendo cada valor por 256 y colocando el resultado en su campo correspondiente dentro del nodo Material.  

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.  
 
 diffuseColor: 
    El campo diffuseColor representa  lo que la mayoría de los usuarios llamarían como el color del objeto.  
 
emissiveColor: 
     El campo emissiveColor se utiliza para fijar el color del brillo del objeto, cuando dicho objeto necesite ser visible en la oscuridad. De esta forma se consigue un efecto en donde la figura representada parece iluminada desde el interior mediante una luz de un determinado color.
La configuración por defecto de este campo es el negro, ya que la mayoría de los objetos normalmente no brillan.  
 
specularColor: 
     El campo specularColor es un parámetro avanzado que permite indicar qué color de luz refleja el objeto. Por ejemplo, una cama roja no refleja un color rojo, pero una olla rojiza  si puede reflejar su color.  
 
ambientIntensity: 
     Este campo es otro parámetro avanzado que indica la cantidad de luz ambiental (producida por los diferentes focos de luz del escenario virtual) es reflejada por el objeto.  

     Toma valores en coma flotante entre 0.0 y 1.0.
 
shininess: 
     El campo shininess controlan el brillo de un objeto. Toma valores en coma flotante entre 0.0 y 1.0.  
 
transparency: 
     El campo transparency indica el nivel de transparencia del objeto. Toma valores en coma flotante entre 0.0 y 1.0, siendo el 1.0 el nivel máximo de transparencia (objeto invisible) y el 0.0 el nivel mínimo (objeto totalmente opaco). 
     El valor por defecto es el 0.0. 

NODO ANCHOR

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[...]  
 Ejemplo: 
    Anchor{     url"escalera.wrl"     description "Escaleras Flotantes"     children[...]     

 Para facilitar el diseño de mundos virtuales habrá ocasiones en las que convendrá almacenar cada objeto en su propio fichero. De este modo, si por ejemplo se deseara modelar una habitación, los diferentes elementos que van a aparecer dentro de ella: paredes, puertas, mesas, sillas, etc, son objetos independientes entre si pero que se engloban dentro de un mismo espacio y, que además, pueden aparecer varias veces en el diseño de todo mundo virtual. Es por ello por lo que sería de interés crear un fichero donde almacenar el objeto mesa , otro fichero para el objeto silla , etc. 
 
    En el fichero se realizan llamadas tanto al fichero que contiene la silla como al que contiene la mesa.

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"  }
 Ejemplo: 
    ...  Inline{     url"mesa.wrl"  }, ...  Transform{     translation ...     children [       Inline{url"silla.wrl"}     ]  }  ...

EJEMPLOS DE INDEXED

 A continuación se muestra un ejemplo de cómo se colorea una figura utilizando sus caras:

      Ahora el ejemplo trata de cómo se colorea una figura utilizando sus vértices:

NODO INDEXEDFACESET

Nodo IndexedFaceSet:  
 
     Permite unir los diferentes puntos especificados en su campo coordmediante caras poligonales. 

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

       El campo coord  toma como valor un nodo de tipo Coordinate, el cual define los puntos que sirven como esqueleto de la figura.
     Utiliza los índices de su campo coorIndex para especificar las caras poligonales. Un índice con valor -1 indica que ha finalizado la cara actual y comienza la siguiente.
     El campo colorPerVertex indica como se han de aplicar los colores: 

colorPerVertexcolorIndexAcción
FALSE 
(Los colores 
se aplican 
sobre las 
caras)
VACIO     Los colores se aplican en el orden en el que se han definido dentro del nodo Color. Deben existir al menos tantos colores como caras. 
 
NO VACIO     Los colores se aplican en el orden indicado por el campo colorIndex. Deben existir al menos tantos índices en este campo como caras se han definido.      Si el mayor valor que admite el campocolorIndex es N, entonces deben existir en el nodo Color N+1 colores definidos. 
 
TRUE 
(Los colores 
se aplican 
sobre los 
vertices)
VACIO     Se utiliza el campo coordIndex para elegir los colores definidos en el nodo Color.      Si el mayor valor que admite el campocoordIndex es N, entonces deben existir en el nodo Color N+1 colores definidos. 
 
NO VACIO     Se aplican los colores a cada vértice. Este campo va a tener ahora la misma estructura que el campo coordIndex, por lo que ha de contener al menos tantos índices como este último. También ha de poseer los indicadores de fin de línea (-1) en los mismos sitios que el campo coordIndex.      Si el mayor valor que admite el campocolorIndex es N, entonces deben existir en el nodo Color N+1 colores definidos.
  

NODO INDEXEDLINESET

Nodo IndexedLineSet:
      Permite unir los diferentes puntos especificados en su campo coordmediante líneas poligonales.

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

     El campo coord  toma como valor un nodo de tipo Coordinate, el cual define los puntos que sirven como esqueleto de la figura.

     El campo coordIndex se utiliza para especificar entre qué puntos se han de trazar las líneas. Una línea puede ser trazada utilizando más de dos puntos, de forma que se dibuja una línea entre el primer y el segundo punto, otra entre el segundo y el tercer punto, y así sucesivamente.Un índice con valor -1 indica que ha finalizado la línea actual y que comienza la siguiente.
     Para indicar el primer punto definido en el nodo Coordinate se utiliza el 0, para el segundo el 1 y así sucesivamente.

     El campo colorPerVertex indica como se han de aplicar los colores sobre las líneas:



colorPerVertexcolorIndexAcción
FALSE
(Los colores
se aplican
sobre las
líneas)
VACIO     Se aplican en orden los colores descritos en el nodo Color a cada una de las líneas descritas en coordIndex. Deben existir al menos tantos colores en el nodo Color como líneas haya en coorIndex.
 
NO VACIO     Este campo contiene una lista ordenada de números, los cuales representan a los colores definidos en el nodo Color. De esta forma, el 0 representará al primer color definido en el nodo Color, el 1 al segundo,etc.       Se hace corresponder cada elemento de la lista con una de las líneas descritas encoordIndex. 
     Si el mayor valor que admite el campocolorIndex es N, entonces deben existir en el nodo Color N+1 colores definidos.
 

Ejemplo: 
    colorIndex[4,0,3,2] 
     De esta manera se asigna a la primera línea de coordIndex el tercer color del nodo Color, a la segunda línea el primer color,etc.
 
TRUE
(Los colores
se aplican
sobre los
vertices)
VACIO     Se utiliza el campo coordIndex para elegir los colores definidos en el nodo Color.
Si el mayor valor que admite el campocoordIndex es N, entonces deben existir en el nodo Color N+1 colores definidos.
 
NO VACIO     Se aplican los colores a cada vértice. Este campo va a tener ahora la misma estructura que el campo coordIndex, por lo que ha de contener al menos tantos índices como este último. También ha de poseer los indicadores de fin de línea (-1) en los mismos sitios que el campo coordIndex.      Si el mayor valor que admite el campocolorIndex es N, entonces deben existir en el nodo Color N+1 colores definidos.