共用方式為


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

圖元著色器指示