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-.
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.
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 ...
}
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:
diffuseColor:
El campo diffuseColor representa lo
que la mayoría de los usuarios llamarían como el color del objeto.
emissiveColor:
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:
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:
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:
shininess:
El campo shininess controlan el brillo de
un objeto. Toma valores en coma flotante entre 0.0 y 1.0.
transparency:
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 color, transparencia, textura,
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
}
}
|
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).
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.
.jpg)
.jpg)
Explora la fantástica selección de plantilla cv editables disponibles en Mi CV Ideal.
ResponderEliminar