texcoord - ps
將紋理座標資料 (UVW1) 解譯為 RGBA) (色彩資料。
Syntax
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 會從紋理座標集 x 擷取其中三個值 (xyz) ,而 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) 通道。 Alpha 色板設定為 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, },
};
相關主題