Compartilhar via


texcoord - ps

Interpreta os dados de coordenadas de textura (UVW1) como dados de cor (RGBA).

Sintaxe

texcoord dst

 

onde

  • dst é o registro de destino.

Comentários

Versões do sombreador de pixel 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texcoord x x x

 

Esta instrução interpreta o conjunto de coordenadas de textura (UVW1) correspondente ao número de registro de destino como dados de cor (RGBA). Se o conjunto de coordenadas de textura contiver menos de três componentes, os componentes ausentes serão definidos como 0. O quarto componente é sempre definido como 1. Todos os valores são fixados entre 0 e 1.

A vantagem do texcoord é que ele fornece uma maneira de passar dados de vértice interpolados em alta precisão diretamente para o sombreador de pixel. No entanto, quando os dados forem gravados no registro de destino, alguma precisão será perdida, dependendo do número de bits usados pelo hardware para registros.

Nenhuma textura é amostrada por esta instrução. Somente as coordenadas de textura definidas nesse estágio de textura são relevantes.

Qualquer dado de textura (como posição, normal e direção da fonte de luz) pode ser mapeado por um sombreador de vértice em uma coordenada de textura. Isso é feito associando uma textura a um registro de textura usando SetTexture e especificando como a amostragem de textura é feita usando SetTextureStageState. Se o pipeline de função fixa for usado, certifique-se de fornecer o sinalizador TSS_TEXCOORDINDEX.

Esta instrução é usada da seguinte maneira:

texcoord tn

Um registro de coordenadas de textura (tn) contém quatro valores de cor (RGBA). Os dados também podem ser considerados como dados de vetor (xyzw). texcoord recuperará três desses valores (xyz) do conjunto de coordenadas de textura x e o quarto componente (w) é definido como 1. O endereço de textura é copiado do conjunto de coordenadas de textura n. O resultado é fixado entre 0 e 1.

Este exemplo é apenas uma ilustração. O código C que acompanha o sombreador não foi otimizado para desempenho.

Aqui está um sombreador de exemplo usando texcoord.

ps_1_1        ; version instruction
texcoord t0   ; declare t0 hold texture coordinates, 
              ; which represent rgba values in this example
mov r0, t0    ; move the color in t0 to output register r0

A saída renderizada do sombreador de pixel é mostrada na ilustração a seguir. Os valores de coordenadas (u,v,w,1) são mapeados para os canais (rgb). O canal alfa é definido como 1. Nos cantos da ilustração, a coordenada (0,0,0,1) é interpretada como preta; (1,0,0,1) é vermelho; (0,1,0,1) é verde; e (1,1,0,1) contém verde e vermelho, produzindo amarelo.

ilustração da saída renderizada do sombreador de pixel de exemplo

Código adicional é necessário para usar esse sombreador e um cenário de exemplo é mostrado abaixo.

// This code creates the shader from a file. The contents of  
// the shader file can also be supplied as a text string.
LPD3DXBUFFER        pCode;

// Assemble the vertex shader from the file
D3DXAssembleShaderFromFile(strPShaderPath, 0, NULL, &pCode, NULL);
m_pd3dDevice->CreatePixelShader((DWORD*)pCode->GetBufferPointer(),
                   &m_hPixelShader);
pCode->Release();

// This code defines the object vertex data
struct CUSTOMVERTEX
{
    FLOAT x, y, z;
    FLOAT tu1, tv1;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1|TEXCOORD2(0))

static CUSTOMVERTEX g_Vertices[]=
{
    //  x      y     z     u1    v1   
    { -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, },
    { +1.0f, -1.0f, 0.0f, 1.0f, 0.0f, },
    { +1.0f, +1.0f, 0.0f, 1.0f, 1.0f, },
    { -1.0f, +1.0f, 0.0f, 0.0f, 1.0f, },
};

Instruções de sombreador de pixel