D3DXCreateRenderToSurface

D3DXCreateRenderToSurface( )¸¦ ÀÌ¿ëÇØ LPD3DXRENDERTOSURFACE °ªÀ» »ç¿ëÇÏ¸é ´ÙÀÌ·ºÆ®X µð¹ÙÀ̽º ó·³ ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¿ÞÂÊ »ó´ÜÀÇ ÁÖÀüÀÚ´Â LPD3DXRENDERTOSURFACEÀÇ ·»´õ·¯ ÅؽºÃĸ¦ ½ºÇÁ¶óÀÌÆ®·Î ±×¸®°í ÀÖ´Ù.

LPD3DXRENDERTOSURFACE¸¦ »ç¿ëÇÒ·Á¸é  ¾Æ·¡ ¼¼ °³ÀÇ º¯¼ö°¡ ÇÊ¿äÇÏ´Ù.

< ÇÊ¿äÇÑ º¯¼ö >

    LPDIRECT3DTEXTURE9       pTexture;

    LPD3DXRENDERTOSURFACE    pRendererSurface;

    LPDIRECT3DSURFACE9       pTextureSurface;

pTexture´Â IDIRECT3DDEVICE9::CreateTexture( ..D3DUSAGE_RENDERTARGET.. ) ·»´õ Ÿ°ÙÀ¸·Î ¸¸µé¾îÁø ·»´õ·¯ ÅؽºÃÄÀÌ´Ù.

pRendererSurface´Â D3DXCreateRenderToSurface( ... &pRendererSurface ) µð¹ÙÀ̽º ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ´Â ·»´õ Ÿ°Ù ÅؽºÃÄÀÇ µð¹ÙÀ̽ºÃ³·³ »ý°¢ÇÏ¸é µÈ´Ù.

pTextureSurface´Â ·»´õ·¯ Ÿ°ÙÀÇ Ç¥¸éÀÌ´Ù.

< ·»´õ·¯ ÅؽºÃÄ »ý¼º >

pTexture, pRendererSurface »ý¼º½Ã width, height, format( D3DFORMAT )Àº ÀÏÄ¡  ÇØ¾ß ÇÑ´Ù.

void  CreateTexture( LPDIRECT3DDEVICE9 pDevice, D3DFORMAT format, int  width, int  height )

{

    pDevice->CreateTexture( width, height, 1, D3DUSAGE_RENDERTARGET,

        format, D3DPOOL_DEFAULT, &pTexture, NULL);

 

    D3DXCreateRenderToSurface( pDevice, width, height,

        format, TRUE, D3DFMT_UNKNOWN, &pRendererSurface );

 

    pTexture->GetSurfaceLevel( 0, &pTextureSurface );

 

    pDevice->SetRenderTarget( 0, pTextureSurface );

    pRendererSurface->BeginScene( pTextureSurface, NULL );

    pDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xff0000ff, 1.0f, 0);

    pRendererSurface->EndScene( 0 );

}

< ·»´õ·¯ ÅؽºÃÄ¿¡ ÁÖÀüÀÚ ±×¸®±â >

LPD3DXRENDERTOSURFACE::BeginScene( ) ÀÌÀü¿¡ LPDIRECT3DDEVICE9::Clear( )¸¦ Çϸé ÁÖÀüÀÚ°¡ Àß·Á¼­ ³ª¿Â´Ù. BeginScene( ) ÀÌÈÄ¿¡ Clerar( )¸¦ ½ÇÇà ÇØ¾ß ÇÑ´Ù.

    //·»´õ·¯ ÅؽºÃÄ ±×¸®±â

    g_d3d_Device->SetRenderTarget( 0, g_rendererTexture.pTextureSurface );

    g_rendererTexture.pRendererSurface->BeginScene( g_rendererTexture.pTextureSurface, NULL );

    g_d3d_Device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xff0000ff, 1.0f, 0);

 

    g_d3d_Device->SetVertexShader( NULL );

    g_pMesh->DrawSubset( 0 );

 

    g_rendererTexture.pRendererSurface->EndScene( D3DX_FILTER_NONE );

< ½ºÇÁ¶óÀÌÆ®·Î ·»´õ·¯ ÅؽºÃÄ Ãâ·Â >

·»´õ·¯ ÅؽºÃÄÀÇ Ç¥¸éÀÎ pTextureSurface Ÿ°ÙÀ» µð¹ÙÀ̽ºÀÇ ¹é¹öÆÛ·Î ·»´õ·¯ Ÿ°ÙÀ» ¹Ù²Û´Ù.
ÁÖÀüÀÚ¸¦ 3D °ø°£¿¡ ±×¸®°í ÀÌÀü¿¡ ·»´õ·¯ ÅؽºÃÄ¿¡ ÀÇÇØ ±×·ÁÁø À̹ÌÁö¸¦ ½ºÇÁ¶óÀÌÆ®¿¡ ¿Ã¸°´Ù..

    //·»µå¸µ

    HRESULT hr;

    g_d3d_Device->SetRenderTarget( 0, g_pBackBuffer );

 

    g_d3d_Device->Clear (0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB (255, 255, 255), 1.0f, 0);

    g_d3d_Device->BeginScene ();

 

    g_d3d_Device->SetVertexShader( NULL );

    g_pMesh->DrawSubset( 0 );

 

    D3DXVECTOR3 pos( 0, 0, 0 );

    g_pSprite->Begin( 0 );

    g_pSprite->Draw( g_rendererTexture.pTexture, NULL, &pos, NULL, 0xffffffff );

    g_pSprite->End();

 

    g_d3d_Device->EndScene ();

    hr = g_d3d_Device->Present (NULL, NULL, NULL, NULL);

ÇÁ·ÎÁ§Æ® :  
ÁÖÀüÀÚ°¡ ȸÀüÇÏ´Â µ¥¸ð teapot.zip
·»´õ·¯ ÅؽºÃÄ·Î ÁÖÀüÀÚ¸¦ ½ºÇÁ¶óÀÌÆ®¿¡ ·»´õ¸µÇÏ´Â µ¥¸ð RenderToSurface.zip