다음을 통해 공유


texcoord - ps

텍스처 좌표 데이터(UVW1)를 색상 데이터(RGBA)로 해석합니다.

Syntax

texcoord dst

 

라는 설치 관리자 실행 파일에 포함됩니다. 여기서

  • 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으로 설정됩니다. 네 번째 구성 요소는 항상 1로 설정됩니다. 모든 값은 0에서 1 사이로 고정됩니다.

texcoord의 장점은 고정밀도로 보간된 꼭짓점 데이터를 픽셀 셰이더에 직접 전달하는 방법을 제공한다는 것입니다. 그러나 데이터가 대상 레지스터에 기록되면 하드웨어에서 레지스터에 사용하는 비트 수에 따라 일부 정밀도가 손실됩니다.

이 명령으로 텍스처가 샘플링되지 않습니다. 이 텍스처 스테이지에서 설정된 텍스처 좌표만 관련이 있습니다.

모든 텍스처 데이터(예: 위치, 법선 및 광원 방향)는 꼭짓점 셰이더에 의해 텍스처 좌표로 매핑될 수 있습니다. 이렇게 하려면 SetTexture를 사용하여 텍스처 레지스터와 텍스처를 연결하고 SetTextureStageState를 사용하여 텍스처 샘플링을 수행하는 방법을 지정합니다. 고정 함수 파이프라인을 사용하는 경우 TSS_TEXCOORDINDEX 플래그를 제공해야 합니다.

이 명령은 다음과 같이 사용됩니다.

texcoord tn

텍스처 좌표 레지스터(tn)에는 4가지 색상 값(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) 채널에 매핑됩니다. 알파 채널이 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, },
};

픽셀 셰이더 명령