viernes, 24 de mayo de 2013


APARIENCIAS

Concepto:
En VRML podemos cambiar la apariencia de los objetos que creamos en nuestro mundo, es decir, podemos hacer que un objeto concreto tenga una determinada textura y color.
La apariencia de un objeto se define mediante un campo denominado appearance que contiene un nodo Appearance. La modificación de las apariencias de un objeto se realiza antes o después de crear el objeto, eso sí, dentro del nodo Shape.
El nodo de apariencia Appearance contiene a su vez un campo material –entre otros campos distintos- (que contiene un nodo Material) dentro del cual podremos definir el color del objeto que estamos creando. De esta forma nos quedaría:
                        Shape{
                    appearance Appearance{
                            material Material{
                                   # aquí es donde se especifican los campos de color.
                        } }
                }

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

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

Texturas en movimiento.

Al igual que a un objeto le añadíamos una textura que era un fichero de imagen .jpg o .png, podemos añadirles texturas en movimiento, es decir, archivos de vídeo.
La única variación con respecto al anterior es que, en lugar de contener un nodo ImageTexture en el campo textura del nodo Appearance, contiene un nodo MovieTexture, que tiene también un campo url que funciona igual que con las imágenes, pero además tiene cuatro campos más:
  • speed: velocidad a la que corre la película. El valor predefinido se pone con un 1, el doble de ese valor con 2,… Poner el valor cero equivale a mostrar el primer fotograma de la película.
  • loop: indica si la película se repite (indefinidamente) o no (sólo aparece una vez). Contiene, por tanto, un valor booleano.
  • startTime: indica, en segundos medidos desde las 0h:0min:0seg del 1 de enero de 1970, cuándo comienza la película.
  • stopTime: indica cuándo finaliza la película, medido en segundos desde las 0h, 0min, 0seg del 1 de enero de 1970.

Definición de las texturas.

En VRML también podemos definir nuestras propias texturas.
En este caso, el campo textura contenido en el nodo Appearance contiene un campo denominado image. Este campo contiene varios valores numéricos (no separados por comas): primero van dos números que indican el alto y el ancho de la textura que queremos crear, luego otro número aporta el número de los componentes de la textura, es decir, si ponemos con una sola componente le estaremos indicando que se trata de una escala de grises, si ponemos dos se trataría de una escala de grises con transparencia, tres serían los colores RGB y cuatro sería RGB con transparencia. Después le sigue una lista de valores numéricos escritos en hexadecimal (empezando por 0x) que indica la cantidad de cada color en ese componente de la textura. Los pixeles se ordenan de abajo-izquierda hacia arriba-derecha. Por ejemplo, si queremos tener una textura que es un cuadrado dividido en cuatro partes, como la de la figura tendríamos que poner lo siguiente:

 image 3 4 (=alto y ancho de la textura) 3 (=RGB) 0xFF0000(=rojo) 0x00FF00(=verde) 0x0000FF(=azul) 0xFFFF00(=naranja). (El formato de poner los colores así en hexadecimal es utilizado también en otros lenguajes).
Ténganse en cuenta que las letras de estos valores que indican números en hexadecimal son en mayúsculas.
Como veremos en una sección posterior, podremos variar las texturas para los objetos de nuestro mundo, es decir, que la textura de nuestro objeto no sea exactamente la imagen del fichero de imagen.

El color de los objetos

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

No hay comentarios:

Publicar un comentario