Materiales II.

Tutorial de VRML97

Ya hemos visto una introducción a los materiales en el módulo Primitivas y Materiales I. Allí hemos visto como tratar con el color básico de los objetos, es decir el color difuso. Ahora veremos otras propiedades de color y de textura que se pueden definir en los objetos en VRML.

Materiales Brillantes

El node Material tiene dos fields para poder controlar las características de brillantez de un material. Estos fields son field specularColor y field shininess. El primero define el color que presenta un objeto al reflejar especularmente la luz. El segundo determina que tan definido o borroso es el reflejo especular.

Veamos un ejemplo donde aparecen cuatro esferas cada una con unos parámetros diferentes:

Ejemplo1: Definición de cuatro materiales especulares.


Shape { # Objeto de referencía con material mate.
	geometry Sphere { radius 1.5 }
	appearance Appearance {
		material Material {
			diffuseColor 0.5 0.5 0.5
		}
	}
}
Transform {
	translation -2 2 0
	children Shape {
		geometry Sphere { radius 1.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				specularColor 1 0 0
				shininess 0
			}
		}
	}
}
Transform {
	translation 2 2 0
	children Shape {
		geometry Sphere { radius 1.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				specularColor 1 0 0
				shininess 0.05
			}
		}
	}
}
Transform {
	translation -2 -2 0
	children Shape {
		geometry Sphere { radius 1.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				specularColor 1 0 0
				shininess 0.3
			}
		}
	}
}
Transform {
	translation 2 -2 0
	children Shape {
		geometry Sphere { radius 1.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				specularColor 1 0 0
				shininess 1
			}
		}
	}
}

La primera esfera (la que queda al centro del conjunto), no tiene definido un material especular para tener una referencia respecto a los otros.



Materiales Autoiluminados

Cuando se desea definir un material para emular que emite luz, como por ejemplo un fluorescente, se puede utilizar el field emissiveColor. Con este field se puede definir el color que emite el material sin necesidad de que haya una fuente de luz que ilumine.

Ejemplo2: Definición de materiales autoiluminados.


Transform {
	translation -1.5 0 0
	children Shape {
		geometry Cylinder { radius 0.2 height 8 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
			}
		}
	}
}
Transform {
	translation -0.5 0 0
	children Shape {
		geometry Cylinder { radius 0.2 height 8 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				emissiveColor 1 1 1
			}
		}
	}
}
Transform {
	translation 0.5 0 0
	children Shape {
		geometry Cylinder { radius 0.2 height 8 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				emissiveColor 1 1 0
			}
		}
	}
}
Transform {
	translation 1.5 0 0
	children Shape {
		geometry Cylinder { radius 0.2 height 8 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				emissiveColor 0.6 1 1
			}
		}
	}
}



Materiales Transparentes

La transparencia es otra propiedad a poder modificar mediante un field de material. El field transparency nos permite dar el grado de transparencia del material en el rango [0 1].

Ejemplo3: Definición de materiales transparentes.


Transform { # Objeto de fondo para referencia
  translation 0 0 -2
	children Shape {
		geometry Box { size 10 10 0.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0 0 1
			}
		}
	}
}
Transform {
	translation -3.75 0 0
	children Shape {
		geometry Box { size 2 4 0.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				transparency 0
			}
		}
	}
}
Transform {
	translation -1.25 0 0
	children Shape {
		geometry Box { size 2 4 0.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				transparency 0.33
			}
		}
	}
}
Transform {
	translation 1.25 0 0
	children Shape {
		geometry Box { size 2 4 0.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				transparency 0.66
			}
		}
	}
}
Transform {
	translation 3.75 0 0
	children Shape {
		geometry Box { size 2 4 0.5 }
		appearance Appearance {
			material Material {
				diffuseColor 0.5 0.5 0.5
				transparency 0.9
			}
		}
	}
}

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"
		}
	}
}


Ejercicios propuestos:

Diversas Transformaciones de Textura
Hacer pruebas con diversos tipos de transformaciones sobre las coordenadas de textura como práctica y experimentación.




< Anterior | Menú ^ | Siguiente >