※ 제 개인 공부이므로 풀 소스 코드는 작성하지 않습니다. ※
※ 생략 되어 있는 부분이 많습니다. ※
{
D3DXVECTOR3 p;
DWORD d;
FLOAT u, v;
VtxD() : p(0, 0, 0), d(0xFFFFFFFF) {}
VtxD(FLOAT X, FLOAT Y, FLOAT Z, DWORD D = 0XFFFFFFFF) : p(X, Y, Z), d(D) {}
enum { FVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE) };
};
LPDIRECT3DPIXELSHADER9 m_pPs; // Pixel Shader
LPD3DXCONSTANTTABLE m_pTbl; // Constant Table
INT m_nType; // Pixel Processing Type
VtxD m_pVtx[4]; // Vertex Buffer
포지션과, 색상 값으로 구성된 정점 데이터이다.
*shader.fx*
// Pixel Processing Type
int g_nPxlPrc = 2;
// 1.Color Inversion
float4 PxlInverse(float4 Input)
{
return 1 - Input;
}
// 2.Color Monotone
float4 PxlMonotone(float4 InColor)
{
float4 Out = 0.f;
float4 d = float4(0.299, 0.587, 0.114, 0);
float4 t = InColor;
Out = dot(d, t);
Out.w = 1;
return Out;
}
// Main Pixel Processing
float4 PxlPrc( in float4 iDif : COLOR0 // From Vertex Processing
) : COLOR0
{
float4 Out=float4(0,0,0,1);
if(1== g_nPxlPrc)
Out = PxlInverse(iDif);
else if(2 == g_nPxlPrc)
Out = PxlMonotone(iDif);
else
Out = iDif;
return Out;
}
if문을 통해서 g_nPxlPrc의 값이 0이면 기존색상, 1이면 색상 반전, 2이면 단색화 과정을 처리하고 있다.
HRESULT hr = 0;
m_pdev->SetRenderState(D3DRS_LIGHTING, FALSE);
m_pdev->SetPixelShader(m_pPs);
m_nType = 2;
// 픽셀 shader 전역 변수 값 설정
hr = m_pTbl->SetInt(m_pdev, "g_nPxlPrc", m_nType);
m_pdev->SetFVF(VtxD::FVF);
m_pdev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, m_pVtx, sizeof(VtxD));
m_pdev->SetPixelShader(NULL);
m_nType의 int형 값을 셰이더의 전역 변수 g_nPxlPrc에 설정해주면서 설정 값에 따른 픽셀 처리 과정을 하게끔 하고 있다.
'Shader' 카테고리의 다른 글
15. 다중 텍스처 처리(Multi-Texturing) (0) | 2017.02.13 |
---|---|
14. 텍스처 처리(단색화, 흐림효과) (0) | 2017.02.09 |
12. 알록달록 사각형(간단한 픽셀 처리) (0) | 2017.02.09 |
11. 스페큘러 조명을 해보자(퐁, 블린-퐁 반사) (0) | 2017.02.08 |
10. 분산 조명 효과를 내보자. (0) | 2017.02.07 |