※ 제 개인 공부이므로 풀 소스 코드는 작성하지 않습니다. ※
※ 생략 되어 있는 부분이 많습니다. ※
{
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;
LPD3DXCONSTANTTABLE m_pTbl;
D3DXHANDLE m_hDif;
Vtx m_pVtx[3];
정점 구조체 선언하고, 필요한 객체들 (정점 셰이더, 정점 선언자, 상수 테이블, 핸들) 선언해주고,
삼각형을 그리기위한 정점 3개 선언해준다.
// 전역 변수
float4 Dif = float4(0,1,1,1); //파랑색 계열
void VtxPrc( in float3 iPos : POSITION, out float4 oPos: POSITION, out float4 oD0 : COLOR)
{
// 지역 변수
float4 Dif = float4(1,1,0,1); //노랑색 계열
oPos = float4(iPos, 1);
oD0 = Dif;
}
HRESULT hr = D3DXCompileShaderFromFile("data/shader.fx", NULL, NULL, "VtxPrc", "vs_1_1", dwFlags, &pShd, &pErr, &m_pTbl );
//m_hDif = m_pTbl->GetConstantByName(NULL, "Dif");
m_pVtx[0] = Vtx(-1, -1, 0);
m_pVtx[1] = Vtx(0, 1, 0);
m_pVtx[2] = Vtx(1, -1, 0);
D3DXCompileShaderFromFile을 이용하여 외부에서 셰이더파일을 불러와 컴파일을 해준다.
상수 테이블(m_pTbl)로부터 GetConstantByName을 이용하여 셰이더 파일 안에있는 Dif의 핸들을 얻어온다.
m_pdev->SetRenderState(D3DRS_LIGHTING, FALSE);
m_pdev->SetVertexShader(m_pVs);
m_pdev->SetVertexDeclaration(m_pFVF);
D3DXCOLOR color(1, 0, 1, 1); //보라색 계열
// 이름에 의한 상수 레지스터 설정
m_pTbl->SetVector(m_pdev, "Dif", (D3DXVECTOR4*)&color);
// 핸들에 의한 상수 레지스터 설정
m_pTbl->SetVector(m_pdev, m_hDif, (D3DXVECTOR4*)&color);
m_pdev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, m_pVtx, sizeof(Vtx));
m_pdev->SetVertexDeclaration(NULL);
m_pdev->SetVertexShader(NULL);
SetVertexShader을 이용하여 셰이더를 사용한다 알리므로 shader.fx 파일안에 있는 VtxPrc 함수안의 지역변수 Dif값으로 인해 삼각형이 노랑색으로 나오게 된다. 만약 지역변수 Dif값을 삭제하면,
D3DXCOLOR color(1, 0, 1, 1); 이 부분으로 인해 전역변수 Dif값이 보라색으로 바뀌게 되고 삼각형이 보라색으로 나오게 된다.
셰이더안의 값을 변경하는 방법으로는
1.
m_pTbl->SetVector(m_pdev, "Dif", (D3DXVECTOR4*)&color);
와 같이 "Dif"처럼 직접 이름을 지정해주는 방법.
2.
m_hDif = m_pTbl->GetConstantByName(NULL, "Dif");
m_pTbl->SetVector(m_pdev, m_hDif, (D3DXVECTOR4*)&color);
와 같이 GetConstantByName을 이용하여 상수 테이블로부터 핸들을 얻어오는 방법이 있다.
상수 테이블에는 셰이더파일 안에 들어있는 변수들의 정보가 들어있다.
'Shader' 카테고리의 다른 글
5. 알록달록 삼각형을 그려보자.(Semantic 시맨틱2) (0) | 2017.02.03 |
---|---|
4. 보라색 삼각형을 그려보자.(Semantic 시맨틱) (0) | 2017.02.03 |
3. 청록색 삼각형을 그려보자(uniform, varing 키워드) (0) | 2017.02.02 |
1. 하얀색 삼각형을 그려보자. (0) | 2017.02.02 |
함수 개념 정리 및 용어 정리 中.. (계속 추가) (0) | 2017.02.01 |