Compartilhar via


Disposição de textura (Direct3D 9)

Resumindo, a disposição da textura altera a maneira básica pela qual o Direct3D rasteriza polígonos texturizados usando as coordenadas de textura especificadas para cada vértice. Durante a rasterização de um polígono, o sistema faz a interpolação entre as coordenadas de textura em cada um dos vértices do polígono para determinar os texels que devem ser usados para cada pixel do polígono. Normalmente, o sistema trata a textura como um plano 2D, interpolando novos texels pegando a rota mais curta do ponto A de uma textura ao ponto B. Se o ponto A representar a posição u, v (0.8, 0.1) e o ponto B estiver em (0.1,0.1), a linha de interpolação terá a aparência do diagrama a seguir.

diagrama de uma linha de interpolação entre dois pontos

Observe que a distância mais curta entre A e B nesta ilustração passa basicamente pelo meio da textura. Habilitar o encapsulamento das coordenadas de textura u ou textura v muda a forma como o Direct3D identifica a rota mais curta entre as coordenadas de textura na direção u e na direção v. Por definição, o encapsulamento de textura faz com que o rasterizador pegue a rota mais curta entre os conjuntos de coordenadas de textura, presumindo que 0.0 e 1.0 sejam coincidentes. O último bit é a parte complicada: você pode imaginar que habilitar o encapsulamento de textura em uma direção faz com que o sistema trate uma textura como se estivesse encapsulada em um cilindro. Por exemplo, considere o seguinte diagrama:

diagrama de uma textura e dois pontos encapsulados em um cilindro

A ilustração anterior mostra como o encapsulamento na direção u afeta a forma como o sistema interpola as coordenadas de textura. Usando os mesmos pontos do exemplo para texturas normais, ou não encapsuladas, você pode ver que a rota mais curta entre os pontos A e B não está mais no meio da textura; agora está na borda em que 0.0 e 1.0 coexistem. O encapsulamento na direção v é similar, exceto que ele encapsula a textura em torno de um cilindro disposto de lado. O encapsulamento na direção u e na direção v é mais complexo. Nessa situação, você pode imaginar a textura como uma tora ou rosca.

A aplicação prática mais comum do encapsulamento de textura é executar o mapeamento do ambiente. Geralmente, um objeto texturizado com um mapa do ambiente parece muito refletivo, mostrando uma imagem espelhada dos arredores do objeto na cena. Para o âmbito desta discussão, imagine uma sala com quatro paredes, cada uma delas pintada com uma letra R, G, B, Y e as cores correspondentes: vermelho, verde, azul e amarelo. O mapa do ambiente para essa sala simples pode se parecer com a ilustração a seguir.

ilustração de faixas verticais de vermelho, verde, azul e amarelo

Imagine que o teto da sala seja sustentado por um pilar quadrilátero perfeitamente refletivo. Mapear a textura do mapa do ambiente para o pilar é simples; fazer o pilar parecer que está refletindo as letras e as cores não é tão fácil. O diagrama a seguir mostra um esboço do pilar com as coordenadas de textura aplicáveis listadas próximo aos vértices superiores. A fenda onde o encapsulamento cruzará as bordas da textura é mostrada com uma linha pontilhada.

diagrama de um retângulo com uma linha pontilhada bifurcada

Com o encapsulado habilitado na direção u, o pilar texturizado mostra as cores e os símbolos do mapa do ambiente adequadamente e, na fenda na frente da textura, o rasterizador escolhe corretamente a rota mais curta entre as coordenadas de textura, presumindo que as coordenadas u 0.0 e 1.0 compartilhem o mesmo local. O pilar texturizado se parece com a ilustração a seguir.

ilustração de um pilar que consiste em quadrantes nas cores vermelho, verde, azul e amarelo

Se o encapsulamento de textura não estiver habilitado, o rasterizador não fará a interpolação na direção necessária para gerar uma imagem refletida verossímil. Em vez disso, a área na frente do pilar contém uma versão compactada horizontalmente dos texels entre as coordenadas u 0.175 e 0.875, pois passam pelo centro da textura. O efeito de encapsulamento está arruinado.

Usando disposição de textura

Para habilitar o encapsulamento de textura, chame o método IDirect3DDevice9::SetRenderState , conforme mostrado no exemplo de código abaixo.

d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);

O primeiro parâmetro aceito por IDirect3DDevice9::SetRenderState é um estado de renderização a ser definido. Especifique um dos D3DRS_WRAP0 por meio de D3DRS_WRAP7 valores enumerados que especificam para qual nível de textura definir o encapsulamento. Especifique o D3DWRAPCOORD_0 por meio de sinalizadores D3DWRAPCOORD_3 no segundo parâmetro para habilitar a disposição da textura na direção correspondente ou combiná-los para habilitar o encapsulamento em várias direções. Se você omitir um sinalizador, a disposição da textura na direção correspondente será desabilitada. Para desabilitar a disposição de textura para um conjunto de coordenadas de textura, defina o valor do estado de renderização correspondente como 0.

Não confunda encapsulamento de textura com os modos de endereçamento de textura de nomes similares. O encapsulamento de textura é executado antes do endereçamento de textura. Verifique se os dados de disposição da textura não contêm nenhuma coordenada de textura fora do intervalo de [0,0, 1,0] porque isso produzirá resultados indefinidos. Para obter mais informações sobre endereçamento de textura, consulte Modos de endereçamento de textura (Direct3D 9).

Disposição do mapa de deslocamento

Os mapas de deslocamento são interpolados pelo mecanismo de mosaico. Como o modo de encapsulamento não pode ser especificado para o mecanismo de mosaico, o encapsulamento de textura não pode ser executado com mapas de deslocamento. Um aplicativo é capaz de usar um conjunto de vértices que força a interpolação para encapsular em qualquer direção. O aplicativo também pode especificar a interpolação para ser feita como uma simples interpolação linear.

Texturas Direct3D