次の方法で共有


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) として解釈します。 テクスチャ座標セットに含まれるコンポーネントが 3 つ未満の場合、不足しているコンポーネントは 0 に設定されます。 4 番目のコンポーネントは常に 1 に設定されます。 すべての値は 0 から 1 の間でクランプされます。

texcoord の利点は、高精度で補間された頂点データをピクセル シェーダーに直接渡す方法を提供することです。 ただし、データが宛先レジスタに書き込まれると、ハードウェアでレジスタに使用されるビット数に応じて、ある程度の精度が失われます。

この命令ではテクスチャはサンプリングされません。 このテクスチャ ステージで設定されたテクスチャ座標のみが関連します。

テクスチャ データ (位置、法線、光源の方向など) は、頂点シェーダーによってテクスチャ座標にマップできます。 これを行うには、 SetTexture を使用してテクスチャをテクスチャ レジスタに関連付け、 SetTextureStageState を使用してテクスチャ サンプリングを実行する方法を指定します。 固定関数パイプラインを使用する場合は、必ず TSS_TEXCOORDINDEX フラグを指定してください。

この命令は次のように使用されます。

texcoord tn

テクスチャ座標レジスタ (tn) には、4 つのカラー値 (RGBA) が含まれています。 また、データはベクター データ (xyzw) と考えることができます。 texcoord はテクスチャ座標セット x からこれらの 3 つの値 (xyz) を取得し、4 番目のコンポーネント (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, },
};

ピクセル シェーダーの手順