Texturas
El texturado de objetos no se hace mediante el
node Material dentro de la apariencia, sino que se utiliza otro
field del
node Appearance: el
field texture. En este
field se pueden insertar tres
nodes posibles:
node ImageTexture,
node MovieTexture o
node PixelTexture. Aquí tan solo veremos el primero.
node ImageTexture
En este
node se define el URL (es decir, la dirección) de la imagen que ha de servir como textura. La especificación del VRML97 dice que los formatos estándares son el JPEG y el PNG, pero recomienda que también se acepte el GIF incluyendo transparencia . Veamos un ejemplo:
Ejemplo4: Aplicación de una textura a un cubo.
Transform {
translation -2 0 0
children Shape {
geometry Box { size 3 3 3 }
appearance Appearance {
texture ImageTexture {
url "teapot.gif"
}
}
}
}
Transform {
translation 2 0 0
children Shape {
geometry Box { size 3 3 3 }
appearance Appearance {
material Material {
diffuseColor 1 1 1
}
texture ImageTexture {
url "teapot.gif"
}
}
}
}
|
El cubo de la izquierda (el primero que definimos), tan solo tiene el
field texture definido. Esto causa que el cubo no sea iluminado por ninguna de las fuentes de luz del entorno y resta con los colores originales de la textura. En cambio, el de la derecha, también tiene definido el
field appearance con un color difuso. Esto provoca que si sea iluminado por las fuentes de luz del entorno. Probad de apagar el
headlight desde el menú de opciones y mirad la diferencia entre uno y otro.
El siguiente ejemplo muestra como queda aplicada la textura sobre cada una de las primitivas:
Ejemplo5: Aplicación de una textura a las primitivas.
DEF Textura Appearance {
material Material {
diffuseColor 1 1 1
}
texture ImageTexture {
url "teapot.gif"
}
}
Transform {
translation -2 2 0
children Shape {
geometry Box { size 3 3 3 }
appearance USE Textura
}
}
Transform {
translation 2 2 0
children Shape {
geometry Sphere { radius 1.5 }
appearance USE Textura
}
}
Transform {
translation -2 -2 0
children Shape {
geometry Cone { height 3 bottomRadius 1.5 }
appearance USE Textura
}
}
Transform {
translation 2 -2 0
children Shape {
geometry Cylinder { height 3 radius 1.5 }
appearance USE Textura
}
}
|
Para poder variar el tamaño y colocación de la textura sobre el objeto, se puede usar el
field textureTransform de aparencia. En este
field, se debe utilizar el
node TextureTransform que permite escalar, rotar y trasladar la textura.
Ejemplo6: Modificación de una textura en un cubo.
Shape {
geometry Box { size 3 3 3 }
appearance Appearance {
material Material {
diffuseColor 1 1 1
}
texture ImageTexture {
url "teapot.gif"
}
textureTransform TextureTransform {
scale 2 2
rotation 1.5708 # PI/2
}
}
}
|
Debemos tener en cuenta que lo que estamos haciendo es escalando, rotando y trasladando las coordenadas de textura y no la textura en si misma, por lo tanto un escalado de [2 2] no la amplía al doble, sino que la reduce a la mitad (y por eso se repite), y una rotación de PI/2 no rota la textura PI/2, sino -PI/2, etc.
A continuación podeis ver un ejemplo con una textura GIF con transparencia . Esto es útil para texturar polígonos con imágenes de objetos los cuales serían complejos de modelar con geometría , como por ejemplo árboles (lo veremos más adelanteen el módulo Billboarding).
Ejemplo7: Cubo con textura GIF con transparencia .
Transform { # Fondo de referencia
translation 0 0 -5
children Shape {
geometry Box { size 10 10 0.2 }
appearance Appearance {
material Material {
diffuseColor 0.2 0.8 0.4
}
}
}
}
Shape {
geometry Box { size 4 2 4 }
appearance Appearance {
material Material {
diffuseColor 1 1 1
}
texture ImageTexture {
url "teapot2.gif"
}
}
}
|
0 comentarios:
Publicar un comentario