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, },
};
Связанные темы