728x90

※ 제 개인 공부이므로 풀 소스 코드는 작성하지 않습니다.

※ 생략 되어 있는 부분이 많습니다.

 

 

삼각형을 그리기 위한 셋팅들은 전 글인

 

2. 노란 삼각형을 그려보자..(외부 fx파일, 전역, 지역 변수 핸들 개념 등등..) 와 모두 같다.

 

*shader.fx*

 

// External Variable Semantic
float4x4 m_mtWldViw : WORLDVIEW;
float4 pos: POSITION;


// Struct
struct T
{
    float3 pos : POSITION;
    float3 normal;
};


// User Defined Function Semantic
float4 MyFunc( float3 pos: POSITION) : POSITION
{
     return float4(pos, 1);
}


void VtxPrc( in float3 iPos : POSITION, out float4 oPos : POSITION, out float4 oD0 : COLOR)
{
     float4 posLocal: POSITION; // 지역 변수는 Semantic을 붙일 수 없다.

 

     // 구조체 초기화
     struct T v={ {1,2,3}, {4,5,6}};

 

     // vector 형 초기화
     vector<float, 4> Dif  = float4(1,1,0,1);

 

     // vector 형 갱신
     Dif = vector(1, 0, 1, 1);

 

     // boo형 변수
     bool t=true;

 

     // 사용자 정의 함수 call
     oPos = MyFunc(iPos);
     oD0  = Dif;
}

 

Semantic이라고 하는 것은 변수의 입력과 출력을 확인 또는 지정하거나 데이터의 출처와 역할에 의미를 부여하기 위해 함수나, 변수, 인수 뒤에 선택적으로 붙여서 서술하는 것이라고 한다.

 

방법은 간단하다 변수,인수,함수 끝에 콜론( : )을 붙이고 명시할 시맨틱 이름을 붙이면 된다.

 

위 셰이더 코드에서 빨간색으로 되어있는 posLocal 변수는 지역변수인데 지역 변수에는 시맨틱을 붙일 수 없다고 한다.

 

위 코드 대로 셰이더를 컴파일하게 되면 에러가 난다. 시맨틱을 없애거나 변수를 없애면 정상적으로 보라색 삼각형이 나온다. 

 

1.입력에 사용되는 시맨틱s

 

POSITION[n]: 정점의 위치. POSITION, POSITION0, POSITION1, ….

BLENDWEIGHT[n]: 정점 블렌딩 비중 값

BLENDINDICES[n]: 정점 블렌딩 인덱스 값

NORMAL[n]: 정점 법선 벡터

PSIZE[n]: Point Size

COLOR[n]: 정점 Diffuse(COLOR, COLOR0), Specular(COLOR1)

TEXCOORD[n]: 텍스처 좌표

TANGENT[n]: 정점 접선 벡터

BINORMAL[n]: 정점 종법선 벡터

TESSFACTOR[n]: tessellation factor

2.출력에 사용되는 시맨틱s

 

POSITION: 정점의 출력 위치

PSIZE: Point Size

FOG: 정점 포그 값

COLOR[0,1]: Diffuse, Specular

TEXCOORD[0~7]: 텍스처 좌표

 

D3D에서 사용자가 만든 데이터는 출력 레지스터가 없기 때문에 이 데이터를 픽셀 쉐이더로 전달하기 위한 경우 TEXCOORD 출력 시멘틱을 가장 많이 사용하며 TEXCOORD0, TEXCOORD1은 대부분 사용하기 때문에 보통TEXCOORD7부터 TEXCOORD6, TEXCOORD5, … 등을 이용한다고 한다.

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침