sábado, 20 de abril de 2013

COLORES


LOS CAMPOS QUE CONTIENE EL NODO MATERIAL
Los campos que contiene el nodo material son:
  • diffuseColor: color que tiene el objeto por naturaleza.
  • specularColor: color de brillo, es decir, el que se resalta en los objetos que son brillantes.
  • emissiveColor: color que emite el objeto sin llegar a conseguir que se ilumine el resto de objetos del mundo.
  • ambientIntensity: cantidad de luz ambiental que puede reflejar el objeto.
  • shininess: indica cuánto brilla el objeto.
  • transaparency: cómo de transparente es el objeto.
Los tres primeros campos indicados contienen, cada uno, tres valores, que son las componentes R (rojo), G (verde) y B (azul) del color. El resultado de combinar estos tres colores en la cantidad indicada (se indica un valor entre 0 y 1 para cada componente) es el color que se aplicará. Los tres últimos campos, al indicar un valor cuantitativo, contienen un único valor numérico (que va entre cero –poco- y uno –mucho-).
Veamos un ejemplo acerca de la combinación de colores.
            Si ponemos, por ejemplo, el color 1 0 0 le estamos indicando el color rojo (tan sólo tiene componente roja); sin embargo, si especificamos 1 1 0, le estamos diciendo que mezcle el rojo y el verde y que ese color (en este caso el color resultante es el amarillo) se aplique al campo correspondiente. Podemos indicar también valores decimales: 1 0.5 0 (mucha componente roja, ni mucha ni poca verde y ninguna azul) –en este caso, el color resultante es el azul-.

 5.1 Apariencias.
            Si queremos que los objetos de nuestro mundo tengan una textura diferente a la que tiene VRML por defecto tenemos una forma de cambiarla.
            Al igual que dentro del nodo Appearance podíamos, gracias al campo que contiene el  nodo Material, cambiar el color de los objetos, existe también un  campo que nos permite ponerle una determinada textura a nuestro objeto. Este campo se llama textura, y contiene un nodo ImageTexture. Dentro de este nodo tenemos el campo url. Este campo deberá contener un String (entre comillas) que es el nombre de un fichero de imagen .jpg o .png (deben tener necesariamente una de estas dos extensiones, sino puede que no funcione). El fichero imagen debe estar, además, en el mismo directorio donde se encuentra guardado el fichero de texto donde implementamos el mundo VRML. Otra opción sería poner, entre corchetes, una lista de ficheros de imagen. De esta forma, el navegador utilizaría la primera imagen de esa lista que encuentre.
            ¿Cuál es el resultado?. El resultado de aplicar de esta forma una textura en el objeto es poder ver en dicha textura en las caras de nuestro objeto.
            Dentro del nodo ImageTexture existen también el campo repeatS(si queremos que la textura se repita horizontalmente) y repeatT(si queremos que se repita verticalmente –en la dirección vertical), que toman valores booleanos (TRUE/FALSE).
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 appearanceapenas 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 denominadomaterial 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.  

  
15. Color y transparencia
Hasta ahora se ha utilizado en todos los objetos la apariencia por defecto (ver capítulo 5). En este capítulo y en el siguiente se va a ver cómo determinar la apariencia de los objetos (su colortransparenciatextura, etc.)
Como se vió en el capítulo 5, para crear un objeto visible, se debe utilizar el nodo Shape, cuya estructura general es:

   Shape {
       appearance ...
       geometry ...
   }
Con estos dos campos (appearance y geometry) se determina la apariencia y la geometría del objeto. Como se vió, el campo appearance se determina con el nodoAppearance:

   Shape {
       appearance Appearance {
            material Material { }
        }
       geometry ...
   }
El nodo Appearance tiene aquí un solo campo (material), con el que vamos a determinar el color y grado de transparecia de los objetos. Pero en realidad puede tener otros campos, con los que se puede determinar su textura, como se verá en el capítulo siguiente.
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:
Color externo (o difuso) de los objetos

   Material {
       diffuseColor 1 0 0
   }
El campo diffuseColor determina el color externo (o difuso) del objeto, y tiene un valor representado con tres números, que se corresponden con el código de colores.
Código de colores Un color se representa por un grupo de tres cifras. La primera cifra se refiere a la cantidad de color rojo, la segunda a la cantidad de color verde y la tercera a la cantidad de color azul. Las cifras pueden oscilar desde 0.0 (nada de ese color) hasta 1.0 (todo de ese color), pasando por cualquier valor intermedio. Por tanto, en el ejemplo anterior se trata de un color rojo puro.





He aquí algunos ejemplos de colores:
Color
Rojo
Verde
Azul
Rojo
1
0
0
Verde
0
1
0
Azul
0
0
1
Blanco
1
1
1
Negro
0
0
0
Amarillo
1
1
0
Violeta
1
0
1
Marrón
0.5
0.2
0
Veamos una aplicación de ésto al cono del capítulo 5, donde tenía la apariencia por defecto. Ahora va a tener un color externo rojo:

   #VRML V2.0 utf8
   #Cono de color externo rojo

   Shape {            
       appearance Appearance {
           material Material {
               diffuseColor 1 0 0
           }
       }     
       geometry Cone {
           height 3
           bottomRadius 0.75
       }     
   }
Este es el resultado (pulsar para cargar el escenario).
Color interno (o emisivo)

   Material {
       emissiveColor 1 0 0
   }
El campo emissiveColor determina el color interno (o emisivo) del objeto, para cuando se quiere dar la impresión de que el objeto está iluminado por dentro con un color determinado (en este caso también de color rojo).
Para que se puedan comparar, a la derecha están representados dos conos, el de la izquierda con un color externo (o difuso) en rojo, y el de la derecha con un color interno (o emisivo), también en color rojo (pulsar para cargar el escenario). 
Un cuerpo puede tener ambos campos a la vez, y con colores distintos. Es decir, puede tener un color difuso determinado y otro color emisivo distinto. A la derecha hay una imagen con un tercer cono que tiene su color difuso rojo y además su color emisivo en azul (pulsar para cargar el escenario). 

Transparencia
El campo transparency determina el grado de transparencia del objeto. Su valor está representado por un único número, que puede variar desde 0.0 (objeto totalmente opaco) hasta 1.0 (objeto totalmente transparente, lo que de hecho le hace ser invisible), pasando por cualquier valor intermedio. Veamos un ejemplo: un objeto en forma de pared (una caja alta y delgada de dimensiones 2.5x2.5x0.3 de color amarillo y grado de transparencia de 0.5):

Si ponemos este objeto él solo en un escenario, no se puede juzgar su grado de transparecia, pues necesitamos otros objetos, para poder ver a su través. Para poder comparar, se han colocado tres paredes iguales delante de los conos del último ejemplo, con valores de transparencia (de izquierda a derecha de 0.0, 0.5 y 0.7 respectivamente), según se puede ver en la imagen de la derecha (pulsar la imagen para cargar el escenario).
Otros campos para definir el color
Además de los campos vistos anteriormente (diffuseColor, emissiveColor y transparency) existen otros tres campos más que se pueden utilizar para refinar aún más la apariencia del color de los objetos:
  • specularColor: define el color de los puntos brillantes de los objetos. Su valor son las tres cifras correspondientes a las cantidades de rojo, verde y azul.
  • shininess: controla la intensidad de la emisió de luz de los puntos brillantes. Su valor es una única cifra que varía desde 0.0 a 1.0
  • ambientIntensity: define la cantidad de luz reflejada por el objeto. Su valor es una única cifra que varía desde 0 a 1
Ejercicio práctico
Se propone como ejercicio práctico de este capítulo poner color a algunos de los objetos del ejercicio del capítulo 8 (planetas08.wrl), de la siguiente manera:
  • Planeta WebStore: un color difuso de valor 1 0.5 1 (violeta oscuro) y un grado de transparencia de 0.5
  • Planeta Chat de WMaestro: un color difuso de valor 1 0.3 0.3 (marrón claro) y un grado de transparecia de 0.6
  • Letrero de bienvenida: color difuso amarillo (1 1 0) Los otros dos objetos (planeta WebMaestro y planeta Web3D) se dejan de momento como están, ya que van a tener su propia textura (ver capítulo siguiente). El documento VRML se debe guardar con el nombre de planetas15.wrl A la derecha puede verse el resultado (pulsar para cargar el escenario). Como todavía no se ha definido el punto de vista inicial más conveniente, puede ser que el visor se sitúe inicialmente dentro de la esfera mayor, y no se vea nada. En este caso, es necesario retroceder lo que sea preciso.
Este es el texto del documento VRML.

1 comentario: