À̹øÀå¿¡¼´Â Çȼ¿ HLSLÀÌ´Ù. shader8.0 2Àå shader9.0 2ÀåÀ» º¸°í ¿À¸é
µµ¿òÀÌ µÉ°ÍÀÌ´Ù. 1) ¼ÎÀÌ´õ º¯¼ö ¼±¾ð LPDIRECT3DPIXELSHADER9 g_hPShader = 0; //Çȼ¿ ¼ÎÀÌ´õÀÇ ÇÚµé LPD3DXCONSTANTTABLE g_pPixelConstantTable = 0; //Çȼ¿ »ó¼öÅ×À̺í Á¢±Ù ÇÚµé Çȼ¿ ¼ÎÀÌ´õ¿¡¼´Â µð¹ÙÀ̽º ÀÎÅÍÆäÀ̽ºÀÇ »ó¼ö Àü´Þ ÇÔ¼ö¸¦ ÅëÇØ »ó¼ö °ªÀ» Àü´ÞÇßÁö¸¸ HLSL¿¡¼´Â LPD3DXCONSTANTTABLE ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ »ó¼ö¸¦ Àü´ÞÇؾßÇÑ´Ù. 2) ¼ÎÀÌ´õ »ý¼º HRESULT CreateShader() { //http://www.fairyengine.com/articles/hlsl2sided_fr.htm ÂüÁ¶ const char szHlslShader[] = /* "ps.1.1 \n" //"def c2, 0.3333f, 0.59f, 0.11f, 0.0f \n" "tex t0 \n" "dp3 r0, t0, c2 \n"; */ " sampler baseTex; \n" " float4 cColor; \n" " \n" " sampler Sampler = sampler_state \n" " { \n" " Texture = (baseTex); \n" " MipFilter = LINEAR; \n" " MinFilter = LINEAR; \n" " MagFilter = LINEAR; \n" " }; \n" " \n" " struct PS_INPUT \n" " { \n" " float4 Color : COLOR0; \n" " float2 Tex0 : TEXCOORD0; \n" " }; \n" " \n" " struct PS_OUTPUT \n" " { \n" " float4 Color : COLOR; \n" " }; \n" " \n" " PS_OUTPUT PixelShader_main(PS_INPUT In) \n" " { \n" " PS_OUTPUT Out = (PS_OUTPUT) 0; \n" " //float4 cColor = { 0.3333f, 0.59f, 0.11f, 0.0f }; \n" " \n" " Out.Color = tex2D(Sampler, In.Tex0) * In.Color; \n" " Out.Color = dot(Out.Color, cColor); \n" " return Out; \n" " } \n" ""; ID3DXBuffer* pShaderBuffer; ID3DXBuffer* pShaderErrors; if (FAILED(D3DXCompileShader(szHlslShader, sizeof(szHlslShader), 0, NULL, HLSL ¼³¸íÀº ¸¶Áö¸·¿¡ ÇÏ°Ú´Ù. HRESULT Render3D () { HRESULT hr; D3DXMATRIX matTranslation; // Clear the scene g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(150,150,255), 1.0f, 0 ); g_pd3dDevice->BeginScene(); D3DXMatrixIdentity( &matTranslation ); g_pd3dDevice->SetTransform(D3DTS_WORLD, &matTranslation); g_pd3dDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(MYVERTEX)); g_pd3dDevice->SetFVF(D3DFVF_MYVERTEX); //Çȼ¿ ¼ÎÀÌ´õ ¼³Á¤ //ÂüÁ¶: http:/www.codesampler.com/dx9src.html //sampler¸¦ Çϳª ÀÌ»ó Á¤ÀÇ ÇÑ´Ù¸é, Çȼ¿ ¼ÎÀÌ´õÀÇ »ó¼ö Å×À̺íÀ» Á¶»çÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. //Çϵå¿þ¾î¿¡ ¸ÊÇÎ µÇ¾î ÀÖ´Â ÅؽºÃÄ ½ºÅ×ÀÌÁöÀÇ sampler's ASCII nameÀ» »ç¿ëÇÑ´Ù. //¿©±â¼ »ç¿ëÇÏ´Â Çȼ¿¼ÎÀÌ´õ´Â °£´ÜÇÏ´Ù. //¿ì¸®´Â ÀÌ¹Ì ÅؽºÃÄ°¡ ½ºÅ×ÀÌÁö 0À¸·Î ³¡³´Ù´Â °ÍÀ» ¾Ë°í Àֱ⠶§¹®¿¡ ´ÙÀ½ ÇÑÁÙ¸¸ ºÎ¸£¸é µÈ´Ù. // // g_pd3dDevice->SetTexture( 0, g_pTexture ); // // "Sampler"¸¦ ¼±¾ðÇÏÁö ¾Ê°í "baseTex¸¸ ¼±¾ðÇß´Ù¸é, GetConstantByName()¿¡ "baseTex"¸¦ Àû´Â´Ù. /* D3DXHANDLE handle = g_pPixelConstantTable->GetConstantByName(NULL, "Sampler"); if(handle) { D3DXCONSTANT_DESC constDesc; UINT count; g_pPixelConstantTable->GetConstantDesc(handle, &constDesc, &count); if(constDesc.RegisterSet == D3DXRS_SAMPLER) g_pd3dDevice->SetTexture(constDesc.RegisterIndex, g_pTexture); } else */ g_pd3dDevice->SetTexture( 0, g_pTexture ); float fColorConstant[4] = { 0.3333f, 0.59f, 0.11f, 0.0f}; g_pPixelConstantTable->SetVector(g_pd3dDevice, "cColor", (D3DXVECTOR4 *)fColorConstant); g_pd3dDevice->SetPixelShader(g_hPShader); g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); //Clear texture g_pd3dDevice->SetTexture( 0, NULL ); g_pd3dDevice->EndScene(); hr = g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); return hr; }
´Ù¸¥ HLSLÀ» Âü°íÇϸé ÅؽºÃijª »ùÇ÷¯¸¦ ³Ñ°ÜÁÖ±â À§ÇØ º¹ÀâÇÏ°Ô »ç¿ëÇÏ°í ÀÖÀ» °ÍÀÌ´Ù. ¿ì¸®´Â ¿©±â¼ ÀÌ·¸°Ô °£´ÜÇÏ°Ô »ç¿ëÇÒ±î. ±× ÀÌÀ¯´Â ´ÙÀ½°ú °°´Ù. ***Çȼ¿ ¼ÎÀÌ´õ ÅؽºÃijª ¼ÀÇ÷¯ ÁöÁ¤ÇϱâÂüÁ¶: http:/www.codesampler.com/dx9src.html
±×·¸±â ¶§¹®¿¡ ¿©±â¼ ÅؽºÃĸ¦ ÁöÁ¤ÇÏ´Â µÎ ÄÚµå´Â ¶È°°Àº °á°ú¸¦ °¡Á®¿Ã°ÍÀÌ´Ù.
g_pPixelConstantTable->SetVector(g_pd3dDevice, "cColor", (D3DXVECTOR4 *)fColorConstant)¸¦ ÅëÇؼ Èæ¹é »ó¼ö °ªÀ» ³Ñ°ÜÁØ´Ù. 4) ¼Ò¸ê _RELEASE_(g_hPShader); _RELEASE_(g_pPixelConstantTable); g_pPixelConstantTableµµ ¼Ò¸ê ½ÃŲ´Ù. 5) HLSL ¼³¸í sampler baseTex; sampler Sampler = sampler_state struct PS_INPUT struct PS_OUTPUT baseText, cColor¸¦ ¼±¾ðÇÏ¿© »ó¼ö¶ó´Â °ÍÀ»
³ªÅ¸³½´Ù ±×·³ Èæ¹é±×¸²ÀÌ Âº~~~ ÇÏ°í ³ª¿Ã°ÍÀÌ´Ù. [Æß] Microsoft DirectX 9 Programmable Graphics Pipeline - Á¤º¸¹®È»ç DirectX ½Ç½Ã°£ ·»´õ¸µ ½ÇÀü Å×Å©´Ð - Á¤º¸ ¹®È»ç http://www.t-pot.com |