Compartir a través de


Transformaciones de coordenadas de textura (Direct3D 9)

Los dispositivos Direct3D pueden transformar las coordenadas de textura de los vértices aplicando una matriz 4x4. El sistema aplica transformaciones a las coordenadas de textura de la misma manera que la geometría. Cualquier transformación (escala, rotación, traducción, proyección, escalonar o cualquier combinación de estas) se puede realizar con una matriz de 4x4.

Nota

Direct3D no modifica los vértices transformados y iluminados. Como resultado, una aplicación que usa vértices transformados y iluminados no puede usar Direct3D para transformar las coordenadas de textura de los vértices.

 

Los dispositivos que admiten operaciones de transformación y iluminación aceleradas por hardware (&dispositivo T L HAL) también aceleran la transformación de las coordenadas de textura. Cuando la aceleración de hardware de las transformaciones no está disponible, las optimizaciones específicas de la plataforma en la canalización de geometría de Direct3D se aplican a las transformaciones de coordenadas de textura.

Las transformaciones de coordenadas de textura son útiles para producir efectos especiales, a la vez que evitan la necesidad de modificar directamente las coordenadas de textura de la geometría. Puede usar matrices de traducción o rotación simples para animar texturas en un objeto, o puede transformar las coordenadas de textura generadas automáticamente por Direct3D para simplificar y quizá acelerar efectos avanzados, como texturas proyectadas y asignación dinámica de luz. Además, puede usar transformaciones de coordenadas de textura para reutilizar un único conjunto de coordenadas de textura para varios propósitos, en varias fases de textura.

Establecimiento y recuperación de transformaciones de coordenadas de textura

Al igual que las matrices que usa la aplicación para geometría, se establecen y recuperan transformaciones de coordenadas de textura mediante una llamada a los métodos IDirect3DDevice9::SetTransform e IDirect3DDevice9::GetTransform . Estos métodos aceptan el D3DTS_TEXTURE0 a través de D3DTS_TEXTURE7 miembros del tipo enumerado D3DTRANSFORMSTATETYPE para identificar las matrices de transformación para las fases de textura 0 a 7, respectivamente.

El código siguiente establece una matriz que se aplicará a las coordenadas de textura de la fase 0 de textura.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );

// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );

Habilitación de transformaciones de coordenadas de textura

El estado de fase de textura D3DTSS_TEXTURETRANSFORMFLAGS controla la aplicación de transformaciones de coordenadas de textura. Los valores para este estado de fase de textura se definen mediante el tipo enumerado D3DTEXTURETRANSFORMFLAGS .

Las transformaciones de coordenadas de textura se deshabilitan cuando D3DTSS_TEXTURETRANSFORMFLAGS se establece en D3DTTFF_DISABLE (el valor predeterminado). Suponiendo que las transformaciones de coordenadas de textura se habilitaron para la fase 0, el código siguiente los deshabilita.

// For this example, assume the d3dDevice variable contains a 
// valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_DISABLE );

Los demás valores definidos en D3DTEXTURETRANSFORMFLAGS se usan para habilitar transformaciones de coordenadas de textura y para controlar cuántos elementos de coordenadas de textura resultantes se pasan al rasterizador. Por ejemplo, tome el código siguiente.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT2 );

El valor de D3DTTFF_COUNT2 indica al sistema que aplique la matriz de transformación establecida para la fase 0 de textura y, a continuación, pase los dos primeros elementos de las coordenadas de textura modificadas al rasterizador.

La marca de transformación de textura D3DTTFF_PROJECTED indica las coordenadas de una textura proyectada. Cuando se especifica esta marca, el rasterizador divide los elementos pasados por el último elemento. Tome el código siguiente, por ejemplo.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );

En este ejemplo se informa al sistema de pasar tres elementos de coordenadas de textura al rasterizador. El rasterizador divide los dos primeros elementos por tercero, lo que genera las coordenadas de textura 2D necesarias para abordar la textura.

Procesamiento de coordenadas de textura