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
|