1. 하얀색 삼각형을 그려보자.
※ 제 개인 공부이므로 풀 소스 코드는 작성하지 않습니다. ※
※ 생략 되어 있는 부분이 많습니다. ※
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->SetVertexShader(NULL);
m_pdev->SetVertexShader(m_pVs);
m_pdev->SetVertexDeclaration(m_pFVF);
m_pdev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, m_pVtx, sizeof(Vtx));
m_pdev->SetVertexDeclaration(NULL);
Render() 함수 안에서,
랜더링상태 설정, 셰이더를 사용하겟다라고 설정과, 정점선언자 설정을해주고 그린다.
다 그리고 나면 null로 해제 시켜주고 고정 파이프라인으로 돌아오게 한다.