texcoord - ps
Interprète les données de coordonnées de texture (UVW1) comme des données de couleur (RVBA).
Syntaxe
texcoord dst |
---|
where
- dst est le registre de destination.
Notes
Versions du nuanceur de pixels | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texcoord | x | x | x |
Cette instruction interprète le jeu de coordonnées de texture (UVW1) correspondant au numéro de registre de destination en tant que données de couleur (RVBA). Si le jeu de coordonnées de texture contient moins de trois composants, les composants manquants sont définis sur 0. Le quatrième composant est toujours défini sur 1. Toutes les valeurs sont limitées entre 0 et 1.
L’avantage de texcoord est qu’il permet de transmettre des données de vertex interpolées à haute précision directement dans le nuanceur de pixels. Toutefois, lorsque les données sont écrites dans le registre de destination, une certaine précision est perdue, en fonction du nombre de bits utilisés par le matériel pour les registres.
Aucune texture n’est échantillonné par cette instruction. Seules les coordonnées de texture définies à cette étape de texture sont pertinentes.
Toutes les données de texture (telles que la position, la direction normale et la source de lumière) peuvent être mappées par un nuanceur de vertex dans une coordonnée de texture. Pour ce faire, associez une texture à un registre de textures à l’aide de SetTexture et spécifiez comment l’échantillonnage de texture est effectué à l’aide de SetTextureStageState. Si le pipeline de fonction fixe est utilisé, veillez à fournir l’indicateur TSS_TEXCOORDINDEX.
Cette instruction est utilisée comme suit :
texcoord tn
Un registre de coordonnées de texture (tn) contient quatre valeurs de couleur (RVBA). Les données peuvent également être considérées comme des données vectorielles (xyzw). texcoord récupère trois de ces valeurs (xyz) à partir du jeu de coordonnées de texture x, et le quatrième composant (w) a la valeur 1. L’adresse de texture est copiée à partir de l’ensemble de coordonnées de texture n. Le résultat est limité entre 0 et 1.
Cet exemple n'est donné qu'à titre indicatif. Le code C qui accompagne le nuanceur n’a pas été optimisé pour les performances.
Voici un exemple de nuanceur utilisant 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
La sortie rendue du nuanceur de pixels est illustrée dans l’illustration suivante. Les valeurs de coordonnées (u,v,w,1) sont mappées aux canaux (rvb). Le canal alpha est défini sur 1. Aux coins de l’illustration, la coordonnée (0,0,0,1) est interprétée comme noire; (1,0,0,1) est rouge; (0,1,0,1) est vert; et (1,1,0,1) contient du vert et du rouge, ce qui produit du jaune.
Un code supplémentaire est nécessaire pour utiliser ce nuanceur et un exemple de scénario est présenté ci-dessous.
// 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, },
};
Rubriques connexes