texcoord - ps

Интерпретирует данные координат текстуры (UVW1) как данные цвета (RGBA).

Синтаксис

texcoord dst

 

where

  • dst — это регистр назначения.

Комментарии

Версии шейдера пикселей 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texcoord x x x

 

Эта инструкция интерпретирует набор координат текстуры (UVW1), соответствующий номеру регистра назначения, как данные цвета (RGBA). Если набор координат текстуры содержит менее трех компонентов, отсутствующим компонентам присваивается значение 0. Четвертый компонент всегда имеет значение 1. Все значения зажаты в диапазоне от 0 до 1.

Преимущество texcoord заключается в том, что он предоставляет способ передачи данных вершин, интерполированных с высокой точностью, непосредственно в пиксельный шейдер. Однако при записи данных в целевой регистр некоторая точность будет потеряна в зависимости от количества битов, используемых оборудованием для регистров.

Эта инструкция не использует текстуру. Применимы только координаты текстуры, заданные на этом этапе текстуры.

Любые данные текстуры (например, положение, норма и направление источника света) могут быть сопоставлены вершинным шейдером с координатами текстуры. Это делается путем связывания текстуры с регистром текстуры с помощью SetTexture и указания способа выборки текстуры с помощью SetTextureStageState. Если используется конвейер фиксированной функции, обязательно укажите флаг TSS_TEXCOORDINDEX.

Эта инструкция используется следующим образом:

texcoord tn

Регистр координат текстуры (tn) содержит четыре значения цвета (RGBA). Данные также можно рассматривать как векторные данные (xyzw). texcoord извлекает три из этих значений (xyz) из набора координат текстуры x, а четвертый компонент (w) имеет значение 1. Адрес текстуры копируется из набора координат текстуры n. Результат зажимается в диапазоне от 0 до 1.

Данный пример служит только для демонстрационных целей. Код C, сопровождающий шейдер, не оптимизирован для производительности.

Ниже приведен пример шейдера, использующий 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

Выходные данные пиксельного шейдера отрисованы на следующем рисунке. Значения координат (u,v,w,1) сопоставляют с каналами (rgb). Альфа-канал имеет значение 1. В углах иллюстрации координата (0,0,0,1) интерпретируется как черная; (1,0,0,1) красный; (0,1,0,1) зеленый; и (1,1,0,1) содержит зеленый и красный цвета, образуя желтый цвет.

Иллюстрация отображаемых выходных данных примера пиксельного шейдера

Для использования этого шейдера требуется дополнительный код, и ниже приведен пример сценария.

// 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, },
};

Инструкции по шейдеру пикселей