RendererTexture MotionBlure

¼ÎÀÌ´õ ¾øÀÌ ¸ð¼Çºí·¯¸¦ ¸¸µé¾îº¸ÀÚ. °á·ÐºÎÅÍ À̾߱â ÇÏÀÚ¸é Èûµé¾î º¸ÀδÙ.

À̹ÌÁö´Â ±×·²µíÇØ º¸ÀÌÁö¸¸ ¹®Á¦Á¡Àº ´ÙÀ½°ú °°´Ù.

< ¹®Á¦Á¡ >
1. ¿©±â¼­´Â ½ºÇÁ¶óÀÌÆ®¸¦ ÀÌ¿ëÇØ »Ñ·ÁÁÖ°í ÀÖ´Ù. ƯÁ¤ Ä®¶óÅ°¸¦ Åõ¸íÅ°·Î ó¸®ÇÏ´Â ÅؽºÃÄ·Î »Ñ·ÁÁÖ´Â ¹æ¹ýÀ» »ç¿ëÇصµ µÇ°ÚÁö¸¸ ±×·±Á¦ÇÑÀ» µÎ´Â °ÍÀº ±×·¡ÇÈ ¸®¼Ò½º¿Í ¹®Á¦¸¦ ÀÏÀ¸Å³°ÍÀÌ´Ù.

2. °¡·ÁÁ®¾ß Çϴ»óȲ¿¡¼­µµ º¸ÀÌÁö ¾ÊÀ»±î ÇÏ´Â »ý°¢ÀÌ µç´Ù.

»ç¿ëÀº ¾ÈÇÏ°ÚÁö¸¸ ±¸Çö ¹æ¹ýÀº ¾Ë¾Æº¸ÀÚ. ·»´õ·¯ ÅؽºÃÄ¿Í ½ºÇÁ¶óÀÌÆ® »ç¿ë ¹æ¹ýÀº tutorial08.htmlÀ» Âü°íÇÑ´Ù.

< ¸ð¼Çºí·¯ ±¸Çö >

1. »ç¿ëµÇ´Â ·»´õ·¯ ÅؽºÃÄ ¸¸µé±â
InitRendererTexture( )·Î ·»´õ·¯ ÅؽºÃĸ¦ µÎ °³ ¸¸µç´Ù.

2. ·»´õ·¯ ÅؽºÃÄ¿¡ ¸ð¼Çºí·¯ÇÒ ¿ÀºêÁ§Æ®¸¦ ±×¸°´Ù.
RenderSpriteInSurface( )¿¡¼­ ÁÖÀüÀÚ¸¦ ±×¸°ÈÄ ÀÌÀü¿¡ ±×·ÁÁø ÅؽºÃÄ À̹ÌÁö¸¦ ÇÕ¼ºÇؼ­ ÇöÀç  ·»´õ¸µ Ÿ°ÙÀÇ ÅؽºÃÄ¿¡ ±×¸°´Ù.
ÇöÀçÀÇ ·»´õ¸µÅ¸°Ù À̹ÌÁö´Â ´ÙÀ½ÇÁ·¹ÀÓ¿¡´Â ÀÌÀüÀÇ ±×·ÁÁø ÅؽºÃÄ·Î »ç¿ëµÉ°ÍÀÌ´Ù.

DWORD    g_motionAlpha = 0xf0ffffff;

HRESULT hr = g_pSprite->Draw( spriteTexture.pTexture, NULL, NULL, NULL, g_motionAlpha );

g_motionAlpha ¾ËÆÄ °ªÀÌ Å¬¼ö·Ï( Åõ¸í ÇÒ ¼ö·Ï ) ÁÖÀüÀÚÀÇ ¸ð¼Ç ²¿¸®°¡ ±æ°Ô º¸ÀδÙ.

3. µð¹ÙÀ̽º ¹éÆÛ¿¡ ÁÖÀüÀÚ¸¦ ±×¸±¶§ ·»´õ·¯ ÅؽºÃÄÀÇ À̹ÌÁö¸¦ ·»´õ¸µÇÑ´Ù.
RenderSpriteInBackbuffer( )¿¡¼­ ÇÕ¼ºµÈ ·»´õ·¯ ÅؽºÃĸ¦ ºäÆ÷Æ®¿¡ ¸ÂÃç¼­ ±×¸°´Ù.

void  RenderSpriteInBackbuffer( RendererTexture* pRendererTexture )

{

    g_pSprite->Begin( D3DXSPRITE_ALPHABLEND );

 

    D3DVIEWPORT9 viewport ;

    g_d3d_Device->GetViewport( &viewport );

 

    D3DXMATRIX mat;

    D3DXMatrixIdentity( &mat );

 

    //ºäÅ©±â¿¡ ¸ÂÃç ½ºÇÁ¶óÀÌÆ®ÀÇ ÅؽºÃÄ Å©±â¸¦ Á¶Á¤ÇÑ´Ù.

    mat._11 = (float)viewport.Width / 256.0f;

    mat._22 = (float)viewport.Height / 256.0f;

    g_pSprite->SetTransform( &mat );

 

    //°¡Àå ¾Æ·¡ ±×¸®±â À§Çؼ­ Z ¹öÆÛ¸¦ ²ö´Ù.

    g_d3d_Device->SetRenderState( D3DRS_ZENABLE, FALSE );

    g_d3d_Device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCCOLOR );

    g_d3d_Device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );

 

    HRESULT hr = g_pSprite->Draw( pRendererTexture->pTexture, NULL, NULL, NULL, 0xffffffff );

    g_pSprite->End();

 

    //RenderStateº¹¿ø

    g_d3d_Device->SetRenderState( D3DRS_ZENABLE, TRUE );

    g_d3d_Device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVSRCCOLOR );

    g_d3d_Device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );

    g_d3d_Device->SetTexture( 0, NULL );

}

½ºÇÁ¶óÀÌÆ®¸¦ ºäÆ÷Æ®¿¡ ¸ÂÃß±â À§ÇØ g_pSprite->SetTransform(  ) ½ÃŲ´Ù.
¸Ç¾Æ·¡¿¡ ·»´õ¸µÇϱâ À§Çؼ­ ·»´õ½ºÅ×ÀÌÆ®¸¦ Á¶Á¤ÇÑ´Ù.

~³¡

´Ù½Ã ½±°Ô Á¤¸® ÇÏÀÚ¸é

1. ·»´õ·¯ÅؽºÃĸ¦ A, B µÎ °³ ÁغñÇÑ´Ù.

2. ·»´õ·¯ ÅؽºÃÄ A¿¡ ±×¸®±â
ÁÖÀüÀÚ ±×¸®±â + ÀÌÀü¿¡ ±×·ÁÁø À̹ÌÁö B  === ·»´õ·¯ ÅؽºÃÄ A

3. ¸ð¼Çºí·¯ ±×¸®±â( ½ÇÁ¦ È­¸é¿¡ º¸ÀÌ´Â À̹ÌÁö )
ÁÖÀüÀÚ ±×¸®±â , ·»´õ·¯ ÅؽºÃÄ AÀÇ À̹ÌÁö ±×¸®±â

4. ·»´õ·¯ ÅؽºÃÄ B¿¡ ±×¸®±â
ÁÖÀüÀÚ ±×¸®±â + ÀÌÀü¿¡ ±×·ÁÁø À̹ÌÁö A === ·»´õ·¯ ÅؽºÃÄ B

5. ¸ð¼Çºí·¯ ±×¸®±â( ½ÇÁ¦ È­¸é¿¡ º¸ÀÌ´Â À̹ÌÁö )
ÁÖÀüÀÚ ±×¸®±â, ·»´õ·¯ ÅؽºÃÄ BÀÇ À̹ÌÁö ±×¸®±â

ÇÁ·¹ÀÓ ¾÷µ¥ÀÌÆ®½Ã 2, 3¹ø°ú 4, 5¹øÀÌ ¹Ýº¹µÇ¸é¼­ ÀÌÀüÀÇ À̹ÌÁö¸¦ ¾ËÆÄ°ªÀ» Àû¿ëÇؼ­ ±×¸®±â ¶§¹®¿¡ ¿À·¡µÈ À̹ÌÁö´Â ¾ËÆÄ°ªÀÌ °è¼Ó Àû¿ë µÇ´Ù º¸¸é »ç¶óÁö°Ô µÇ´Â °ÍÀÌ´Ù.

texture_motionblur.zip