Coordenadas de textura (Direct3D 9)

La mayoría de las texturas, como los mapas de bits, son una matriz bidimensional de valores de color. Las texturas de mapa de entorno cúbicos son una excepción. Para obtener más información, vea Cubic Environment Mapping (Direct3D 9) (Asignación de entorno cúbico (Direct3D 9). Los valores de color individuales se denominan elemento de textura o elemento de textura. Cada elemento de textura tiene una dirección única en la textura. La dirección se puede considerar como un número de columna y fila, que se etiquetan como usted y v respectivamente en la ilustración siguiente.

ilustración de una dirección de textura como números de columna y fila

Las coordenadas de textura están en el espacio de textura. Es decir, son relativos a la ubicación (0,0) en la textura. Cuando se aplica una textura a un primitivo en el espacio 3D, sus direcciones de textura deben asignarse a coordenadas de objeto. A continuación, deben traducirse en coordenadas de pantalla o ubicaciones de píxeles.

Asignación de elementos de textura a espacio de pantalla

Direct3D asigna texturas en el espacio de textura directamente a píxeles en el espacio de pantalla, omitiendo el paso intermedio para mejorar la eficacia. Este proceso de asignación es realmente una asignación inversa. Es decir, para cada píxel en el espacio de pantalla, se calcula la posición de textura correspondiente en el espacio de textura. Color de textura en o alrededor de ese punto se muestrea. El proceso de muestreo se denomina filtrado de texturas. Para obtener más información, vea Filtrado de texturas (Direct3D 9).

Cada elemento de textura se puede especificar mediante su coordenada de textura. Sin embargo, para asignar elementos de textura a primitivos, Direct3D requiere un intervalo uniforme de direcciones para todos los elementos de textura. Por lo tanto, usa un esquema de direccionamiento genérico en el que todas las direcciones de elementos de textura están en el intervalo de 0,0 a 1,0 inclusive. Las aplicaciones de Direct3D especifican coordenadas de textura en términos de valores v, al igual que las coordenadas cartesianas 2D, se especifican en términos de coordenadas x,y. Técnicamente, el sistema realmente puede procesar coordenadas de textura fuera del intervalo de 0,0 y 1,0, y lo hace mediante el uso de los parámetros establecidos para el direccionamiento de textura. Para obtener más información, vea Texture Addressing Modes (Direct3D 9) (Modos de direccionamiento de texturas [Direct3D 9]).

Un resultado de esto es que las direcciones de textura idénticas pueden asignarse a diferentes coordenadas de textura en diferentes texturas. En la ilustración siguiente, la dirección de textura es (0,5,1.0). Sin embargo, dado que las texturas son diferentes tamaños, la dirección de textura se asigna a distintos elementos de textura. La textura 1, a la izquierda, es 5x5. La dirección de textura (0,5,1,0) se asigna a textura (2,4). La textura 2, a la derecha, es 7x7. La dirección de textura (0,5,1,0) se asigna a textura (3,6).

ilustración de la misma asignación de direcciones de textura a diferentes texturas en texturas diferentes

En la ilustración siguiente se muestra una versión simplificada del proceso de asignación de elementos de textura. Ciertamente, este ejemplo es extremadamente sencillo. Para obtener información más detallada, vea Asignar directamente elementos de textura a píxeles (Direct3D 9).

ilustración del píxel (un cuadrado de color) asignado al espacio de objetos

En este ejemplo, un píxel, que se muestra a la izquierda de la ilustración, se idealiza en un cuadrado de color. Las direcciones de las cuatro esquinas del píxel se asignan al primitivo 3D en el espacio de objetos. La forma del píxel se distorsiona a menudo debido a la forma del primitivo en el espacio 3D y debido al ángulo de visión. Las esquinas del área expuesta en el primitivo que corresponden a las esquinas del píxel se asignan al espacio de textura. El proceso de asignación distorsiona de nuevo la forma del píxel, que es común. El valor de color final del píxel se calcula desde los elementos de textura de la región a la que se asigna el píxel. Determina el método que Usa Direct3D para llegar al color de píxel al establecer el método de filtrado de texturas. Para obtener más información, vea Filtrado de texturas (Direct3D 9).

La aplicación puede asignar coordenadas de textura directamente a vértices. Esta funcionalidad proporciona control sobre qué parte de una textura se asigna a un primitivo. Por ejemplo, supongamos que crea un primitivo rectangular que es exactamente el mismo tamaño que la textura de la ilustración siguiente. En este ejemplo, quiere que la aplicación asigne toda la textura a toda la pared. Las coordenadas de textura que la aplicación asigna a los vértices del primitivo son (0.0,0.0), (1.0,0.0), (1.0,1.0) y (0,0,1.0).

ilustración de una pared asignada por texturas

Si decide reducir la altura de la pared en una mitad, puede distorsionar la textura para ajustarse a la pared más pequeña, o puede asignar coordenadas de textura que hacen que Direct3D use la mitad inferior de la textura.

Si decide distorsionar o escalar la textura para ajustarse a la pared más pequeña, el método de filtrado de texturas que use influirá en la calidad de la imagen. Para obtener más información, vea Filtrado de texturas (Direct3D 9).

Si, en su lugar, decide asignar coordenadas de textura para que Direct3D use la mitad inferior de la textura para la pared más pequeña, las coordenadas de textura que la aplicación asigna a los vértices del primitivo en este ejemplo son (0,0,0,0,5), (1,0,0,5), (1,0,1,0) y (0,0,1,0). Direct3D aplica la mitad inferior de la textura a la pared.

Es posible que las coordenadas de textura de un vértice sean mayores que 1,0. Al asignar coordenadas de textura a un vértice que no esté en el intervalo de 0,0 a 1,0 inclusive, también debe establecer el modo de direccionamiento de textura. Para obtener más información, vea Texture Addressing Modes (Direct3D 9) (Modos de direccionamiento de texturas [Direct3D 9]).

Coordenadas de textura y fases de textura

Las coordenadas de textura están asociadas a texturas mediante fases de textura. Las texturas se asignan a las fases de textura con SetTexture(stageIndex, pTexture). Consulte IDirect3DDevice9::SetTexture.

Un código de formato de vértice flexible (FVF) puede definir hasta ocho conjuntos de coordenadas de textura. El usuario proporciona los datos de coordenadas de textura en los datos de vértices. Los datos se conocen con un índice de base cero: 0 - 7. Hay hasta ocho fases de mezcla de texturas. Una textura está asociada a una fase determinada mediante SetTexture( stageIndex, pTexture).

Una vez hecho esto, cualquier conjunto de coordenadas de textura se puede usar en cualquier fase. Cada conjunto de coordenadas está asociado a una fase mediante SetTextureStageState( stageIndex, D3DTSS_TEXCOORDINDEX, textureCoordinateIndex ). Consulte IDirect3DDevice9::SetTextureStageState. De este modo, las fases de fusión se pueden configurar para usar cualquier textura y cualquier coordenada de textura. Más de una fase puede usar las mismas texturas o coordenadas de textura.

La información adicional se incluye en los temas siguientes.

Texturas de Direct3D