Compartilhar via


Coordenadas de textura (Direct3D 9)

A maioria das texturas, como bitmaps, é uma matriz bidimensional de valores de cor. Texturas de mapa do ambiente cúbico são uma exceção. Para obter detalhes, consulte Mapeamento de ambiente cúbico (Direct3D 9). Os valores de cor individuais são chamados de elemento de textura ou texel. Cada texel tem um endereço exclusivo na textura. O endereço pode ser considerado como um número de coluna e linha, que são rotulados como você e v, respectivamente, na ilustração a seguir.

ilustração de um endereço texel como números de coluna e linha

As coordenadas de textura estão no espaço de textura. Ou seja, eles são relativos à localização (0,0) na textura. Quando uma textura é aplicada a um primitivo no espaço 3D, seus endereços texel devem ser mapeados em coordenadas de objeto. Em seguida, eles devem ser convertidos em coordenadas de tela ou locais de pixel.

Mapeando Texels para Espaço na Tela

O Direct3D mapeia texels no espaço de textura diretamente para pixels no espaço de tela, ignorando a etapa intermediária para maior eficiência. Esse processo de mapeamento é, na verdade, um mapeamento inverso. Ou seja, para cada pixel no espaço de tela, a posição de texel correspondente no espaço de textura é calculada. A cor da textura em ou ao redor desse ponto é amostrada. O processo de amostragem é chamado de filtragem de textura. Para obter mais informações, consulte Filtragem de textura (Direct3D 9).

Cada texel em uma textura pode ser especificado por sua coordenada texel. No entanto, para mapear texels para primitivos, o Direct3D requer um intervalo de endereços uniforme para todos os texels em todas as texturas. Portanto, ele usa um esquema de endereçamento genérico no qual todos os endereços texel estão no intervalo de 0,0 a 1,0 inclusive. Os aplicativos Direct3D especificam coordenadas de textura em termos de valores v, assim como as coordenadas cartesianas 2D são especificadas em termos de coordenadas x,y. Tecnicamente, o sistema pode realmente processar coordenadas de textura fora do intervalo de 0,0 e 1,0 e faz isso usando os parâmetros definidos para endereçamento de textura. Para obter mais informações, consulte Modos de endereçamento de textura (Direct3D 9).

Um resultado disso é que endereços de textura idênticos podem ser mapeados para diferentes coordenadas texel em diferentes texturas. Na ilustração a seguir, o endereço de textura é (0,5,1,0). No entanto, como as texturas são tamanhos diferentes, o endereço de textura é mapeado para texels diferentes. A textura 1, à esquerda, é 5x5. O endereço de textura (0,5,1.0) é mapeado para texel (2,4). Textura 2, à direita, é 7x7. O endereço de textura (0,5,1,0) é mapeado para texel (3,6).

ilustração do mesmo mapeamento de endereço de textura para texels diferentes em texturas diferentes

Uma versão simplificada do processo de mapeamento texel é mostrada na ilustração a seguir. É certo que este exemplo é extremamente simples. Para obter informações mais detalhadas, consulte Mapeamento direto de texels para pixels (Direct3D 9).

ilustração de pixel (um quadrado de cor) mapeado para o espaço do objeto

Para este exemplo, um pixel, mostrado à esquerda da ilustração, é idealizado em um quadrado de cor. Os endereços dos quatro cantos do pixel são mapeados para o primitivo 3D no espaço do objeto. A forma do pixel geralmente é distorcida devido à forma do primitivo no espaço 3D e por causa do ângulo de exibição. Os cantos da área de superfície no primitivo que correspondem aos cantos do pixel são mapeados para o espaço de textura. O processo de mapeamento distorce a forma do pixel novamente, o que é comum. O valor de cor final do pixel é calculado dos texels na região para a qual o pixel é mapeado. Você determina o método que o Direct3D usa para chegar à cor do pixel ao definir o método de filtragem de textura. Para obter mais informações, consulte Filtragem de textura (Direct3D 9).

Seu aplicativo pode atribuir coordenadas de textura diretamente a vértices. Essa funcionalidade fornece controle sobre qual parte de uma textura é mapeada para um primitivo. Por exemplo, suponha que você crie um primitivo retangular que tenha exatamente o mesmo tamanho que a textura na ilustração a seguir. Neste exemplo, você deseja que seu aplicativo mapeie toda a textura para toda a parede. As coordenadas de textura que seu aplicativo atribui aos vértices do primitivo são (0,0,0,0), (1,0,0,0), (1,0,1,0) e (0,0,1,0).

ilustração de uma parede mapeada por textura

Se você decidir diminuir a altura da parede pela metade, poderá distorcer a textura para caber na parede menor ou atribuir coordenadas de textura que fazem com que o Direct3D use a metade inferior da textura.

Se você decidir distorcer ou dimensionar a textura para caber na parede menor, o método de filtragem de textura que você usa influenciará a qualidade da imagem. Para obter mais informações, consulte Filtragem de textura (Direct3D 9).

Se, em vez disso, você decidir atribuir coordenadas de textura para fazer o Direct3D usar a metade inferior da textura para a parede menor, as coordenadas de textura que seu aplicativo atribui aos vértices do primitivo neste exemplo são (0,0,0,5), (1,0,0,5), (1,0,1,0) e (0,0,1,0). O Direct3D aplica a metade inferior da textura à parede.

É possível que as coordenadas de textura de um vértice sejam maiores que 1,0. Ao atribuir coordenadas de textura a um vértice que não está no intervalo de 0,0 a 1,0 inclusive, você também deve definir o modo de endereçamento de textura. Para obter mais informações, consulte Modos de endereçamento de textura (Direct3D 9).

Coordenadas de textura e estágios de textura

As coordenadas de textura são associadas a texturas por meio de estágios de textura. As texturas são atribuídas a estágios de textura com SetTexture(stageIndex, pTexture). Consulte IDirect3DDevice9::SetTexture.

Um código FVF (Formato de Vértice Flexível) pode definir até oito conjuntos de coordenadas de textura. Os dados da coordenada de textura são fornecidos pelo usuário nos dados de vértice. Os dados são referenciados com um índice baseado em zero: 0 a 7. Há até oito estágios de mesclagem de textura. Uma textura é associada a um estágio específico usando SetTexture( stageIndex, pTexture).

Depois que isso for feito, qualquer conjunto de coordenadas de textura poderá ser usado por qualquer estágio. Cada conjunto de coordenadas é associado a um estágio usando SetTextureStageState( stageIndex, D3DTSS_TEXCOORDINDEX, textureCoordinateIndex ). Consulte IDirect3DDevice9::SetTextureStageState. Dessa forma, os estágios de mesclagem podem ser configurados para usar qualquer textura e qualquer coordenada de textura. Mais de um estágio pode usar as mesmas texturas ou coordenadas de textura.

Informações adicionais estão contidas nos tópicos a seguir.

Texturas Direct3D