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.
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:
Sintaxis:
Shape{
appearance Appearance{
material Material{
diffuseColor color_RGB
emissiveColor color_RGB
specularColor color_RGB
ambientIntensity valor
transparency valor
shininess valor
}
}
geometry ...
}
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.
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