Partilhar via


Modos de endereçamento de textura (Direct3D 9)

Seu aplicativo Direct3D pode atribuir coordenadas de textura a qualquer vértice de qualquer primitivo. Para obter detalhes, consulte Coordenadas de Textura (Direct3D 9). Normalmente, as coordenadas de textura u e v que você atribui a um vértice estão no intervalo de 0,0 a 1,0 inclusive. No entanto, atribuindo coordenadas de textura fora desse intervalo, você pode criar certos efeitos especiais de texturização.

Você controla o que o Direct3D faz com coordenadas de textura que estão fora do intervalo [0.0, 1.0] definindo o modo de endereçamento de textura. Por exemplo, a aplicação pode definir o modo de endereçamento de texturas de forma que uma textura se torne enquadrada numa primitiva.

O Direct3D permite que os aplicativos executem o encapsulamento de textura. É importante notar que definir o modo de endereçamento de textura como D3DTADDRESS_WRAP não é o mesmo que executar o wrapping de textura. Definir o modo de endereçamento de textura como D3DTADDRESS_WRAP resulta em várias cópias da textura de origem sendo aplicadas à primitiva atual e habilitar o encapsulamento de textura altera a forma como o sistema rasteriza polígonos texturizados. Para obter detalhes, consulte Texture Wrapping (Direct3D 9).

Habilitar o encapsulamento de textura efetivamente torna as coordenadas de textura fora do intervalo [0.0, 1.0] inválidas, e o comportamento para rasterizar essas coordenadas de textura delinquentes é indefinido neste caso. Quando o encapsulamento de textura está habilitado, os modos de endereçamento de textura não são usados. Tenha cuidado para que seu aplicativo não especifique coordenadas de textura inferiores a 0,0 ou superiores a 1,0 quando o encapsulamento de textura estiver habilitado.

Definindo o modo de endereçamento

Você pode definir modos de endereçamento de textura para estágios de textura individuais chamando o IDirect3DDevice9::SetSamplerState método. Especifique o identificador de estágio de textura desejado no parâmetro Sampler. Defina o parâmetro Type para os valores D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV ou D3DSAMP_ADDRESSW para atualizar individualmente os modos de endereçamento u, v ou w. O parâmetro Value determina qual modo está sendo definido. Pode ser qualquer membro do tipo enumerado D3DTEXTUREADDRESS. Para recuperar o modo de endereço de textura atual para um estágio de textura, chame IDirect3DDevice9::GetSamplerState, usando os membros D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV ou D3DSAMP_ADDRESSW da enumeração D3DSAMPLERSTATETYPE para identificar o modo de endereço sobre o qual você deseja obter informações.

Limitações do dispositivo

Embora o sistema geralmente permita coordenadas de textura fora do intervalo de 0,0 e 1,0, inclusive, as limitações de hardware geralmente afetam o quão longe as coordenadas de textura do intervalo podem estar. Um dispositivo de renderização comunica esse limite no membro MaxTextureRepeat da estrutura D3DCAPS9 quando se recuperam as capacidades do dispositivo. O valor neste membro descreve a gama completa de coordenadas de textura permitidas pelo dispositivo. Por exemplo, se esse valor for 128, as coordenadas de textura de entrada devem ser mantidas no intervalo -128,0 a +128,0. Passar vértices com coordenadas de textura fora deste intervalo é inválido. A mesma restrição se aplica às coordenadas de textura geradas como resultado da geração automática de coordenadas de textura e transformações de coordenadas de textura.

A interpretação de MaxTextureRepeat também é afetada pelo bit de capacidade D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE. Quando esse bit é definido, o valor no membro MaxTextureRepeat é usado exatamente como descrito. No entanto, quando D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE não está definido, as limitações de repetição de textura dependem do tamanho da textura indexada pelas coordenadas de textura. Nesse caso, MaxTextureRepeat deve ser dimensionado pelo tamanho de textura atual no maior nível de detalhe para calcular o intervalo de coordenadas de textura válido. Por exemplo, dada uma dimensão de textura de 32 e MaxTextureRepeat de 512, o intervalo de coordenadas de textura válido real é 512/32 = 16, portanto, as coordenadas de textura para este dispositivo devem estar dentro do intervalo de -16,0 a +16,0.

Informações adicionais sobre os modos de endereçamento de textura estão contidas nos tópicos a seguir.

Conceitos Básicos de Texturização