Direct X Shader Programming 3 1 High Level

  • Slides: 23
Download presentation
Direct. X Shader Programming 제 3 주차 1. High Level Shader Language 2. 램버트

Direct. X Shader Programming 제 3 주차 1. High Level Shader Language 2. 램버트 확산 조명

High Level Shader Language Direct. X의 버전이 높아짐 셰이더 확장 복잡도 증가 High Level

High Level Shader Language Direct. X의 버전이 높아짐 셰이더 확장 복잡도 증가 High Level Shader Language 등 장

전역 변수의 선언 //전역변수 선언 float 4 x 4 m. MWP; //로컬 좌표 변환

전역 변수의 선언 //전역변수 선언 float 4 x 4 m. MWP; //로컬 좌표 변환 //텍스쳐 texture Tex; // 텍스쳐 정보 sample Samp { Texture = Min. Filter Mip. Filter Address. U }; = sampler_state <Tex>; = LINEAR; Mag. Filter = LINEAR; = NONE; = CLAMP; Address. V = CLAMP;

정점 셰이더 출력용 구조체 struct VS_OUTPUT 다른 용도로도 사용 가능 { float 4 Pos

정점 셰이더 출력용 구조체 struct VS_OUTPUT 다른 용도로도 사용 가능 { float 4 Pos : POSITION float 2 Tex. Coord : TEXCOORD 0 } 시멘틱스 : 출력레지스터에 대응 POSITION o. POS TEXCOORD 0 o. T 0

정점 셰이더 사용 VS_OUTPUT VS( float 4 Pos : POSITION float 2 Tex. Coord

정점 셰이더 사용 VS_OUTPUT VS( float 4 Pos : POSITION float 2 Tex. Coord : TEXCOORD 0 ){ VS_OUTPUT Out = (VS_OUTPUT) = 0; Out. Pos = mul(Pos, m. WVP); Out. Tex. Coord = Tex; return Out; }

픽셀 셰이더 사용 float 4 PS( VS_OUTPUT In ) : COLOR { return tex

픽셀 셰이더 사용 float 4 PS( VS_OUTPUT In ) : COLOR { return tex 2 D( Samp, In. Tex. Coord ); } Tex 2 D 샘플러에 등록되어 있는 텍스쳐를 읽어옴

테크닉 tenique TShader { pass P 0 { Vertex. Shader = compile vs_1_1 VS();

테크닉 tenique TShader { pass P 0 { Vertex. Shader = compile vs_1_1 VS(); Pixel. Shader = compile ps_1_1 PS(); } }

Create Effect #1 HRESULT D 3 DXCreate. Effect. From. File( LPDIRECT 3 DDEVICE 9

Create Effect #1 HRESULT D 3 DXCreate. Effect. From. File( LPDIRECT 3 DDEVICE 9 p. Device, // 디바이스 LPCTSTR p. Src. File, // 이펙트 파일 CONST D 3 DXMACRO * p. Defines, // 전처리기 옵션 (null) LPD 3 DXINCLUDE p. Include, // 옵션인터페이스 (null) DWORD Flags , // D 3 DXSHADER 식별용 LPD 3 DXEFFECTPOOL p. Pool, // 이펙트풀 LPD 3 DXEFFECT * pp. Effect, // 셰이더 변수 LPD 3 DXBUFFER * pp. Compilation. Errors // 에러를 저장할 곳 ); 적색을 제외한 나머지 옵션은 NULL을 넣어주면 OK 함수가 제대로 실행되면 S_OK 가 리턴되고, 아니면 에러넘버가 리턴됨

Create Effect #2 D 3 DXCreate. Effect. From. File로 이펙트를 컴파일 Get. Technique. By.

Create Effect #2 D 3 DXCreate. Effect. From. File로 이펙트를 컴파일 Get. Technique. By. Name() 이펙트 파일 내부의 테크닉 핸들을 얻어옴 Get. Parameter. By. Name() 테크닉 내부의 변수를 얻어옴 Technique = Effect->Get. Technique. By. Name( “TShader”); WVP = Effect->get. Parameter. By. Name(NULL, “m. MVP”);

Rendering From Effect File 이펙트 설정 Effect->Set. Technique( Technique ); Effect->Begin( NULL, 0 );

Rendering From Effect File 이펙트 설정 Effect->Set. Technique( Technique ); Effect->Begin( NULL, 0 ); Effect->Pass (0); 셰이더 상수 설정 D 3 DXMATRIX m = world * view * proj; Effect->Set. Matrix( WVP, &m ); ▪ 어셈 셰이더와 달리 전치행렬을 쓰지 않아도 OK Effect->Set. Texture(“Tex”, Mesh->m_Ptextures[0]); 실제 렌더링 pd 3 d. Device->Set. Vertex. Declaration(m_p. Decl); Mesh->Render(pd 3 d. Device); 렌더링 종료 Effect->End();