728x90

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

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

 

 

struct Vtx
 {
      D3DXVECTOR3 p;

      Vtx() : p(0, 0, 0) {}
      Vtx(FLOAT X, FLOAT Y, FLOAT Z) : p(X, Y, Z) {}

      enum { FVF = (D3DFVF_XYZ), };
 };

 

LPDIRECT3DVERTEXSHADER9  m_pVs;
LPDIRECT3DVERTEXDECLARATION9  m_pFVF;

Vtx   m_pVtx[3];

 

정점 구조체 선언해주고.. 필요한것들 정점쉐이더 객체와, 정점 선언자 객체, 그리고 삼각형 그릴꺼니까 정점 3개 만들어 준다.

 

const char sHlsl[] =
  "float4 VtxPrc(float3 Pos : POSITION) : POSITION  \n"
  "{                                                               \n"
  "    return float4(Pos, 1);                                  \n"
  "}                                                               \n"
  "                                                                \n"
  ;

 

HRESULT hr = D3DXCompileShader(sHlsl, iLen, NULL, NULL , "VtxPrc" , "vs_1_1"  , dwFlags, &pShd , &pErr, NULL);

 

m_pVtx[0] = Vtx(-1, -1, 0);
m_pVtx[1] = Vtx(0, 1, 0);
m_pVtx[2] = Vtx(1, -1, 0);

 

Create() 함수 안에서,

 

sHlsl 이라고 하는 우리가 적용할 셰이더를 작성해준다. 여기선 포지션 값만을 설정한다.

D3DXCompileShader을 이용해서 셰이더 컴파일을 해주고, 정점 좌표 3개 작성해준다.

 

m_pdev->SetRenderState(D3DRS_LIGHTING, FALSE);


m_pdev->SetVertexShader(m_pVs);
m_pdev->SetVertexDeclaration(m_pFVF);


m_pdev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, m_pVtx, sizeof(Vtx));

m_pdev->SetVertexShader(NULL);
m_pdev->SetVertexDeclaration(NULL);

 

Render() 함수 안에서,

 

랜더링상태 설정, 셰이더를 사용하겟다라고 설정과, 정점선언자 설정을해주고 그린다.

다 그리고 나면 null로 해제 시켜주고 고정 파이프라인으로 돌아오게 한다.

728x90
Posted by 정망스
,


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