À±°û¼± °ËÃâ ¼ÎÀÌ´õ¸¦ ´ÙÀÌ·ºÆ®X ÇÁ·Î±×·¥¿¡ ¿Ã·Áº¸ÀÚ. shader9.0/tutorial12/ColorConversion_edge.rfx ¼ÎÀÌ´õ¸¦ ´ÙÀÌ·ºÆ® X ÇÁ·Î±×·¥¿¡ ¿Ã·Áº¸ÀÚ. ±âº» ¼³Á¤ColorConversion_edge.rfx¿¡¼ Edge Æнº¸¸ ³²±â°í ´Ù¸¥ Æнº´Â »èÁ¦ÇÑ´Ù. ¼ÎÀÌ´õ ÀÚ¿ø ó¸®ÀÌÆåÆ® ±¸Á¶Ã¼¿¡ edge¸¦ Ãß°¡ÇÑ´Ù. struct ScreenEffect
{ LPD3DXEFFECT noEffect; LPD3DXEFFECT grayScale; LPD3DXEFFECT sepia; LPD3DXEFFECT edge; }; ScreenEffect gScreenEffect = { NULL, NULL, NULL, NULL}; À±°û¼± ¸®¼Ò½º ÇØÁ¦µµ Ãß°¡ ÇÑ´Ù. void ReleaseScreenEffect()
{ //..... À±°û¼± ÀÌÆåÆ® ÇØÁ¦ Ãß°¡ _RELEASE_(gScreenEffect.edge); } LoadAsset( )¿¡¼¼ edge.fx¸¦ ·ÎµùÇÑ´Ù. gScreenEffect.edge = LoadShader("edge.fx");
if(gScreenEffect.edge == NULL) return false; ·»´õ¸µÅ°°¡ 4À϶§ edge ¼ÎÀÌ´õ¸¦ ½ÇÇàÇÑ´Ù. void main_OnKeydown(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
{ switch (vk) { case '1': case '2': case '3': case '4': //4À϶§´Â edge ¼ÎÀÌ´õ ó¸® gPostProcessIndex = vk - '0' - 1; break; } } RenderScene( ) ÇÔ¼ö¿¡¼ edge ¼ÎÀÌ´õ È£ÃâÀ» Ãß°¡ÇÑ´Ù. else if (gPostProcessIndex == 3)
{ useShader = gScreenEffect.edge; } gPixelOffset º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. HLSL¿¡¼ gPixelOffsetÀº float2 ÀÚ·áÇüÀÌ´Ù. ¼ÎÀÌ´õ º¯¼ö¸¦ ³Ñ°ÜÁÙ¶§ float4·Î ³Ñ°ÜÁ൵ µÇ³ªº¸´Ù?? float2 gPixelOffset; D3DXVECTOR4 pixelOffset(1 / (float)gRenderScrWidth, 1 / (float)gRenderScrHeight, 0, 0);
useShader->SetVector("gPixelOffset", &pixelOffset); Key 4¸¦ ´©¸£¸é edge ¼ÎÀÌ´õ°¡ ½ÇÇàµÈ´Ù. ´Ù¿î·Îµå : edge.rfx DxDemo_edge.zip
|