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, },
};
関連トピック