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 ImageTexturenode 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 elheadlight 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