ㅇ hlsl.fx 파일
1 /// 세이더 소스
2
3 float4x4 WorldViewProj;
4
5 /// Vertex 입력 구조체 선언
6 struct VS_INPUT
7 {
8 float4 InPos : POSITION0;
9 };
10
11 /// Vertex 출력 구조체 선언
12 struct VS_OUTPUT
13 {
14 float4 OutPos : POSITION0; 15 };
16
17 VS_OUTPUT vs_main(VS_INPUT Input)
18 {
19 VS_OUTPUT Output;
20
21 Output.OutPos = mul(Input.InPos, WorldViewProj);
22
23 return (Output);
24 }
25
26 float4 ps_main() : COLOR0
27 {
28 return( float4( 1.0f, 0.0f, 0.0f, 1.0f ) );
29
30 }
31
32 technique TShader
33 {
34 pass P0
35 {
36 VertexShader = compile vs_2_0 vs_main();
37 PixelShader = compile ps_2_0 ps_main();
38 }
39 }
ㅇ D3DX 초기화
1 /// 셰이더초기화
2 void D3DX::ShaderInii()
3 {
4 HRESULT hr;
5 /// 이펙트파일처리
6 LPD3DXBUFFER pErr = NULL;
7
8 /// 이펙트파일읽기
9
10 if( FAILED ( hr = D3DXCreateEffectFromFile( m_pd3dDevice, "hlsl.fx", NULL, NULL, 0, NULL, &m_pEffect, &pErr ) ) )
11 {
12 MessageBox( 0, "File Faild", "Error", 0 );
13 pErr->Release();
14 return ;
15 }
16
17 /// 테크닉선언
18 // TShader은hlsl.fx 파일안에서technique가TShader로되어있어야한다.
19 m_hTechnique = m_pEffect->GetTechniqueByName("TShader");
20
21 if ( pErr ) pErr->Release();
22
23 }
24
25 /// 세이더해체
26 void D3DX::ShaderDelete()
27 {
28 //if ( m_hmWVP != NULL) { m_hmWVP = NULL; }
29 if ( m_hTechnique != NULL) { m_hTechnique = NULL; }
30 if ( m_pEffect != NULL ) { m_pEffect->Release(); m_pEffect = NULL; }
31 }
32
33 /// 세이더상수설정
34 void D3DX::ShaderUpate()
35 {
36 D3DXMATRIX mat, _matWorld, _matView, _matProj;
37
38 m_pd3dDevice->GetTransform(D3DTS_WORLD, &_matWorld);
39 m_pd3dDevice->GetTransform(D3DTS_VIEW , &_matView);
40 m_pd3dDevice->GetTransform(D3DTS_PROJECTION, &_matProj);
41
42 mat = _matWorld * _matView * _matProj;
43
44 m_pEffect->SetMatrix("WorldViewProj", &mat);
45
46 }
ㅇ D3DX 렌더링 함수
1 void D3DX::Render()
2 {
3 /// 후면버퍼와Z버퍼초기화
4 m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(200,200,200), 1.0f, 0 );
5
6
7
8 /// 렌더링시작
9 if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
10 {
11 Animate();
12
13 /// 세이더설정
14 m_pEffect->SetTechnique( m_hTechnique);
15 m_pEffect->Begin( 0, 0 );
16 m_pEffect->BeginPass(0);
17
18 m_pd3dDevice->SetStreamSource( 0, m_pSphereVB, 0 ,sizeof(D3DXVECTOR3));
19 m_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
20 m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 3 );
21
22 /*m_pd3dDevice->SetStreamSource( 0, m_pSphereVB, 0, sizeof(FigureObjectODELVERTEX) );*/
23 //m_pd3dDevice->SetIndices(m_pSphereIB);
24 //m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,0,0,m_nVertexCount, 0,m_nIndexCount);
25
26 m_pEffect->EndPass();
27 m_pEffect->End();
28
29 // 렌더링종료
30 QueryPerformanceFPS();
31 DrawFont();
32 m_pd3dDevice->EndScene();
33 }
34
35
36 /// 후면버퍼를보이는화면으로!
37 m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
38 }
ㅇ 실행 결과
1 /// 세이더 소스
2
3 float4x4 WorldViewProj;
4
5 /// Vertex 입력 구조체 선언
6 struct VS_INPUT
7 {
8 float4 InPos : POSITION0;
9 };
10
11 /// Vertex 출력 구조체 선언
12 struct VS_OUTPUT
13 {
14 float4 OutPos : POSITION0; 15 };
16
17 VS_OUTPUT vs_main(VS_INPUT Input)
18 {
19 VS_OUTPUT Output;
20
21 Output.OutPos = mul(Input.InPos, WorldViewProj);
22
23 return (Output);
24 }
25
26 float4 ps_main() : COLOR0
27 {
28 return( float4( 1.0f, 0.0f, 0.0f, 1.0f ) );
29
30 }
31
32 technique TShader
33 {
34 pass P0
35 {
36 VertexShader = compile vs_2_0 vs_main();
37 PixelShader = compile ps_2_0 ps_main();
38 }
39 }
ㅇ D3DX 초기화
1 /// 셰이더초기화
2 void D3DX::ShaderInii()
3 {
4 HRESULT hr;
5 /// 이펙트파일처리
6 LPD3DXBUFFER pErr = NULL;
7
8 /// 이펙트파일읽기
9
10 if( FAILED ( hr = D3DXCreateEffectFromFile( m_pd3dDevice, "hlsl.fx", NULL, NULL, 0, NULL, &m_pEffect, &pErr ) ) )
11 {
12 MessageBox( 0, "File Faild", "Error", 0 );
13 pErr->Release();
14 return ;
15 }
16
17 /// 테크닉선언
18 // TShader은hlsl.fx 파일안에서technique가TShader로되어있어야한다.
19 m_hTechnique = m_pEffect->GetTechniqueByName("TShader");
20
21 if ( pErr ) pErr->Release();
22
23 }
24
25 /// 세이더해체
26 void D3DX::ShaderDelete()
27 {
28 //if ( m_hmWVP != NULL) { m_hmWVP = NULL; }
29 if ( m_hTechnique != NULL) { m_hTechnique = NULL; }
30 if ( m_pEffect != NULL ) { m_pEffect->Release(); m_pEffect = NULL; }
31 }
32
33 /// 세이더상수설정
34 void D3DX::ShaderUpate()
35 {
36 D3DXMATRIX mat, _matWorld, _matView, _matProj;
37
38 m_pd3dDevice->GetTransform(D3DTS_WORLD, &_matWorld);
39 m_pd3dDevice->GetTransform(D3DTS_VIEW , &_matView);
40 m_pd3dDevice->GetTransform(D3DTS_PROJECTION, &_matProj);
41
42 mat = _matWorld * _matView * _matProj;
43
44 m_pEffect->SetMatrix("WorldViewProj", &mat);
45
46 }
ㅇ D3DX 렌더링 함수
1 void D3DX::Render()
2 {
3 /// 후면버퍼와Z버퍼초기화
4 m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(200,200,200), 1.0f, 0 );
5
6
7
8 /// 렌더링시작
9 if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
10 {
11 Animate();
12
13 /// 세이더설정
14 m_pEffect->SetTechnique( m_hTechnique);
15 m_pEffect->Begin( 0, 0 );
16 m_pEffect->BeginPass(0);
17
18 m_pd3dDevice->SetStreamSource( 0, m_pSphereVB, 0 ,sizeof(D3DXVECTOR3));
19 m_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
20 m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 3 );
21
22 /*m_pd3dDevice->SetStreamSource( 0, m_pSphereVB, 0, sizeof(FigureObjectODELVERTEX) );*/
23 //m_pd3dDevice->SetIndices(m_pSphereIB);
24 //m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,0,0,m_nVertexCount, 0,m_nIndexCount);
25
26 m_pEffect->EndPass();
27 m_pEffect->End();
28
29 // 렌더링종료
30 QueryPerformanceFPS();
31 DrawFont();
32 m_pd3dDevice->EndScene();
33 }
34
35
36 /// 후면버퍼를보이는화면으로!
37 m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
38 }
ㅇ 실행 결과
'[ C/ C++ 프로그래밍 ] > [ Shader ]' 카테고리의 다른 글
[HLSL] 램버트 확산 조명 (1) | 2010.06.02 |
---|---|
렌더몽키 다운로드 사이트 (2) | 2010.05.31 |
[HLSL] 삼각형에 Texture 입히기 (0) | 2010.05.31 |
HLSL 설정 - 2 (0) | 2010.05.31 |
HLSL 설정 - 1 (1) | 2010.05.31 |