Java 3D

El aspecto de muchos objetos del mundo real depende de su textura. La textura de un objeto es realmente la geometr�a relativamente fina de la superficie de un objeto. Para apreciar la superficie del papel las texturas juegan con el aspecto de los objetos del mundo real, consideremos una alfombra. Incluso cuando todas las fibras de una alfombra son del mismo color la alfombra no aparece con un color constante debido a la interacci�n de la luz con la geometr�a de las fibras. Aunque Java 3D es capaz de modelar la geometr�a de las fibras individuales de la alfombra, los requisitos de memoria y el funcionamiento de la renderizaci�n para una alfombra del tama�o de una habitaci�n modelada a tal detalle har�an dicho modelo in�til. Por otra parte, tener un pol�gono plano de un solo color no hace un reemplazo convincente para la alfombra en la escena renderizada.

Hasta ahora en el tutorial, los detalles de los objetos visuales los ha proporcionado la geometr�a. Consecuentemente, los objetos visualmente ricos, como los �rboles, pueden requerir mucha geometr�a que a cambio requiere mucha memoria y c�lculo de renderizaci�n. A cierto nivel de detalle, el rendimiento puede llegar a ser inaceptable. Este cap�tulo muestra c�mo a�adir el aspecto del detalle superficial a un objeto visual sin la adici�n de m�s geometr�a con el uso de texturas

.��Qu� es el Texturado?

Una alfombra puede ser un ejemplo extremo en t�rminos de complejidad y de densidad de la geometr�a superficial, pero est� lejos de ser el �nico objeto para el cual percibimos textura. Los ladrillos, el cemento, la madera, los c�spedes, las paredes, y el papel son s�lo algunos de los objetos que no se representan bien con pol�gonos planos (no-texturados). Pero, igual que con la alfombra, el coste de representar la textura superficial en los primitivos geom�tricos para estos objetos ser�a muy alto.

Una posible alternativa a modelar la fibra de la alfombra es modelar la alfombra como un pol�gono plano con muchos v�rtices, asignando colores a los v�rtcies para darle variaciones de color. Si los v�rtices est�n suficientemente cercanos, se puede reproducir la imagen de la alfombra. Esto requiere significativamente menos memoria que el modelo que incluye las fibras de la alfombra; sin embargo, el modelo todav�a requiere demasiada memoria para un tama�o de habitaci�n razonable. Esta idea, de representar la imagen del objeto en una superficie plana, es la idea b�sica de texturado. Sin embargo, con el texturado, la geometr�a puede ser muy sencilla.

El texturado, tambi�n llamado mapeo de textura, es una manera de a�adir riqueza visual a una superficie sin la adici�n de los detalles geom�tricos finos. La riqueza visual la proporciona una imagen, tambi�n llamada textura, que da el aspecto del detalle superficial para el objeto visual. La imagen se mapeda dentro de la geometr�a del objeto visual en el momento de la renderizaci�n. De ah� el t�rmino mapeo de textura.

La Figura 7-1 muestra algunas de las texturas usadas en los programas de ejemplo de este cap�tulo. Como podemos ver, una textura puede proporcionar riqueza visual a objetos de distintos tama�os.

Figura 7-1, Imágenes usadas como Texturas en los Programas de Ejemplo.

.�Texturado B�sico

El texturado de pol�gonos en un programa de Java 3D se consigue a trav�s de la creacci�n del manojo de apariencia apropiado y cargando la imagen de la textura dentro de �l, especificando la localizaci�n de la imagen de la textura en la geometr�a, y fijando los atributos de texturado. Como veremos, especificar texturas puede ser muy complejo. Afortunadamente, hay clases de utilidad para ayudarnos en el proceso y las configuraciones de los valores por defecto para las opciones texturado son las apropiadas para las aplicaciones de texturado b�sicas.

Para explicar el texturado, la siguiente secci�n presenta una sencilla receta; y en secciones posteriores se desarrolla un programa de ejemplo basado en la receta, adem�s de explicar el texturado.

.�Sencilla Receta de Texturado

Debido a la flexibilidad del texturado en el API Java 3D, el n�mero de opciones relacionadas con el texturado puede ser un poco fastidioso. Incluso as�, el texturado no es necesariamente dif�cil. Para hacer f�cil el trabajo de especificaci�n de textura, seguimos los pasos de la siguiente receta.

La receta solo subraya los pasos relacionados directamente con el texturado. Deber�amos haber observado que la geometr�a y la apariencia se fijan en un objeto Shape3D que se agrega al escenario gr�fico.

  1. Preparar las Im�genes de Texura
  2. Cargar la Textura
  3. Configurar la textura en el manojo Appearance
  4. Especificar las TextureCoordinates del Geometry

Al igual que muchas de las recetas de este tutorial, algunos de estos pasos se pueden realizar en cualquier orden. De hecho, los pasos de esta receta se pueden realizar en cualquier orden (siempre que los los pasos 2 y 3 se hagan juntos).

Texturado Paso 1: Preparar las Im�genes de Texturas

Esta receta comienza con un paso sin programaci�n: "preparar las im�genes de textura". Crear y corregir im�genes de textura es algo que normalmente se hace externamente a los programas de Java 3D. De hecho, la mayor�a de las im�genes de textura est�n preparadas antes de que se comience el programa. Hay dos tareas esenciales en la preparaci�n de la imagen de textura: 1. asegurarnos de que las im�genes sean de dimensiones aceptables, y 2. asegurarnos de que las im�genes se graban en un formato de fichero que pueda ser le�do. Por supuesto se puede editar la imagen para alcanzar el color, la transparencia, y las caracter�sticas deseadas.

Por razones de eficiencia , Java 3D necesita que el tama�o de la imagen de la textura sea una potencia matem�tica de dos (1, 2, 4, 8, 16, ...) en todas las dimensiones. No cumplir esta restricci�n dar� lugar a una excepci�n en tiempo de ejecuci�n.

Si una imagen no es de las dimensiones aceptables, debe ser modificada (escalada o recortada) para cumplir los requisitos de dimensi�n antes de que sea utilizada. La edici�n de la imagen se puede hacer en una gran variedad de programas incluyendo el API Java Advanced Imaging. En la Figura 7-1, las dos im�genes m�s peque�as son de 128 por 128, el �rbol es de 256 por 128, y la tierra es de 256 por 256.

En lo que concierne a los formatos de fichero, se puede utilizar cualquier formato de fichero siempre que proporcionemos un m�todos para cargarlo. Los programas de este cap�tulo cargan texturas usando la clase de utilidad TextureLoader. Un objeto TextureLoader carga JPEG, GIF, y otros formatos de fichero.

Una palabra m�s sobre los programas del ejemplo antes de pasar al paso siguiente. Los fragmentos del c�digo y los programas de ejemplo de este cap�tulo utilizan los nombres del archivo para algunos ficheros de imagen que est�n incluidos en los ficheros Jar de ejemplo. No hay nada especial en estos ficheros de imagen a excepci�n de que cumplen con la restricci�n de las dimensiones. Cualquier fichero de imagen se puede utilizar en los programas simpre que las dimensiones de las im�genes sean potencia de dos . Podemos compilar y ejecutar los programas del ejemplo con nuestros propios ficheros de a imagen. Ahora, con las im�genes de texturas listas, podemos empezar la programaci�n.

Texturado Paso 2: Cargar la Textura

El siguiente paso es conseguir la imagen preparada en un objeto imagen. Esto se conoce como cargar la textura. Las texturas se pueden cargar desde ficheros o URLs usando de mismo proceso b�sico. Cargar una textura se puede lograr con muchas l�neas del c�digo, o con dos l�neas de c�digo que utilicen un objeto TextureLoader. De cualquier forma, el resultado es conseguir la imagen en un objeto ImageComponent2D. El Fragmento de C�digo 7-1 muestra un ejemplo de dos l�neas que utilizan un TextureLoader. El resultado de estas dos l�neas es cargar la imagen del fichero stripe.gif en un objeto Image2DComponent que se pueda utilizar para crear el manojo de apariencia necesario para el paso 4.

Fragmento de C�digo 7-1, usar un objeto TextureLoader Object para Cargar el fichero de imagen STRIPE.GIF
1. TextureLoader loader = new TextureLoader("stripe.gif", this);
2. ImageComponent2D image = loader.getImage();

Antes de pasar al paso 4 de la receta, echemos una ojeada m�s cercana el uso del objeto TextureLoader. El segundo argumento del constructor especifica un objeto que sirva como image observer. La clase TextureLoader utiliza el paquete java.awt.image para cargar las im�genes. Este paquete carga las im�genes de forma as�ncrona, lo que es particularmente �til cuando una imagen se carga de una URL. Para facilitar el manejo de cargas as�ncronas de im�genes, los componentes de AWT est�n capacitados para ser observadores de imagen, que es observar el proceso de la carga de la imagen. A un observador de imagen se le puede preguntar por los detalles de la carga de la imagen.

Con el fin escribir programas Java 3D todo lo que necesitamos saber es que cualquier componente del AWT puede servir como un observador de imagen. Puesto que Applet es una extensi�n del componente Panel del AWT, el objeto Applet de un programa de Java 3D puede ser el observador de imagen para el objeto TextureLoader.

Texturado Paso 3: Crer el Manojo de Appearance

Para ser utilizada como textura para un objeto visual, la imagen de textura cargada en el paso de 2a se debe asignar como la textura de un objeto Texture, que entonces se utiliza en un manojo de apariencia referenciado por el objeto visual. Espec�ficamente, un objeto Texture2D contiene la imagen de la textura. La imagen ImageComponent2D cargada en el paso 2a es el centro de la creaci�n del manojo de apariencia del paso 2b.

El Fragmento de C�digo 7-2 muestra dos l�neas del c�digo del paso 2a seguidas por el c�digo para formar un sencillo manojo de apariencia texturado. Cargando la textura (l�neas 1 y 2), la imagen entonces se asigna al objeto Texture2D (l�nea 4). Luego el objeto Texture2D se agrega al objeto Appearance(l�nea 6).

Fragmento de C�digo 7-2, Crear un Appearance con un objeto Texture.
1.     TextureLoader loader = new TextureLoader("stripe.jpg", this);
2.     ImageComponent2D image = loader.getImage();
3.     Texture2D texture = new Texture2D();
4.     texture.setImage(0, image);
5.     Appearance appear = new Appearance();
6.     appear.setTexture(texture);

El manojo de apariencia creado en el Fragmento de C�digo 7-2 podr�a tener otros nodos componentes, la m�s notable de las posibilidades es el nodo componente TextureAttributes. Para este ejemplo, no se utiliza ning�n objeto TextureAttributes.

Texturado Paso 4: Especificar TextureCoordinates

Adem�s de cargar la textura en un manojo de apariencia, el programador tambi�n especifica la colocaci�n de la textura en la geometr�a a trav�s de la especificaci�n de las coordenadas de textura. Las especificaciones de coordenadas de textura se hacen por cada v�rtice de la geometr�a. Cada coordenada de textura especifica un punto de textura que se aplicar� al v�rtice. Con la especificaci�n de algunos puntos de la imagen que se aplicar�n a los v�rtices de la geometr�a, la imagen ser� rotada, estirada, aplastada, y/o duplicada para hacer que quepa en la especificaci�n.

TextureCoordinates se especifica en las dimensiones s (horizontal) y t (verticales) de la imagen de textura seg�n lo mostrado en la Figura 7-3. Esta figura muestra las coordenadas de la textura en el espacio de la imagen de textura.

Figura 7-3, Coordenadas de Mapeo de Textura

El siguiente bloque de referencia muestra s�lo uno de los m�todos de GeometryArray disponible para fijar coordenadas de textura.

M�todo setTextureCoordinate de GeometryArray

Las coordenadas de textura se especfican por cada v�rtice de la geometr�a mediante uno de los distintos m�todos setTextureCoordinate de la clase GeometryArray.

void setTextureCoordinate(int index, Point2f texCoord)

Selecciona las coordenadas de textura asociadas con el v�rtice del �ndice especificado para este objeto.

El Fragmento de C�digo 7-3 crea un solo plano usando un objeto de geometr�a QuadArray. Los coordenadas de la textura se asignan para cada v�rtice. En el c�digo, las l�neas tres a once establecen las cuatro esquinas de un cuadr�ngulo en 3-espacios. Las l�neas 13 a 21 establecen la localizaci�n de la textura en la geometr�a. Este fragmento determinado de c�digo crea un plano de 2 metros en una cara y pone la imagen de la textura en la orientaci�n normal (hacia arriba, no invertido) a lo largo de la cara del plano.

Fragmento de C�digo 7-3, Aplicar Coordenadas de Texturas a un Quad.
1.     QuadArray plane = new QuadArray(4, GeometryArray.COORDINATES
2.                                              | GeometryArray.TEXTURE_COORDINATE_2);
3.     Point3f p = new Point3f();
4.     p.set(-1.0f, 1.0f, 0.0f);
5.     plane.setCoordinate(0, p);
6.     p.set(-1.0f, -1.0f, 0.0f);
7.     plane.setCoordinate(1, p);
8.     p.set( 1.0f, -1.0f, 0.0f);
9.     plane.setCoordinate(2, p);
10.   p.set( 1.0f, 1.0f, 0.0f);
11.   plane.setCoordinate(3, p);
12.
13.   Point2f q = new Point2f();
14.   q.set(0.0f, 1.0f);
15.   plane.setTextureCoordinate(0, q);
16.   q.set(0.0f, 0.0f);
17.   plane.setTextureCoordinate(1, q);
18.   q.set(1.0f, 0.0f);
19.   plane.setTextureCoordinate(2, q);
20.   q.set(1.0f, 1.0f);
21.   plane.setTextureCoordinate(3, q);

La Figura 7-4 muestra la relaci�n entre las coordenadas de v�rtice y las coordenadas de la textura para el cuadr�ngulo del ejemplo creado en el Fragmento de C�digo 7-3. La imagen izquierda de la Figura 7-5 muestra la aplicaci�n de la textura stripe.gif a la geometr�a del ejemplo.

Figure 7-5. La orientación de las Coordenadas de Textura en el Espacio de una Imagen de Textura.

Ahora que hemos completado los tres pasos del texturado, el objeto texturado puede a�adirse a un escenario gr�fico. La siguiente secci�n presenta una serie de programas de ejemplo que muestra algunas opciones de texturado.

.�Sencillos Ejemplos de Programas de Textura

Siguiendo la receta anterior, se ha desarrollado un sencillo programa de ejemplo de texturado. SimpleTexturaApp.java. Este programa es poco m�s que un programa de visualizaci�n de im�genes.

Figura 7-5, Escena Renderizada por los programas SimpleTextureApp (izq.) y SimpleTextureSpinApp (der.).

Se ha creado otro programa de ejemplo SimpleTexturaSpinApp.java utilizando un objeto RotationInterpolator. En este programa se hace girar el mismo plano texturado para demostrar la naturaleza 3D del programa. La Figura 7-5 muestra una renderizaci�n de este programa a la derecha. Una cosa a observar cuando se ve el programa, la cara posterior del plano est� en blanco.

La Clase NewTextureLoader

Los programas Java 3D que usan texturas pueden tener una gran cantidad de l�neas s�lo para cargar las texturas y crear los manojos de apariencia. Se puede ahorrar algo de programaci�n y, m�s importante, memoria en tiempo de ejecuci�n compartiendo manojos de apariencia cuando sea apropiado. Sin embargo, esto no reduce mucho la cantidad de programaci�n. Se pueden conseguir otras reducciones de programaci�n creando una clase para crear los manojos de apariencia de textura. El desaf�o de crear esta clase consiste en el requisito del observador de imagen para el objeto TextureLoader.

El objeto Canvas3d o un Applet pueden servir como el observador de imagen, pero tener una referencia a un cierto componente por todas partes en el programa puede ser fastidioso. Para tratar esta inconveniencia, se ha extendido la clase TextureLoader que elimina la necesidad de un componente observador de imagen. En su lugar se utiliza un solo m�todo para especificar un observador de imagen para todas las aplicaciones futuras del cargador de textura.

Los constructores de NewTextureLoader son iguales a los de TextureLoader excepto en que ninguno requiere un componente observador de imagen. Los m�todos de NewTextureLoader son los mismos de TextureLoader con el m�todo adicional para fijar un observador de imagen.

Otro programa del ejemplo,TexturaPlaneApp.java, carga tres texturas y las visualiza en los planos seg�n lo mostrado en la Figura 7-6. Lo importante de este programa es que las texturas se cargan usando la clase TexturedPlane definida externamente al resto del programa que se hace m�s f�cilmente con la clase NewTextureLoader. Esta clase TexturedPlane no es lo bastante flexible para ser utilizada en muchas aplicaciones, pero sirve como demostraci�n para clases similares.

Figura 7-6, Tres Planos Texturados renderizados por TexturedPlaneApp.java

El Fragmento de C�digo 7-4 es un extracto de TexturaPlaneApp.java y es casi todo el c�digo necesario para crear los tres planos texturadps de esta aplicaci�n. El objeto observador de imagen se proporciona al objeto de NewTextureLoader del TexturedPlane.

Fragmento de C�digo 7-4, A�adir tres objetos Texturados a un Escenario Gr�fico.
1.     scene.addChild(tg0);
2.     tg0.addChild(tg1);
3.     tg1.addChild(new TexturedPlane("stripe.gif"));
4.
5.     tg0.addChild(tg2);
6.     tg2.addChild(new TexturedPlane("brick.gif"));
7.
8.     tg0.addChild(tg3);
9.     tg3.addChild(new TexturedPlane("earth.jpg"));

.�M�s sobre las Coordenadas de Textura

Seg�n lo mencionado en "Texturado Paso 3: Especificar TextureCoordinates", la imagen de la textura se crea para caber en la geometr�a bas�ndose en la especificaci�n de las coordenadas de textura. El proceso real es asociar los texels de la textura a los pixeles de la geometr�a cuando es renderizada. Cada pixel de una textura se llama un texel, o un 'elemento de textura'. �ste es el proceso de mapeado de la textura.

El mapeo de textura comienza con la especificaci�n de las coordenadas de textura para los v�rtices de la geometr�a. Mientras se renderiza cada pixel del tri�ngulo texturado, se calculan las coordenadas de la textura en el pixel desde los v�rtices del tri�ngulo. La interpolaci�n Trilinear de las coordenadas de textura de los vertices determina las coordenadas de textura para el pixel y por lo tanto, el texel de la imagen de la textura usada en el color final del pixel.

La Figura 7-7 ilustra el proceso de interpolaci�n trilinear para un pixel del ejemplo. La representaci�n se hace en orden de scan. El pixel, P, para el mapeo de textura est� justo en el centro del scan actual en el tri�ngulo de la izquierda de la ilustraci�n. Se han asignado las coordenadas de textura para cada uno de los v�rtices del tri�ngulo. Se han etiquetado TC1, TC2, y TC3. Estas coordenadas de textura son el punto de partida para la interpolaci�n trilinear (cada una de las interpolaciones lineares se muestra como flechas dos-cabezas en la figura). Las primeras dos interpolaciones lineares determinan las coordenadas de la textura a lo largo de las caras del tri�ngulo en el scan (puntos etiquetados A y B en la figura). La tercera interpolaci�n se hace entre estos dos puntos.

Las coordenadas de textura que resultan para P son (0,75, 0,6). En la derecha de la figura est� la textura. Usando las coordenadas de textura calculadas para P se selecciona el texel.

Figura 7-7, Imagen del Mapeo de Textura

La selecci�n del Texel no se explica completamente en el ejemplo anterior. La especificaci�n de la secci�n de filtraci�n (ver secciones posteriores) da m�s detalles sobre la selecci�n del texel. Otro detalle todav�a no explicado es la interacci�n entre el color del texel, otras fuentes del color, y el color final del pixel. El modo de valor por defecto es 'substituye' con el cu�l se utiliza el color del texel como el color del pixel, pero hay otros modos. Antes de pasar a otros asuntos, ya est� en orden la discusi�n adicional de las coordenadas y el mapeo de textura.

En este punto del cap�tulo se han utilizado todas las texturas en su orientaci�n ordinaria. La Figura 7-8 muestra planos con algunas de las posibles orientaciones de textura s�lo seleccionando las coordenadas de textura en los v�rtices. El programa de ejemplo TextureCoordApp.java produce esta imagen.

Figura 7-8, Algunas de las posibles orientaciones de una Textura en un Plano.

Debemos observar que en el programa de ejemplo TextureCoordinatesApp.java la textura stripe.gif se carga solamente una vez. Se crea solamente un manojo de apariencia de la textura que es compartido por los cuatro planos texturados. Esto es posible porque no hay nada en el manojo de la textura que sea �nico para cualquiera de los planos. Cargar la textura una vez ahorra tiempo y memoria.

Por supuesto, se pueden cometer errores al especificar las coordenadas de textura. Cuando sucede esto, el sistema de renderizado de Java 3D hace que se pregunte por �l. Cuando las coordenadas de textura no se especifican para un espacio regularmente mapeado, entonces la triangulaci�n de la geometr�a llega a ser obvia pues las 'costuras' de la textura se ver�n a lo largo de los bordes de tri�ngulos.

La Figura 7-9 muestra la imagen renderizada de los planos texturados donde no se especifican las coordenadas de textura para hacer una presentaci�n uniforme de la textura. El programa que genera esta imagen, TexturaRequestApp.java, es solamente un manojo de textura compartido por tres objetos visuales. Las variaciones en el aspecto de los planos s�lo son debidas a la especificaci�n de las coordenadas de textura. �sta es una representaci�n de la frase "en texturado, se consigue lo que se pide".

Figura 7-9, En Texturado, Se Obtiene lo que se Pide.

Este programa muestra algunos de los posibles renderizados para un plano usando la misma textura. Las asignaciones de textura hechas en este programa son ejemplos de posibles errores mientras que todas son aplicaciones leg�timas. La imagen de la izquierda es una aplicaci�n de solo una sola fila de texels - las mismas coordenadas de textura se asignan a las parejas de v�rtices. La imagen de la derecha es la aplicaci�n de un solo texel - las cuatro coordenadas de textura son iguales. Las dos im�genes del centro muestran la asignaci�n de las coordenadas de textura de maneras no uniformes. El cambio de la textura a lo largo de la diagonal es debido a la triangulaci�n del pol�gono.

El Fragmento de C�digo 7-5 muestra las coordenadas de textura asignadas en la aplicaci�n TexturaRequestApp.java. Estas asignaciones usadas con la textura stripe.gif resultan en las im�genes de la Figura 7-9.

Fragmento de C�digo 7-5, Asignaciones de Coordenadas de Textura para Planos en TextureRequestApp.
1.     // texture coordinate assignments fof the first plane
2.     texturedQuad.setTextureCoordinate(0, new Point2f( 1.0f, 0.0f));
3.     texturedQuad.setTextureCoordinate(1, new Point2f( 1.0f, 0.0f));
4.     texturedQuad.setTextureCoordinate(2, new Point2f( 0.0f, 0.0f));
5.     texturedQuad.setTextureCoordinate(3, new Point2f( 0.0f, 0.0f));
6.     // texture coordinate assignments for the second plane
7.     texturedQuad.setTextureCoordinate(0, new Point2f( 0.0f, 1.0f));
8.     texturedQuad.setTextureCoordinate(1, new Point2f( 1.0f, 0.5f));
9.     texturedQuad.setTextureCoordinate(2, new Point2f( 0.5f, 0.5f));
10.   texturedQuad.setTextureCoordinate(3, new Point2f( 0.0f, 1.0f));
11.   // texture coordinate assignments for the third plane
12.   texturedQuad.setTextureCoordinate(0, new Point2f( 1.0f, 0.0f));
13.   texturedQuad.setTextureCoordinate(1, new Point2f( 1.0f, 1.0f));
14.   texturedQuad.setTextureCoordinate(2, new Point2f( 0.0f, 0.0f));
15.   texturedQuad.setTextureCoordinate(3, new Point2f( 1.0f, 1.0f));
16.   // texture coordinate assignments for the forth plane
17.   texturedQuad.setTextureCoordinate(0, new Point2f( 0.0f, 0.0f));
18.   texturedQuad.setTextureCoordinate(1, new Point2f( 0.0f, 0.0f));
19.   texturedQuad.setTextureCoordinate(2, new Point2f( 0.0f, 0.0f));
20.   texturedQuad.setTextureCoordinate(3, new Point2f( 0.0f, 0.0f));

.�Preview de Algunas Opciones de Texturado

Hay mucho m�s en el texturado que s�lo especificar las coordenadas de textura para los v�rtices de la geometr�a. En este punto, la discusi�n de texturado no ha incluido ninguna de las opciones disponibles en aplicaciones de textura. Por ejemplo, el objeto Texture2D se puede configurar para diversos modos de l�mites y filtros de mapeo. Pero hay inlcuso m�s que esto.

La configuraci�n adicional de una textura se hace a trav�s de un componente del nodo TextureAttributes. La Figura 7-10 muestra un objeto visual con un manojo de apariencia con los componentes Texture y TextureAttributes.

Figura 7-10, Un Manojo de Apariencia con Componentes Texture y TextureAttributes.

Otras opciones de texturado van m�s all� de las configuraciones Texture y TextureAttributes. Por ejemplo, una textura puede ser tridimensional. En secciones posteriores veremos el API para la clase Texture3d, que, como Texture2D, es una extensi�n de la clase Texture.

.�Opciones de Textura

Texture2D, la clase usada en los ejemplos anteriores, es una extensi�n de Texture. Algunas de las opciones b�sicas para el texturado se implementan en esta clase. Puesto que Texture es una clase abstracta, sus configuraciones se har�n a trav�s de un objeto Texture2D o Texture3d. Las configuraciones son el modo de l�mites, filtros, y el formato de la textura.

Modo de L�mites: Envolver o Abrazar

En todos los programas anteriores, se han asociado las texturas de una manera tal que una copia de la imagen se ha utilizado para cubrir el plano. El problema es qu� hacer cuando una coordenada de textura est� m�s all� del rango 0 a 1 del espacio de la textura y no fue direccionada.

La configuraci�n del modo de l�mites determina lo que ocurre cuando el mapeo tiene lugar si las coordenadas de textura van m�s all� del rango 0 a 1 del espacio de la imagen. Las opciones son envolver la imagen, o abrazar la imagen. Envolver, significa repetir la imagen seg�n sea necesario, es el valor por defecto. Abrazar utiliza el color del borde de la imagen en cualquier lugar fuera del rango 0 a 1. Estas configuraciones se hacen independientemente en las dimensiones s y t.

En el programa del ejemplo BoundaryModeApp la textura se asocia sobre aproximadamente la novena parte de cada uno de los planos. La Figura 7-11 muestra la escena seg�n lo renderizado por este programa. Las variaciones en las im�genes se deben solamente a la configuraci�n de los modos de l�mites para los planos. De izquierda a derecha las configuraciones son (s luego t) WRAP y WRAP, CLAMP y WRAP, WRAP y CLAMP, y CLAMP y CLAMP.

Figura 7-11, Comparación de las Combinaciones  de Modo de Límites para un Plano Texturado.

Observa que al contrario que las aplicaciones anteriores que comparten el mismo objeto Texture entre cuatro objetos visuales, la textura se carga cuatro veces en esta aplicaci�n. Esto es necesario puesto que cada uno de los objetos Texture tiene diversas combinaciones de las configuraciones del modo de l�mites.

Especificaci�n de Filtrado

En el c�lculo de las coordenadas de textura para cada pixel, raramente hay una correspondencia del pixel directamente a un s�lo texel. Normalmente un pixel es del tama�o de varios texels o m�s peque�o que un texel. En el primer caso se utiliza un filtro de ampliaci�n para asociar varios texels a un pixel. En el segundo caso se utiliza un filtro de reducci�n para asociar el texel o los texels a un pixel. Hay opciones para manejar cada uno de estos casos.

El filtro de ampliaci�n especifica qu� hacer cuando un pixel es m�s peque�o que un texel. En este caso la textura ser� ampliada como si se aplicara sobre la geometr�a. Cada texel aparecer� como varios pixels y es posibles que la imagen resultante exhiba el "texelization" donde se ver�an los texels individuales para la renderizaci�n. Las opciones para el filtro de ampliaci�n son hacer el punto de muestreo, que es seleccionar el texel m�s cercano y utilizar su color, o interpolarlo entre texels vecinos. El punto de muestreo, o muestreo del vecino m�s cercano, generalmente tiene menor coste de c�lculo; mientras que el muestreo linear de la interpolaci�n cuesta m�s (en c�lculo y por lo tanto en tiempo de renderizaci�n) pero reduce el aspecto de cualquier texelization.

El filtro de reducci�n especifica qu� hacer cuando un pixel es m�s grande que un texel. En este caso los texels deben ser "reducidos" para caber en el pixel. El problema trata en que un pixel puede solamente tener un valor de color y varios texels podr�an suministrarlo. Las opciones para el filtro de reducci�n son hacer el punto de muestreo, que es seleccionar el texel m�s cercano y utilizar su color, o interpolarlo entre texels vecinos.

No est� siempre claro qu� filtro ser� utilizado. Consideremos una textura estirada en una direcci�n pero aplastada en otra. Dependiendo de qu� dimensi�n see considera, se escoger� un filtro diferente. No hay nada que el programador pueda hacer para determinar cu�l ser� utilizado. Sin embargo, el sistema de ejecuci�n normalmente escoge el filtro que resulte en una imagen mejor.

La selecci�n de un filtro tiene otras implicaciones con respecto al uso del color de l�mite (siguiente secci�n). Tambi�n, las opciones del filtro de reducci�n son m�s complejas cuando se usan varios niveles de texturado.

Color de Limites

El comportamiento del modo de l�mites es adem�s configurable con un color del l�mite. Cuando el modo de l�mite es CLAMP y se especifica color de l�mite, se utiliza el color del l�mite cuando las coordenadas de la textura est�n fuera del rango 0 a 1. Solo se puede especificar un color de l�mite para utilizar un color en cada dimensi�n para la cual el modo de l�mite se fije a CLAMP. El programa de ejemplo BoundaryColorApp demuestra esta caracter�stica.

En la Figura 7-12 se han fijado colores de l�mite para los cuatro planos. El plano m�s a la izquierda no utiliza su color de l�mite porque sus modos de l�mite son ambos WRAP. Para el plano siguiente utiliza el color negro de l�mite s�lo en la dimensi�n vertical debido a los modos de l�mite. Podemos ver la mezcla entre el azul y el negro a la izquierda; en el lado derecho de la imagen el color negro del l�mite se mezcla con el borde blanco de la textura. Los colores de l�mite para los dos planos restantes son verde y rojo. Ambos modos de l�mite son CLAMP para el plano de la derecha de la imagen.

Figura 7-12, Imagen Producida por BoundaryColorApp.

Observa que el color de l�mite no se utiliza si el filtro es BASE_LEVEL_POINT. Para que el color del l�mite sea utilizado, el filtro necesita ser por lo menos BASE_LEVEL_LINEAR. El corolario es que siempre que el filtro no sea BASE_LEVEL_POINT se utiliza el BoundaryColor.

Tambi�n observa que la misma textura se carga cuatro veces en esta aplicaci�n. Un objeto Texture no se puede compartir entre los cuatro planos en esta aplicaci�n puesto que cada objeto de textura se configura con una combinaci�n distinta de modos de l�mite.

Formato de Textura

La �ltima configuraci�n de la clase Texture es la del formato de textura. El formato de textura es una declaraci�n de cu�ntos valores hay por texel y c�mo esos valores afectan a los pixels. Por ejemplo, una configuraci�n del formato de textura de INTENSITY indica que solo el valor del texel ser� utilizado para rojo, verde, azul, y los valores de alpha del pixel. Una configuraci�n del formato de textura de RGB indica que los tres valores del texel ser�n utilizados para los valores rojo, verde, y azul del pixel mientras que el valor de alpha del pixel sigue siendo igual.

Formato de Textura Valores por Texel Modifica Color del Pixel Modifica alpha del Pixel
INTENSITY 1 si, R=G=B si, R=G=B=A
LUMINANCE 1 (s�lo color) si, R=G=B no
ALPHA 1 (s�lo alpha) no si
LUMINANCE_ALPHA 2 si, R=G=B si
RGB 3 si no
RGBA 4 si si

.�Texture3d

Como el nombre implica, un objeto Texture3d contiene una imagen tridimensional de la textura. Puede ser que pensemos en �l como un volumen de color. La clase Texture3d es una extensi�n de Texture, as� que todas las caracter�sticas de la clase Texture se aplican a Texture3d. La �nica caracter�stica que Texture3d tiene y que Texture2D no tiene, es una especificaci�n para el modo de l�mite de la tercera dimensi�n, o la dimensi�n r.

.�Algunas Aplicaciones de Texturado

Cr�amoslo o no, hay muchas m�s caracter�sticas texturado a explicar. Sin embargo, podemos utilizar las caracter�sticas ya discutidas en muchas aplicaciones. Esta secci�n hace una parada en la discusi�n de los detalles de texturado para mostrar dos aplicaciones de texturado. Una aplicaci�n aplica una textura a un primitivo geom�trico (v�ase el Cap�tulo 2). Otra textura las l�neas de pol�gonos no-rellenos. Una tercera aplicaci�n utiliza la textura creada por un Text2D (v�ase el Cap�tulo 3) a otro objeto visual.

.�Texturado de Geom�tricos Primitivos

Una forma para simplificar el proceso de presentar una textura es utilizar un primitivo geom�trico. Se puede utilizar una bandera para asignar autom�ticamente las coordenadas de textura al crear primitivos geom�tricos. El Fragmento de C�digo 7-6 muestra el uso de un constructor para una esfera primitiva con la generaci�n de coordenadas.

Fragmento de C�digo 7-6, Crear un Esfera Primitiva con Pre-asignaci�n de Coordenadas de Textura.
1.     objRoot.addChild(new Sphere(1.0f, Primitive.GENERATE_TEXTURE_COORDS, appear));

La l�nea del Fragmento de C�digo 7-6 se utiliza en el programa de ejemplo PrimitiveTextureApp.java. Este programa textura una esfera con la imagen earth.jpg, que tambi�n est� en el fichero jar de ejemplo, dando por resultado la imagen de al Figura 7-13.

Figura 7-13, Texturado de una Esfera Geométrica Primitiva.

.�Texturado de L�neas

Los pol�gonos no son los �nicos elementos gr�ficos que pueden ser texturados; las l�neas tambi�n se pueden texturar. El programa TexturedLinesApp.java lo demuestra, usando una textura 1-D para texturar l�neas de un objeto visual. En esta aplicaci�n, el objeto visual es una tira torcida creada en el cap�tulo 2. El �nico 'truco' para texturar l�neas es crear el manojo de apariencia apropiado para visualizar las l�neas de la geometr�a y de los pol�gonos no rellenos. El Fragmento de C�digo 7-7 muestra las l�neas del c�digo para agregar el componente PolygonAttributes a un manojo de apariencia para visualizar las l�neas.

Fragmento de C�digo 7-7, Crear un Manojo de Appearance para Mostrar L�neas en un Geometry Array.
1.     PolygonAttributes polyAttrib = new PolygonAttributes();
2.     polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
3.     polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
4.     twistAppear.setPolygonAttributes(polyAttrib);

Una textura unidimensional es realmente un objeto Texture2D con una dimensi�n (generalmente t) con tama�o 1. Para el programa de ejemplo, la textura tiene 16 texels por 1 texel. Las coordenadas de dos dimensiones de la textura se asignan al objeto visual. El valor-t de cada coordenada de textura se fija a 0.0f. Sin embargo, se podr�a utilizar cualquier valor-t y el resultado ser�a igual. La Figura 7-14 muestra la geometr�a de la tira torcida visualizada como l�neas texturadas. El c�digo fuente est� en TexturedLinesApp.java

Figura 7-14, Líneas Texturadas en Java 3D.

.�Usar Texturas Text2D

Los objetos Text2D crean texturas de texto especificado y aplican la textura a un pol�gono. A esta textura se puede acceder f�cilmente desde Text2D y aplicarla a otro objeto visual. La Figura 7-15 muestra una imagen producida por el programa Text2DTextureApp.java, un programa que aplica la textura creada por otro objeto Text2D mostr�ndola en el fondo de la geometr�a de otro objeto visual.

Figura 7-15, La Textrua de un Objeto Text2D aplicada a otro Objeto visual.

.�Atributos de Textura

En secciones anteriores vimos algunas de las opciones disponibles en texturado. El componente TextureAttributes permite la personalizaci�n posterior del texturado. Las configuraciones de los atributos de textura incluyen el modo de textura, color de mezcla, modo de correcci�n de perspectiva, y una correspondencia del mapeo de la textura. Los valores por defecto para estas configuraciones son REPLACE, black, FASTEST, y NONE, respectivamente. Adem�s, el m�todo setEnable permite activar y desactivar el mapeo de la textura. Todas las configuraciones se explican en esta secci�n.

Una ventaja de tener controladas las caracter�sticas del texturado por un componente diferente del nodo es la capacidad de compartir una textura entre objetos visuales pero a�n as� poder personalizarla para cada objeto visual. La Figura 7-10 muestra dos objetos visuales que comparten un solo objeto Texture. Cada uno de los objetos visuales personaliza la textura con el componente TextureAttributes en su manojo de apariencia.

Figura 7-16, Dos objetos visuales compartiendo la misma Textura Personalziada por Componentes TextureAttributes.

Los objetos TextureAttributes se a�aden al escenario gr�fico como miembros de una manejo de apariencia. El m�todo setTextureAttributes de Appearance se muestra en el siguiente bloque de referencia.

M�todo setTextureAttributes de la Clase Appearance

void setTextureAttributes(TextureAttributes textureAttributes)

Selecciona el objeto textureAttributes en un objeto appearance.

.�Modo de Textura

Para apreciar el rol del modo de textura debemos entender la secuencia de las operaciones implicadas en la determinaci�n del color de un pixel. Indicado brevemente, primero se calcula el color de la no-textura de un pixel, y luego se aplica la textura. El color de no-textura lo determina el color de la geometr�a por v�rtice, ColoringAttributes, o la combinaci�n de las caracter�sticas materiales y las condiciones de iluminaci�n. Como hay varias formas de determinar el color de la no-textura, hay varias maneras posibles de combinar el color de la no-textura y el color de la textura.

La configuraci�n del modo de textura es un factor importante en la determinaci�n de c�mo afecta el valor del texel (color y/o alpha) a los valores del color y del alpha del pixel de la no-textura. La operaci�n de texturado real depende de la combinaci�n del formato de la textura y del modo de textura. Puedes referirte a la especificaci�n de Java 3D API (ap�ndice E) para m�s informaci�n.

El modo de textura por defecto es REPLACE, las otras opciones son BLEND, DECAL, y MODULATE. Cada uno de los modos se describe en las siguientes secciones. Tambi�n podemos ver la tabla que resume los modos de la textura.

Blend

En el modo BLEND, el color de la textura se mezcla con el color de la no-textura. El color de la textura determina la cantidad del color de la no-textura a utilizar. La transparencia que resulta es la combinaci�n de la transparencia de la textura y del material. Este modo determinado de la textura tiene la flexibilidad agregada de incluir opcionalmente un color de mezcla.

Decal

En el modo DECAL, el color de la textura se aplica como etiqueta encima del color de la no-textura. La transparencia de la textura determina la cantidad de color material a utilizar. La transparencia del pixel se deja sin cambios. Esto es totalmente igual que aplicar una etiqueta a un objeto del mundo real. El formato de textura debe ser RGB o RGBA para el modo de textura de DECAL.

Modulate

En el modo MODULATE el color de la textura se combina con el color de la no-textura. La transparencia que resulta es la combinaci�n de la transparencia de la textura y del material. Puesto que el color que resulta depende de la no-textura y de los colores de la textura, este modo es �til en la aplicaci�n de la misma textura a una gran variedad de objetos visuales sin hacer que todos parezcan iguales. Este modo se utiliza a menudo en escenas de iluminaci�n.

Replace

En el modo REPLACE la textura proporciona el color y la transparencia para el pixel, no haciendo caso del resto de los colores excepto del color specular (si se permite la iluminaci�n). �ste es el modo de textura por defecto incluso cuando no hay componente TextureAttributes en el manojo de apariencia.

Sumario de Modos de Textura

La Siguiente tabla ofrece un sumario de cada uno de los modos de textura. Esta tabla se ha pensado como una gu�a general para entender los distintos modos de textura disponibles. Los c�lculos del color real se basan en una combinaci�n del modo de textura y del formato de textura.

Cuando se permite la iluminaci�n, los componentes de colores ambiente, difuso, y emisivo se ven afectados por la operaci�n de textura; el color specular se ve afectado. El color specular se calcula bas�ndose en las condiciones del material y de la iluminaci�n, luego despu�s de que la operaci�n de la textura se aplique a otros componentes del color (no-texturados) el color specular se agrega a los otros colores que renderizan el color final del pixel.

Modo de Textura Color de Pixel Derivado desde Determinado por Aplicaci�n a...
BLEND Color de Textura, no-textura, y color mezcla opcional Color de textura Escenas Iluminadas con Color de Mezcla
DECAL Color de Textura y color no-textura alpha de la textura detalles de superficie
MODULATE Colores de Textura y de no-textura n/a Escenas de iluminaci�n
REPLACE S�lo color de textura (modo de textura por defecto) n/a Escenas sin iluminaci�n

.�Textura con Color de Mezcla

El color de mezcla se utiliza en texturado s�lo cuando el modo de textura es BLEND. El color del pixel resultante es una combinaci�n del color del texel y del color de mezcla. Con el color de mezcla se puede aplicar la misma textura con diferentes sombras a diferentes objetos visuales. El color de mezcla se expresa como un valor RGBA. El color de mezcla por defecto es (0,0,0,0) negro con un alpha de 0.

.�Modo de Correcci�n de Perspectiva

El mapeo de textura ocurre en el espacio de la imagen. Por esta raz�n los planos texturados pueden parecer incorrectos cuando se ven desde un lateral. Es decir, parecen incorrectos a menos que se haga una correcci�n de la perspectiva. En Java 3D la correcci�n de la perspectiva se hace siempre. La �nica opci�n es c�mo hacer esta correcci�n de la perspectiva.

Las dos opciones son FASTEST y NICEST. Obviamente, el dilema es la velocidad cl�sica contra la calidad de la imagen. Para esta opci�n, la configuraci�n del valor por defecto es NICEST.

.�Transformaci�n del Mapeo de Textura

Dentro del componente Attributes de una textura se puede especificar un objeto Transform3d para alterar la funci�n de mapeo de la textura. Esta correspondencia de transformaci�n del mapeo de textura se puede utilizar para mover una textura sobre un objeto visual en tiempo de ejecuci�n. La transformaci�n traslada, rota, y escala las coordenadas de textura (s, t, r) antes de que los texels sean seleccionados desde la imagen de textura.

Una traslacci�n en la transformaci�n de la textura desplazar�a la textura a trav�s del objeto visual. Se puede utilizar una transformaci�n de rotaci�n para reorientar la textura en un objeto visual. Se pueden utilizar una transformaci�n de escala para repetir la textura a trav�s de un objeto visual. Por supuesto, como un objeto transform puede contener una combinaci�n de �stos, se puede animar la textura de un objeto visual manipulando este objeto.

.�API TextureAttributes

Los siguientes bloques de referencia listan los constructores, m�todos y capacidades del componente TextureAttributes.

Sumario de Constructores de la Clase TextureAttributes

Extiende: NodeComponent

El objeto TextureAttributes define los atributos que se aplican a un mapeo de textura.

TextureAttributes()

Construye un objeto TextureAttributes con estos valores por defecto:
texture mode : REPLACE, transform : null, blend color : black (0,0,0,0), perspective correction: NICEST

TextureAttributes(int textureMode, Transform3d transform,
Color4f textureBlendColor, int perspCorrectionMode)

Construye un objeto TextureAttributes con los valores especificados.

Constantes de la Clase TextureAttributes

Estas constantes se usan en los constructores y m�todos para seleccionar los modos de textura y de correcci�n de la perspectiva.

Constantes de Modo de Textura

  • BLEND Mezcla el color de mezcla con el color del objeto.
  • DECAL Aplica el color de la textura al objeto como una etiqueta.
  • MODULATE Modula el color del objeto con el color de la textura.
  • REPLACE Reemplaza el color del objeto con el color de la textura.

Constantes del Modo de Correcci�n de Perspectiva

  • FASTEST Usa el m�todo m�s r�pido disponible para la correci�n de perspectiva del mapeo de textura.
  • NICEST Usa el mejor m�todo (de mayor calidad) disponible para la correci�n de perspectiva del mapeo de textura.

Sumario de M�todos de la Clase TextureAttributes

void getTextureBlendColor(Color4f textureBlendColor)

Obtiene el color de mezcla de la textura para este objeto appearance.

void getTextureTransform(Transform3d transform)

Recupera una copia del objeto transformation de la textura.

void setPerspectiveCorrectionMode(int mode)

Selecciona el modo de correcci�n de la perspectiva a usar para la interpolaci�n de coorednadas de color y/o textura a uno de :

  • FASTEST Usa el m�todo m�s r�pido disponible para la correci�n de perspectiva del mapeo de textura.
  • NICEST Usa el mejor m�todo (de mayor calidad) disponible para la correci�n de perspectiva del mapeo de textura.
void setTextureBlendColor(Color4f textureBlendColor)
void setTextureBlendColor(float r, float g, float b, float a)

Selecciona el color de mezcla para este objeto TextureAttributes.

void setTextureMode(int textureMode)

Selecciona el par�metro del modo de textura a uno de:

  • BLEND Mezcla el color de mezcla con el color del objeto.
  • DECAL Aplica el color de la textura al objeto como una etiqueta.
  • MODULATE Modula el color del objeto con el color de la textura.
  • REPLACE Reemplaza el color del objeto con el color de la textura.
void setTextureTransform(Transform3d transform)

Selecciona el objeto transform usado para transformar las coordenadas de textura.

Sumario de capacidades de la Clase TextureAttributes

  • ALLOW_BLEND_COLOR_READ | WRITE
    Permite leer (escribir) el color de mezcla de la textura
  • ALLOW_MODE_READ | WRITE
    Permite leer (escribir) los modos de textura y de correci�n de perspectiva.
  • ALLOW_TRANSFORM_READ | WRITE
    Permite leer (escribir) el objeto transform de la textura.

.�Generaci�n Autom�tica de Coordenadas de Textura

Seg�n se explic� anteriormente, asignar coordenadas de textura a cada v�rtice de la geometr�a es un paso necesario en el texturado de objetos visuales. Este proceso puede comsumir mucho tiempo as� como es dif�cil para objetos visuales grandes y/o complejos. Debemos tener presente que esto es un problema para el programador y una vez solucionado, no es un problema que se repita.

A menudo las coordenadas de textura se asignan con el c�digo espec�fico de un objeto visual. Sin embargo, otra soluci�n es automatizar la asignaci�n de las coordenadas de textura mediante alg�n m�todo. Este m�todo se pod�a utilizar para cualquier objeto visual tanto si es grande o peque�o, complejo o simple. Este acercamiento es exactamente lo que lo hace un objeto TexCoordGeneration (generaci�n de coordenadas de textura). Siempre que un objeto se cargue desde un fichero o sea creado en el c�digo del programa, se puede utilizar un objeto TexCoordGeneration para asignar coordenadas de textura.

TexCoordGeneration es una clase del coraz�n del API Java 3D usada para generar coordenadas de textura. Para generar autom�ticamente coordenadas de textura, el programador especifica los par�metros de la coordenada de textura en un objeto TexCoordGeneration y agrega este objeto al manojo de apariencia del objeto visual. Las coordenadas de textura se calculan bas�ndose en los par�metros de especificaci�n de coordenadas en el tiempo de ejecuci�n. Los par�metros se explican en las secciones siguientes.

.�Formato de Generaci�n de Textura

Esta selecci�n simplemente especifica si las coordenadas de textura ser�n generadas para una textura de dos o tres dimensiones. Las selecciones posibles son TEXTURE_COORDINATE_2 y TEXTURE_COORDINATE_3 que generan coordenadas de textura 2D (S y T) y coordenadas de textura 3D (S, T, y R), respectivamente.

.�Modo de Generaci�n de Textura

Hay dos aproximaciones b�sicas para la generaci�n de textura: proyecci�n linear y mapeo esf�rico:

Poyecci�n Linear

Con la proyecci�n linear, las coordenadas de textura se especifican con planos. Para las coordenadas de textura de dos dimensiones (s,t), se utilizan dos planos. La distancia desde un v�rtice a un plano es la coordenada de textura en una dimensi�n; la distancia desde el otro plano a un v�rtice es la coordenada de textura en la otra dimensi�n. Para las texturas tridimensionales, se utilizan tres planos.

Los tres par�metros planos posibles se nombran planeS, planeT, y planeR, donde el nombre corresponde a la dimensi�n para la cual se utiliza. Cada plano se especifica como 4-tuple (ecuaci�n plana). Los primeros tres valores son el vector normal superficial para el plano. El cuarto valor especifica la distancia desde el origen al plano a lo largo de un vector paralelo al vector normal superficial del plano.

Hay dos variaciones en este m�todo autom�tico de generaci�n de coordenadas de textura. El primero, llamado objeto linear, produce coordenadas de textura est�ticas. Con coordenadas de textura generadas linearmente, si el objeto visual se mueve, los coordenadas de textura no cambian. La segunda opci�n, llamada ojo linear, produce coordenadas de textura relativas a las coordenadas del ojo dando como resultado coordenadas de textura variables. Con coordenadas de textura linear del ojo los objetos que se mueven parecen moverse con la textura.

La Figura 7-17 muestra las im�genes producidas por un programa de ejemplo que utiliza un objeto TexCoordGeneration para asignar coordenadas de textura a una tira torcida. En esta aplicaci�n se usa una textura unidimensional. La textura tiene un solo texel rojo en un extremo. Cuando la aplicaci�n se ejecuta, la tira torcida rota.

La imagen de la izquierda de la Figura 7-17 muestra el texturado con modo de generaci�n OBJECT_LINEAR. En este caso la textura rota con el objeto y se puede ver el texel rojo rotar con la tira. La imagen de la derecha de la Figura 7-17 muestra la textura que resulta cuando el modo la generaci�n es EYE_LINEAR para la tira torcida. En este caso, el texel rojo permanece en el centro de la vista mientras que el objeto rota.

Figura 7-17, Comparar los modos de Generación del objeto TexCoordGeneration.

TexCoordGenApp.java es el programa que produce est�s im�genes.

Mapeo Esf�rico

Si un objeto brillante est� en el centro de una habitaci�n real, probablemente reflejar�a la imagen de muchos de los otros objetos de la habitaci�n. Las reflexiones depender�an de la forma del objeto y de la orientaci�n de las cosas en la habitaci�n. El modo de generaci�n de las coordenadas del mapeo esf�rico est� dise�ado para asignar coordenadas de textura para aproximar las reflexiones de otros objetos sobre el objeto visual como suceder�a para el objeto brillante en el mundo real del ejemplo.

Cuando se usa un objeto TexCoordGeneration en el modo de mapeo esf�rico el c�lculo de las coordenadas de textura se basa en las superficies normales y en la direcci�n de la vista.

La textura usada para este efecto debe estar especialmente preparada. Si el ambiente virtual del objeto brillante existe en el mundo real, una fotograf�a de la escena tomada con una lente de ojo de pez crear� una imagen de textura conveniente. Si no existe la escena, entonces la textura se debe crear para parecer que la imagen es una fotograf�a tomada con una lente de ojo de pez.

.�C�mo usar un Objeto TexCoordGeneration

Para usar un objeto TexCoordGeneration, lo seleccionamos como un componente del manojo de apariencia del objeto visual a texturar. La Figura 7-18 muestra el diagrama de una manojo de apariencia con un objeto TexCoordGeneration junto con un objeto Texture y otro objeto TextureAttributes.

Figura 7-18, Manojo de Appearance con Texture, TextureAttributes, y TexCoodGeneration.

M�todo setTexCoordGeneration de la Clase Appearance

void setTexCoordGeneration(TexCoordGeneration texCoordGeneration)

Selecciona el objeto texCoordGeneration al objeto especificado.

.�API TexCoordGeneration

Los siguientes bloques de referencia listan los constructores, constantes, m�todos y capacidades de los objetos de la clase TexCoordGeneration.

Sumario de Constructores de la Clase TexCoordGeneration

El objeto TexCoordGeneration contiene todos los par�metros necesarios para generar coordenadas de textura. Est� incluido como parte de un objeto Appearance.

TexCoordGeneration()

Construye un objeto TexCoordGeneration usando los valores por defecto para todas las edades.

TexCoordGeneration(int genMode, int format)

Construye un objeto TexCoordGeneration con genMode y format especificados.

TexCoordGeneration(int genMode, int format, Vector4f planeS)
TexCoordGeneration(int genMode, int format, Vector4f planeS, Vector4f planeT)
TexCoordGeneration(int genMode, int format, Vector4f planeS, Vector4f planeT, Vector4f planeR)

Construyen un objeto TexCoordGeneration con genMode, format, y las ecuaciones de los planos especificados.

Sumario de Campos de la Clase TexCoordGeneration

Constantes de Modo de Generaci�n

  • EYE_LINEAR Genera coordenadas de textura como una funci�n linear en coordenadas de ojo (por defecto).
  • OBJECT_LINEAR Genera coordenadas de textura como una funci�n linear en coordenadas del objeto .
  • SPHERE_MAP Genera coordenadas de textura usando un mapeo de reflexi�n esf�rica en coordenadas de ojo.

Constantes de Formato

  • TEXTURE_COORDINATE_2 Genera coordenadas de textura 2D (S y T) (por defecto)
  • TEXTURE_COORDINATE_3 Genera coordenadas de textura 3D (S, T, y R)

Sumario de M�todos de la Clase TexCoordGeneration

void setEnable(boolean state)

Activa o desactiva la generaci�n de coordenadas para este objeto appearance.

void setFormat(int format)

Selecciona el formato TexCoordGeneration al valor especificado.

void setGenMode(int genMode)

Selecciona el modo de generaci�n de TexCoordGeneration al valor especificado.

void setPlaneR(Vector4f planeR)

Selecciona la ecuaci�n plana de la coordenada R.

void setPlaneS(Vector4f planeS)

Selecciona la ecuaci�n plana de la coordenada S.

void setPlaneT(Vector4f planeT)

Selecciona la ecuaci�n plana de la coordenada T.

Sumario de Capacidades de la Clase TexCoordGeneration

  • ALLOW_ENABLE_READ | WRITE
    Permite leer/escribir su bandera de enable.
  • ALLOW_FORMAT_READ
    Permite leer escribir su informaci�n de formato.
  • ALLOW_MODE_READ
    Permite leer su informaci�n de modo.
  • ALLOW_PLANE_READ
    Permite leer la informaci�n de componentes planeS, planeR, y planeT.

.�M�ltiples Niveles de Textura (Mipmaps)

Para entender la raz�n de los m�ltiples niveles de textura, consideremos una aplicaci�n que contenga un objeto visual texturado que se mueva alrededor la escena (o que lo mueva el espectador). Cuando este objeto visual est� cerca del espectador aparecen demasiados pixels en la imagen. Para este caso, se deber�a utilizar una textura de buen tama�o para evitar la visi�n de texels individuales; esto es especialmente cierto cuando se utiliza el punto de muestreo como filtro de ampliaci�n.

Sin embargo, cuando este objeto visual se ve en la distancia, la textura ser� demasiado grande para el objeto visual y la textura se reducir� durante la representaci�n. (Recordamos que el mapeo de textura tiene lugar durante la renderizaci�n en la imagen, la pantalla, o el espacio). El punto de muestreo para el filtro de reducci�n problablemente no dar� resultados satisfactorios cuando el objeto visual sea 1/32 o m�s peque�o (tama�o del pixel) que la resoluci�n de la textura. El dilema es calidad de la imagen contra rendimiento de renderizaci�n.

Si en vez de usar un gran mapeo de textura (porque el objeto visual aparecer� grande) se usa uno peque�o para hacer que la vista del objeto sea mejor cuando es peque�o, existe el problema inverso. Para las im�genes de buena calidad el filtro de ampliaci�n implicar� la interpolaci�n linear dando por resultado m�s c�lculo. De nuevo, el dilema est� entre la calidad de imagen contra el rendimiento de la renderizaci�n. La �nica ventaja de usar un mapeo de textura m�s peque�o es un menor requerimiento de memoria para almacenar la textura.

Lo que se necesita es un mapeo de textura peque�o cuando el objeto visual aparece peque�o y un mapeo de textura grande cuando el objeto visual aparece grande. Las t�cnicas de texturado actuales que usan una imagen de textura, llamada texturado base, no pueden hacer esto. Y esto es exactamente lo que proporcionan los m�ltiples niveles de textura.

.��Qu� es el Texturado Multi-Nivel (MIPmap)?

Los m�ltiples niveles de textura se refieren a una t�cnica de texturado donde se utilizan juntas una serie de im�genes de textura como textura para los objetos visuales. La serie de im�genes es (generalmente) la misma textura en una variedad de resoluciones. Cuando un objeto visual se est� renderizando con m�ltiples niveles de textura, se utiliza la imagen de textura que est� m�s cercana al tama�o de pantalla del objeto visual.

El funcionamiento del renderizador depende de los filtros de reducci�n y ampliaci�n usados. Sin embargo, con MIPmaps tenemos m�s control sobre la apariencia de los objetos visuales y podemos conseguir objetos visuales de mejor aspecto con un mejor rendimiento.

Usar m�ltiples niveles de textura es como usar un objeto DistanceLOD (v�ase el Cap�tulo 5) para aplicar diversas texturas a un objeto visual cuando se ve desde diversas distancias. Las excepciones son que con el Mipmap el objeto visual siempre es texturado mientras que con el objeto DistanceLOD, el objeto podr�a no ser texturado a algunas distancias. Y, para los objetos visuales texturados en todas las distancias, el MIPmap es m�s eficiente y ha agregado posibilidades de filtrado con respecto a un objeto DistanceLOD usado para una aplicaci�n similar.

Los m�ltiples niveles la textura son referidos com�nmente como mipmap. El t�rmino "MIPmap" viene de las siglas del Latin "multum in parvo", que significa muchas cosas en un lugar peque�o. El t�rmino MIPMap realmente se refiere a una t�cnica espec�fica de almacenaje para almacenar una serie de im�genes para el uso en texturado de m�ltiples niveles El t�rmino MIPmap se utiliza com�nmente para significar texturado de m�ltiples niveles.

Con la t�cnica de almacenaje MIPmap, el tama�o de una imagen de textura es � del tama�o anterior (� del tama�o en cada cada dimensi�n). Esto contin�a hasta que el tama�o de la imagen m�s peque�a es de 1 texel por 1 texel. Por ejemplo, si tama�o m�ximo de la textura es 16x4, las texturas restantes son 8x2, 4x1, 2x1, y 1x1. La Figura 7-19 muestra los niveles de textura para la textura stripe.gif, Cada una de estas im�genes de textura fue preparada usando software de edici�n de im�genes.

Figura 7-19, Múltiples Niveles de una Textura (Tamaños de imágenes: 128x128, 64x64, 32x32, ..., 1x1)

La Figura 7-20 muestra una imagen de un solo plano texturado con una textura m�ltiple donde cada nivel de textura tiene un color diferente. El plano se orienta en �ngulo al espectador para que el lado izquierdo est� m�s cercano al espectador que el derecho. Debido a la proyecci�n de la perspectiva el lado izquierdo del plano parece m�s grande en coordenadas de la imagen que el derecho.

Debido a la orientaci�n y a la proyecci�n del plano, los pixels representan menos �rea superficial (en el sistema virtual de coordenadas del objeto) a la izquierda y progresivamente m�s �rea superficial hacia a la derecha, dando como resultado que el nivel de textura cambia. A la izquierda del plano en la imagen, se utiliza el nivel base de la textura. Los cambios del color en la imagen indican donde ocurrieron los cambios del nivel de textura durante la renderizaci�n.

Tener una textura para cada nivel de un color diferene no es la aplicaci�n t�pica de texturado m�ltiple. Esta aplicaci�n simplemente iluistra la operaci�n de una textura m�ltiple.

Figura 7-20, La imagen Generada por un Plano texturado con una Textura MipMap multi-color.

La Figura 7-20 est� generada por el programas MIPmapDemo.java.

.�Ejemplos de Texturas Multi-Nivel

En lo que concierte a programaci�n con el API Java 3D, crear una textura de niveles m�ltiples es casi igual que crearla de un solo nivel, o nivel base. Mirando hacia la receta texturado simple la �nica diferencia es que se necesitan varias im�genes de textura para la textura de niveles m�ltiples. Hay dos maneras de crear los niveles m�ltiples de las im�genes de la textura. Una forma es crear cada imagen a mano con las aplicaciones apropiadas de edici�n/creacci�n de im�genes, la otra es utilizar una caracter�stica del cargador de textura para crear esas im�genes desde la imagen base.

Las dos t�cnicas de texturado de nivel m�ltiple ocupan una cantidad casi igual de c�digo. La de menos cantidad de trabajo es la de generar las im�genes de los niveles desde la imagen base. El Fragmento de C�digo 7-8 presenta el c�digo de carga de las texturas de MIPmapApp.java. Esta aplicaci�n es un ejemplo de como generar niveles m�ltiples de textura desde una imagen base.

Fragmento de C�digo 7-8, Crear Texturado Multi-nivel desde una sola imagen base.
1.     Appearance appear = new Appearance();
2.
3.     NewTextureLoader loader = new NewTextureLoader("stripe.gif",
4.     TextureLoader.GENERATE_MIPMAP);
5.     ImageComponent2D image = loader.getImage();
6.
7.     imageWidth = image.getWidth();
8.     imageHeight = image.getHeight();
9.
10.   Texture2D texture = new Texture2D(Texture.MULTI_LEVEL_MIPMAP,
11.   Texture.RGB, imageWidth, imageHeight);
12.   imageLevel = 0;
13.   texture.setImage(imageLevel, image);
14.
15.   while (imageWidth > 1 || imageHeight > 1){ // loop until size: 1x1
16.       imageLevel++; // compute this level
17.
18.       if (imageWidth > 1) imageWidth /= 2; // adjust width as necessary
19.       if (imageHeight > 1) imageHeight /= 2; // adjust height as necessary
20.
21.       image = loader.getScaledImage(imageWidth, imageHeight);
22.       texture.setImage(imageLevel, image);
23.       }
24.
25.   texture.setMagFilter(Texture.BASE_LEVEL_POINT);
26.   texture.setMinFilter(Texture.MULTI_LEVEL_POINT);
27.
28.   appear.setTexture(texture);

El Fragmento de C�digo 7-8 empieza siguiendo los mismos pasos que son utilizados para cualquier aplicaci�n de textura cargando la imagen base. Una diferencia es que el TextureLoader se crea con la bandera GENERATE_MIPMAP (l�neas 3-4). Entonces se extrae la imagen base del cargador de la forma usual.

Las dimensiones de esta imagen son necesarias no s�lo para crear el objeto Texture2D, sino tambi�n para calcular los tama�os de las siguientes im�genes. Por esta raz�n se guardan en dos variables (l�neas 7 y 8). Estas variables ser�n utilizadas durante la generaci�n y carga de las im�genes restantes.

El objeto Texture2D se crea usando el modo MIPmap MULTI_LEVEL_MIPMAP y la dimensi�n de la imagen base (l�neas 10 y 11). El nivel base es el nivel 0. Entonces el n�mero de nivel se graba y se selecciona la imagen base como la imagen para el nivel 0 (l�neas 12 y 13).

El bucle itera hasta que el tama�o de la imagen sea de 1 pixel por 1 pixel (l�nea 15). El n�mero de nivel se incrementa en cada iteraci�n (l�nea 16) y se calcula la dimensi�n de la imagen (l�neas 18 y 19). La imagen apropiadamente escalada se consigue desde TextureLoader (l�nea 21) y se selecciona para el nivel actual en el objeto Texture2D (l�nea 22).

Cuando se crea un mapeo de textura de m�ltiples niveles debemos asegurarnos de seleccionar filtros de nivel como se hace en las l�neas 25 y 26 del Fragmento de C�digo 7-8. Las selecciones de filtrado desactivan el nivel de texturado m�ltiple.

Crea las im�genes a mano permite una calidad superior y/o poder a�adir efectos especiales. Las im�genes generadas se producen filtrando la imagen base.

Fragmento de C�digo 7-9, M�ltiples Niveles de Textura Cargados desde Ficheros de Imagenes Individuales.
1.     Appearance appear = new Appearance();
2.
3.     String filename = "stripe.gif"; // filename for level 0
4.     NewTextureLoader loader = new NewTextureLoader(filename);
5.     ImageComponent2D image = loader.getImage();
6.
7.     imageWidth = image.getWidth();
8.     imageHeight = image.getHeight();
9.
10.   Texture2D texture = new Texture2D(Texture.MULTI_LEVEL_MIPMAP,
11.   Texture.RGBA,imageWidth, imageHeight);
12.   imageLevel = 0;
13.   texture.setImage(imageLevel, image);
14.
15.   while (imageWidth > 1 || imageHeight > 1){ // loop until size: 1x1
16.       imageLevel++; // compute this level
17.
18.       if (imageWidth > 1) imageWidth /= 2; // adjust width as necess.
19.       if (imageHeight > 1) imageHeight /= 2;// adjust height as necess.
20.       filename = "stripe"+imageWidth+".gif";// file to load
21.
22.       loader = new NewTextureLoader(filename);
23.       image = loader.getImage();
24.
25.       texture.setImage(imageLevel, image);
26.       }
27.
28.   texture.setMagFilter(Texture.BASE_LEVEL_POINT);
29.   texture.setMinFilter(Texture.MULTI_LEVEL_POINT);
30.
31.   appear.setTexture(texture);

.�Filtros de Reducci�n para M�ltiples Niveles de Textura

Adem�s de los dos filtros de nivel base, hay dos opciones de m�ltiples filtros para la configuraci�n del filtro de reducci�n. Estas configuraciones adicionales son MIPMAP_POINT, y MIPMAP_LINEAR. Como con las otras configuraciones de filtro, el filtro de punto es probable que cree im�genes m�s r�pidas pero de una calidad m�s baja con respecto al filtro linear.

Recuerda, cuando usamos m�ltiples niveles de textura, debemos seleccionar uno de los filtros de m�ltiples niveles para el filtro de reducci�n para utilizar otros niveles distintos del nivel base. Estas configuraciones adicionales de filtro no se aplican a las configuraciones de filtro de ampliaci�n puesto que la ampliaci�n de la textura se har�a solamente en el nivel base.

.�Modo Mipmap

El modo MIPmap de la clase Texture es realmente una elecci�n entre varios niveles de textura y un s�lo nivel de textura. Las dos selecciones son BASE_LEVEL y MULTI_LEVEL_MIPMAP.

.�API de Texture, Texture2D, y Texture3d

Muchas de las secciones precedentes presentan algunas porciones de las clases Texture, Texture2D, o Texture3d. Puesto que estas clases se han descrito en muchas secciones, el API de estas clases se presenta en esta secci�n.

Texture es la clase base para Texture2D y Texture3d. La clase Texture proporciona la mayor�a del interfaz para las clases Texture2D y Texture3d incluyendo texturado multi-nivel. La siguiente tabla presenta un resumen de las caracter�sticas de estas tres clases. Para cada opci�n de texturado la tabla lista la clase que proporciona al interface, el m�todo (set) para cambiar la configuraci�n y el valor por defecto

Caracter�stica/Selecci�n Clase M�todos set Valor Defecto
Texture Image Texture setImage() null
Image Format Texture (ver constructores) none
Mipmap Mode Texture setMipMapMode() BASE_LEVEL
Minification Filter Texture setMinFilter() BASE_LEVEL_POINT
Magnification Filter Texture setMagFilter() BASE_LEVEL_POINT
Boundary Modes Texture
Texture2D
Texture3d
setBoundaryModeS()
setBoundaryModeT()
setBoundaryModeR()
WRAP
WRAP
WRAP
BoundaryColor Texture setBoundaryColor() black

.�Filtros de Reducci�n y Ampliaci�n

Seg�n lo discutido anteriormente hay configuraciones separadas de filtros para reducci�n y ampliaci�n. Las opciones de ampliaci�n son: BASE_LEVEL_POINT, BASE_LEVEL_LINEAR, FASTEST, o NICEST. El filtro ser� BASE_LEVEL_POINT cuando se especifique FASTEST y BASE_LEVEL_LINEAR cuando se especifique NICEST.

Las opciones de reducci�n son: BASE_LEVEL_POINT, BASE_LEVEL_LINEAR, MULTI_LEVEL_POINT, MULTI_LEVEL_LINEAR, FASTEST, o NICEST. Las opciones de filtro de nivel base se pueden utilizar para las texturas de un s�lo nivel o texturas de varios niveles. Los filtros reales usados cuando se especifica FASTEST o NICEST se implementan dependiendo de si se elige un filtro multi-nivel o una textura de m�ltiples niveles.

.�API Texture

Ahora que se han presentado todas las caracter�sticas de la textura, presentamos el API de la clase Texture. Como esta es una clase abtracta no hay bloque de referencia sobre sus constructores.

Sumario de Campos de la Clase Texture

El objeto Texture es un componente de un objeto Appearance que define las propiedades de la textura usada cuando se activa el mapeo de texturas. El objeto Texture es una clase abstracta y todos sus objetos se deben crear usando objetos Texture2D o Texture3d.

Constantes de Formato

  • ALPHA Especifica la textura que s�lo contiene valores Alpha.
  • INTENSITY Especifica la textura que s�lo contiene valores Intensity.
  • LUMINANCE Especifica la textura que s�lo contiene valores Luminance.
  • LUMINANCE_ALPHA Especifica la textura que contiene valores Luminance y Alpha.
  • RGB Especifica la textura que contiene valores de color Red, Green y Blue.
  • RGBA Especifica la textura que contiene valores de color Red, Green, Blue y valor Alpha.

Constantes de modo MIPMap

  • BASE_LEVEL Indica que el objeto Texture s�lo tiene un nivel.
  • MULTI_LEVEL_MIPMAP El objeto Texture tiene varios niveles - uno por cada nivel mipmap.

Constantes de Filtro

  • BASE_LEVEL_LINEAR Realiza interpolaci�n bilinear sobre los cuatro texels m�s cercanos en el nivel 0 del mapa de textura.
  • BASE_LEVEL_POINT Selecciona el texel m�s cernano en el nivel 0 del mapa de textura.
  • MULTI_LEVEL_LINEAR Realiza interpolaci�n tri-linear sobre los cuatro texels m�s cercanos de los dos niveles de mipmap m�s cercanos.
  • MULTI_LEVEL_POINT Selecciona el texel m�s cercano en el mipmap m�s cercano.

Constantes de Modo de L�mites

  • CLAMP Encierra las coordenadas de textura para que est�n en el rango [0, 1].
  • WRAP Repite la envoltura envolviendo las coordenadas de textura que est�n fuera del rango [0,1].

Constantes del Modo de Correcci�n de la Perspectiva

  • FASTEST Usa el m�todo m�s r�pido disponible para procesar la geometr�a.
  • NICEST Usa el m�todo de mejor apariencia disponible para procesar la geometr�a.

Sumario de M�todos de la Clase Texture

El objeto Texture es un componente de un objeto Appearance que define las propiedades de la textura usada cuando se activa el mapeo de texturas. El objeto Texture es una clase abstracta y todos sus objetos se deben crear usando objetos Texture2D o Texture3d.

ImageComponent getImage(int level)

Obtiene el nivel de mipmap especificado.

void setBoundaryColor(Color4f boundaryColor)
void setBoundaryColor(float r, float g, float b, float a)

Selecciona el color l�mite de la textura para este objeto.

void setBoundaryModeS(int boundaryModeS)

Selecciona el modo de l�mites para la coordenada S en este objeto texture.

void setBoundaryModeT(int boundaryModeT)

Selecciona el modo de l�mites para la coordenada T en este objeto texture.

void setEnable(boolean state)

Activa o desactiva el mapeo de textura para este objeto appearance.

void setImage(int level, ImageComponent image)

Selecciona un nivel de mipmap especificado.

void setMagFilter(int magFilter)

Selecciona la funci�n de filtro de ampliaci�n.

void setMinFilter(int minFilter)

Selecciona la funci�n de filtro de reducci�n.

void setMipMapMode(int mipmapMode)

Selecciona el modo mipmap para el mapeo de textura de este objeto texture.

Sumario de Capacidades de la Clase Texture

  • ALLOW_BOUNDARY_COLOR_READ
    Permite leer su informaci�n de color de l�mite.
  • ALLOW_BOUNDARY_MODE_READ
    Permite leer su informaci�n de modo de l�mite.
  • ALLOW_ENABLE_READ | WRITE
    Permite leer/escribir su bandera de enable.
  • ALLOW_FILTER_READ
    Permite leer su informaci�n de filtro.
  • ALLOW_IMAGE_READ
    Permite leer su informaci�n de componente imagen.
  • ALLOW_MIPMAP_MODE_READ
    Permite leer su informaci�n de modo de mipmap.

.�API de Texture2D

Texture2D es una extensi�n concreta de la clase abstracta Texture. Texture2D s�lo porporciona un constructor de inter�s. Todos los m�todos usados con objetos Texture2D son m�todos de Texture.

Sumario de Constructores de la Clase Texture2D

Texture2D es una subclase de la clase Texture. Extiende la clase Texture a�adiendo un constructor.

Texture2D(int mipmapMode, int format, int width, int height)

Construye un objeto Texture2D vac�o con los valores especificados de mipmapMode, format, width, y height. La imagen del nivel 0 la debe seleccionar la aplicaci�n usando el m�todo setImage. Si mipmapMode se selecciona a MULTI_LEVEL_MIPMAP, se deben seleccionar las im�genes para TODOS los niveles.

Par�metros:

  • mipmapMode - tipo mipmap para este Texture: Uno de BASE_LEVEL, MULTI_LEVEL_MIPMAP.
  • format - formato de datos de las texturas grabadas en el objeto. Uno de INTENSITY, LUMINANCE, ALPHA, LUMINANCE_ALPHA, RGB, RGBA.
  • width - anchura de la imagen del nivel 0. Debe ser una potencia de 2.
  • height - altura de la imagen del nivel 0. Debe ser una potencia de 2.

.�API de Texture3d

Texture3D es una extensi�n concreta de la clase abstracta Texture. Texture3D s�lo porporciona un constructor de inter�s. Todos los m�todos usados con objetos Texture3D son m�todos de Texture.

Sumario de Constructores de la Clase Texture3d

Texture3d es una subclase de la clase Texture. Extiende la clase Texture a�adiendo una tercera coordenada, un constructor y un m�todo mutador para seleccionar una imagen de textura 3D.

Texture3d(int mipmapMode, int format, int width, int height, int depth)

Construye un objeto Texture2D vac�o con los valores especificados de mipmapMode, format, width, height y depth. La imagen del nivel 0 la debe seleccionar la aplicaci�n usando el m�todo setImage. Si mipmapMode se selecciona a MULTI_LEVEL_MIPMAP, se deben seleccionar las im�genes para TODOS los niveles.

Par�metros:

  • mipmapMode - tipo mipmap para esta Texture: Uno de BASE_LEVEL, MULTI_LEVEL_MIPMAP.
  • format - formato de datos de las texturas grabadas en el objeto. Uno de INTENSITY, LUMINANCE, ALPHA, LUMINANCE_ALPHA, RGB, RGBA.
  • width - anchura de la imagen del nivel 0. Debe ser una potencia de 2.
  • height - altura de la imagen del nivel 0. Debe ser una potencia de 2.
  • depth - profundidad de la imagen del nivel 0. Debe ser una potencia de 2.

Sumario de M�todos de la Clase Texture3d

void setBoundaryModeR(int boundaryModeR)

Selecciona el modo de l�mite para la coordenada R de este objeto texture.

Par�metro:

  • boundaryModeR - el modo de l�mite para la coordenada R, uno de: CLAMP o WRAP.

.�API de TextureLoader y NewTextureLoader

Esta secci�n lista los bloques de referencia de las clases TextureLoader y NewTextureLoader.

La clase NewTextureLoader extiende la clase TextureLoader proporcionando una utilidad de cargador de texturas m�s f�cil de utilizar -- una que no requiere un observador de imagen del AWT para cada constructor.

.�API de TextureLoader

Sumario de Campos de TextureLoader

GENERATE_MIPMAP

Bandera opcional - especifica los mipmaps generados para todos los niveles.

El siguiente bloque de referencia lista algunos constructores de la clase TextureLoader. Hay m�s constructores que no se listan en este bloque de referencia que permiten la carga de im�genes de textura desde otras fuentes. Puedes consultar la especificaci�n del API Java 3D para ver una lista completa de todos los constructores.

Lista Parcial de Constructores de la Clase TextureLoader

Extiende: java.lang.Object

Paquete: com.sun.j3d.utils.image

Esta clase se usa para cargar una textura desde un objeto Image o BufferedImage. Se proporcionan m�todos para recuperar el objeto Texture y el objeto ImageComponent asociado o una versi�n escalada del objeto ImageComponent.

El formato por defecto es RGBA.

Otros formatos legales son: RGBA, RGBA4, RGB5_A1, RGB, RGB4, RGB5, R3_G3_B2, LUM8_ALPHA8, LUM4_ALPHA4, LUMINANCE y ALPHA

TextureLoader(java.lang.String fname, java.awt.Component observer)
TextureLoader(java.lang.String fname, int flags, java.awt.Component observer)

Contruye un objeto TextureLoader usando el fichero especificado, la opci�n flags y el formato por defecto RGBA.

TextureLoader(java.net.URL url, java.awt.Component observer)
TextureLoader(java.net.URL url, int flags, java.awt.Component observer)

Construye un objeto TextureLoader usando la URL especificada, opci�n flags y el formato por defecto RGBA.

Sumario de M�todos de la Clase TextureLoader

ImageComponent2D getImage()

Devuelve el objeto ImageComponent2D asociado.

ImageComponent2D getScaledImage(float xScale, float yScale)

Devuelve el objeto ImageComponent2D escalado.

ImageComponent2D getScaledImage(int width, int height)

Devuelve el objeto ImageComponent2D escalado.

Texture getTexture()

Devuelve el objeto Texture asociado.

.�API de NewTextureLoader

La raz�n de utilizar NewTexureLoader es evitar la necesidad de un observador de imagen para construir un cargador de textura. El siguiente boque de referencia enumera algunos constructores de la clase NewTextureLoader. NewTextureLoader tiene los mismos constructores que TextureLoader excepto en que ninguno requiere un componente del awt para servir como el observador de imagen.

Lista Parcial de Constructores de la Clase NewTextureLoader

Extiende: com.sun.j3d.utils.image.TextureLoader

Esta clase se usa para cargar una textura desde un fichero o una URL. Esta clase se diferencia de com.sun.j3d.util.image.TextureLoader s�lo en la ausencia de un observador de imagen en el constructor y en el m�todo para selecccionar un s�lo observador de imagen para todos los usos posteriores.

NewTextureLoader(java.lang.String fname)
NewTextureLoader(java.lang.String fname, int flags)

Construye un objeto TextureLoader usando el fichero especificado, opci�n flags y el formato po defecto RGBA.

NewTextureLoader(java.net.URL url)
NewTextureLoader(java.net.URL url, int flags)

Construye un objeto TextureLoader usando la URL especificada, opci�n flags y el formato por defecto RGBA.

El siguiente bloque de referencia lista los dos m�todos definidos en la clase NewTextureLoader. Todos los dem�s m�todos est�n definidos por la clase TextureLoader. Para usar un objeto NewTextureLoader se debe seleccionar primero un observador de imagen. Esto se hace normalmente cuando se crea el objeto Canvas3d.

Lista Parcial de M�todos de la Clase NewTextureLoader

java.awt.component getImageObserver()

Devuelve el objeto awt.component usado como el observador de imagen para los objetos NewTextureLoader.

void setImageObserver(java.awt.component imageObserver)

Selecciona un objeto awt.component como el objeto a usar como observador de imagen en la construcci�n de los siguientes objetos NewTextureLoader.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO