Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os dispositivos Direct3D podem transformar as coordenadas de textura para vértices aplicando uma matriz 4x4. O sistema aplica transformações às coordenadas de textura da mesma maneira que a geometria. Qualquer transformação (escala, rotação, translação, projeção, cisalhamento ou qualquer combinação destes) pode ser feita com uma matriz 4x4.
Observação
O Direct3D não modifica vértices transformados e iluminados. Como resultado, um aplicativo usando vértices transformados e iluminados não pode usar Direct3D para transformar as coordenadas de textura dos vértices.
Os dispositivos que suportam operações de transformação e iluminação aceleradas por hardware (T&L HAL Device) também aceleram a transformação das coordenadas de textura. Quando a aceleração de hardware de transformações não está disponível, otimizações específicas da plataforma no pipeline de geometria do Direct3D se aplicam às transformações de coordenadas de textura.
As transformações de coordenadas de textura são úteis para produzir efeitos especiais, evitando a necessidade de modificar diretamente as coordenadas de textura da sua geometria. Você pode usar matrizes simples de translação ou rotação para animar texturas em um objeto ou pode transformar coordenadas de textura geradas automaticamente pelo Direct3D para simplificar e talvez acelerar efeitos avançados, como texturas projetadas e mapeamento dinâmico de luz. Além disso, você pode usar transformações de coordenadas de textura para reutilizar um único conjunto de coordenadas de textura para várias finalidades, em vários estágios de textura.
Definindo e recuperando transformações de coordenadas de textura
Como as matrizes que seu aplicativo usa para geometria, você define e recupera transformações de coordenadas de textura chamando o IDirect3DDevice9::SetTransform e IDirect3DDevice9::GetTransform métodos. Esses métodos aceitam o D3DTS_TEXTURE0 através de D3DTS_TEXTURE7 membros do tipo enumerado D3DTRANSFORMSTATETYPE para identificar as matrizes de transformação para os estágios de textura 0 a 7, respectivamente.
O código a seguir define uma matriz a ser aplicada às coordenadas de textura para o estágio de textura 0.
// 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 );
Habilitando transformações de coordenadas de textura
O D3DTSS_TEXTURETRANSFORMFLAGS estado do estágio de textura controla a aplicação de transformações de coordenadas de textura. Os valores para esse estado de estágio de textura são definidos pelo D3DTEXTURETRANSFORMFLAGS tipo enumerado.
As transformações de coordenadas de textura são desabilitadas quando D3DTSS_TEXTURETRANSFORMFLAGS é definido como D3DTTFF_DISABLE (o valor padrão). Supondo que as transformações de coordenadas de textura foram habilitadas para o estágio 0, o código a seguir as desabilita.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_DISABLE );
Os outros valores definidos em D3DTEXTURETRANSFORMFLAGS são usados para habilitar transformações de coordenadas de textura e para controlar quantos elementos de coordenadas de textura resultantes são passados para o rasterizador. Por exemplo, pegue o código a seguir.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2 );
O valor D3DTTFF_COUNT2 instrui o sistema a aplicar o conjunto de matrizes de transformação para o estágio de textura 0 e, em seguida, passar os dois primeiros elementos das coordenadas de textura modificadas para o rasterizador.
O sinalizador de transformação de textura D3DTTFF_PROJECTED indica coordenadas para uma textura projetada. Quando esse sinalizador é especificado, o rasterizador divide os elementos passados pelo último elemento. Pegue o código a seguir, por exemplo.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );
Este exemplo informa o sistema para passar três elementos de coordenadas de textura para o rasterizador. O rasterizador divide os dois primeiros elementos pelo terceiro, produzindo as coordenadas de textura 2D necessárias para abordar a textura.
Tópicos relacionados