ÇöÀçÀÇ ÇÁ·¹ÀÓ¿÷¿¡¼ ¼ÎÀÌ´õ¸¦ °£´ÜÇÏ°Ô »ç¿ëÇϱâ À§ÇØ, ID3DXEffect¸¦ Ãß°¡ ÇÑ´Ù.
ÀÌÆåÆ®¸¦ »ç¿ëÇÏ´Â ¼ø¼´Â ´ÙÀ½°ú °°´Ù.
1. ÀÌÆåÆ® »ý¼º
2. ÀÌÆåÆ® ·»´õ¸µ
3. ÀÌÆåÆ® ÇØÁ¦
|
1. ÀÌÆåÆ® »ý¼º
ÀÌÆåÆ®¸¦ ½ÃÀÛÇϱâ À§ÇØ ID3DXEffect °´Ã¼¸¦ ¸¸µç´Ù.
HRESULT D3DXCreateEffectFromFile
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile, CONST D3DXMACRO *
pDefines, LPD3DXINCLUDE pInclude, DWORD
Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *
ppEffect, LPD3DXBUFFER * ppCompilationErrors
); |
[in] pDevice: ÀÌÆåÆ®¸¦ »ý¼ºÇÏ´Â IDirect3DDevice9 Æ÷ÀÎÅÍ [in] pSrcFile: ÀÌÆåÆ® ÆÄÀϸí [in] pDefines: ÇÁ¸®ÇÁ·Î¼¼¼ ¸ÅÅ©·Î Á¤ÀÇ·Î NULL·Î ³¡³ª´Â D3DXMACRO ¹è¿ º¸Åë NULLÀ» ³Ö´Â´Ù. [in] pInclude: #include ÀÇ»ç ¸í·É¾î·Î º¸Åë NULLÀ» ³Ö´Â´Ù. [in] Flags: ¼ÎÀÌ´õ¸¦ ÄÄÆÄÀÏ, ¾î¼Àºí¸µ ÇÏ´Â »ç¿ëµÇ´Â D3DXSHADER¿Í D3DXFX Ç÷¡±×. À̹ø¿¡ »ç¿ëµÈ ¼ÎÀÌ´õ ÄÄÆÄÀÏ Ç÷¡±×´Â ¾Æ·¡¿Í °°´Ù.
D3DXSHADER_DEBUG : (ÄÄÆÄÀÏ ¿É¼Ç /Zi) ÄÄÆÄÀÏ ÇÏ´Â µ¿¾È µð¹ö±× ÆÄÀÏÀ̸§, ¶óÀÎ ¹øÈ£, ŸÀÔ, ½Éº¼ Á¤º¸¸¦ Ãß°¡ÇÑ´Ù.
D3DXSHADER_NO_PRESHADER : (ÄÄÆÄÀÏ ¿É¼Ç /Op) preshader¸¦ ½ÇÇàÇÏÁö ¾Ê´Â´Ù. µðÆúÆ®·Î Presshader¸¦ ½ÇÇàÇÑ´Ù. [in] pPool: ÆĶó ¸ÞÅÍ °øÀ¯¸¦ À§ÇÑ ID3DXFffectPool °³Ã¼ÀÇ Æ÷ÀÎÅÍ. NULLÀÌ¸é °øÀ¯ÇÏÁö ¾Ê´Â´Ù. [out] ppEffect: ÄÄÆÄÀÏµÈ ID3DXEFFECT Æ÷ÀÎÅ͸¦ µ¹·ÁÁØ´Ù. [out] ppCompilationErrors: ÄÄÆÄÀÏ ¿¡·¯¸¦ ID3DXBuffer¸¦ µ¹·ÁÁØ´Ù. ¿¡·¯°ªÀÌ ÇÊ¿ä ¾ø´Ù¸é NULL ÀÔ·Â
IDirect3DDevice9* pDevice;
ID3DXEffect* m_pEffect;
ID3DXBuffer* errorBuffer = 0;
DWORD dwShaderFlags = 0;
#if defined( _DEBUG )
dwShaderFlags |= D3DXSHADER_DEBUG;
dwShaderFlags |= D3DXSHADER_NO_PRESHADER;
#endif
HRESULT hr = D3DXCreateEffectFromFile(
pDevice,
szFileName,
0,
0,
dwShaderFlags,
0,
&m_pEffect,
&errorBuffer);
|
2. ÀÌÆåÆ® ·»´õ¸µ
ÀÌÆåÆ® ·»´õ¸µ½Ã¿¡ »ç¿ëµÇ´Â ¸í·É¾î¸¦ ¾Ë¾Æº»´Ù.
SetTechnique() Begin() BeginPass() //¸ÞÆ®¸®¾ó ¼³Á¤µµ ¿©±â¼ ÇÑ´Ù. SetTexture() CommitChanges() //¿©±â¼ ¸Þ½Ã¸¦ ±×¸°´Ù. EndPass() End()
|
SetTechnique() : È°¼ºÈµÈ Å×Æ®´ÐÀ» ¼ÂÆÃÇÑ´Ù.
HRESULT SetTechnique( D3DXHANDLE hTechnique )
|
[in] hTechnique : D3DXHANDLE¸¦ ÀÔ·ÂÇÑ´Ù.
D3DXHANDLE ÀǹÌ: a). GetParameter[ByName|Element|BySemantic] À̳ª GetAnnotation[ByName]ÀÇÇØ ¹ÝȯµÈ °ªµéÀ» »ç¿ëÇÑ´Ù. b). ¹®ÀÚ¿À» ÀÇ¹Ì ÇÒ ¼öµµ ÀÖ´Ù.
Begin() : È°¼ºÈµÈ Å×Å©´ÐÀ» ½ÃÀÛÇÑ´Ù.
HRESULT Begin( UINT* pPasses, DWORD Flags ) ...... HRESULT End()
|
[out] pPasses : È°¼ºÈµÈ Å×Å©´ÐÀÇ Æнº ¼ö¸¦ ¸®ÅÏÇÑ´Ù.
[in] Flags : ÇöÀçÀÇ ÀåÄ¡ »óÅÂ¿Í ¼¼ÀÌ´õ »óŸ¦ ½ÃÀÛ½Ã(::Begin())¿¡ º¸°üÇß´Ù°¡ Á¾·á(::End())½Ã¿¡ »óŸ¦ º¹±¸ÇÒ °ÍÀÎÁö ³ªÅ¸³½´Ù.
D3DXFX_DONOTSAVESTATE : ID3DXEffect::Begin() È£Ãâ½Ã¿¡ ÀåÄ¡ state¸¦ º¸°üÇÏÁö ¾Ê°í, ID3DXEffect::End()½Ã¿¡ È£Ãâ½Ã¿¡ ÀåÄ¡ state¸¦ º¹¿øÇÏÁö ÇÏÁö ¾Ê´Â´Ù.
D3DXFX_DONOTSAVESHADERSTATE : ID3DXEffect::Begin() È£Ãâ½Ã¿¡ ¼ÎÀÌ´õ state¸¦ º¸°üÇÏÁö ¾Ê°í ID3DXEffect::End()½Ã¿¡ È£Ãâ½Ã¿¡ ¼ÎÀÌ´õ state¸¦ º¹¿øÇÏÁö ÇÏÁö ¾Ê´Â´Ù.
Begin() : È°¼ºÈµÈ Å×Å©´ÐÀÇ Æнº¸¦ ½ÃÀÛÇÑ´Ù.
HRESULT BeginPass( UINT Pass) ...... HRESULT EndPass()
|
[in] pPasses : Å×Å©´Ð¾È¿¡ ÀÖ´Â Æнº¸¦ ÁöÁ¤ÇÑ´Ù.
SetTexture() : ÀÌÆåÆ®¿¡¼ »ç¿ëµÉ ÅؽºÃĸ¦ ÁöÁ¤ÇÑ´Ù. ºÎ¸ð Ŭ·¡½º ID3DXBaseEffectÀÇ ¸Þ½îµåÀÌ´Ù.
HRESULT SetTexture( D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture )
|
[in] hParameter : ÀÌÆåÆ®(*.fx)¿¡ ÀÖ´Â ÅؽºÃÄ ÇÚµé [in] pTexture : IDirect3DBaseTextureÀÇ ÇÚµé
CommitChanges() : BeginPass()¿Í EndPass() »çÀÌ ID3DXEffect::Setx~~()¿¡ ÀÇÇØ ÀÌÆåÆ® »óÅ°¡ ¹Ù²î¸é ÀÌ ¸Þ½îµå¸¦ È£Ãâ ÇÏ¿© µð¹ÙÀ̽º¿¡°Ô º¯È¸¦ ¾Ë·ÁÁØ´Ù.
¾Æ·¡´Â ID3DXEffect¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö °£´ÜÇÏ°Ô ¼³¸íÇÏ°í ÀÖ´Â GpgStudyÀÇ zupet´ÔÀÇ ±ÛÀÌ´Ù.
zupet´ÔÀÇ ±Û : ID3DXEffect »ç¿ë¹æ¹ý
http://www.gpgstudy.com/forum/viewtopic.php?topic=19093
device->SetStreamSource(...)
device->SetVertexDeclaration(...)
device->SetIndices(...)
UINT pass;
if(SUCCEEDED(effect->Begin(&pass)))
{
for(UINT i=0; i < pass; effect->BeginPass(i))
{
for(int j=0; j< numObject; ++j)
{
effect->SetTexture(objectList[i].m_texture);
effect->CommitChanges();
device->DrawIndexedPrimitive(...);
}
}
effect->End();
}
|
ÀÌÆåÆ® ÀνºÅϽº°¡ °°Àº °æ¿ì SetTexture()¸¦ È£ÃâÈÄ CommitChanges()¸¦ ½ÇÇàÇÏ¿©, ÅؽºÃÄ°¡ ¹Ù²ï°É Àû¿ë ½ÃŲ´Ù.
3. ÀÌÆåÆ® ÇØÁ¦
ID3DXEFFECT *
pEffect;
pEffect->Release()
³¡.... ¿¹Á¦´Â ¾ø´Ù. ÇÁ·¹ÀÓ¿÷¿¡ ID3DXEFFECTÀ» Ãß°¡Çϱâ À§ÇØ Áö±Ý±îÁö ¼³¸íÇß´Ù. ÀÌÆåÆ®¸¦ Ãß°¡ÇÑ ÇÁ·¹ÀÓ¿÷Àº ¿©±â(chacter_animation/framework/ver04.html)ÀÖ´Ù.
|