사용자 삽입 이미지

D3DXCreateRenderToSurface 함수에 대한 설명은 msdn이나 Directx 문서에 잘 나와있으니 생략하고 일단 D3DXCreateRenderToSurface함수를 이용해서 텍스쳐에 그려주려면 일단
LPD3DXRENDERTOSURFACE   g_pRenderToSurface;
LPDIRECT3DTEXTURE9           g_pTexture;
LPDIRECT3DSURFACE9          g_pSurface;

와 같은 3개의 개체가 필요하다. 위의 개체 말고도 여러가지 부수적인 것들도 필요하지만 설명을 위한 필수 항목만 언급하겠다.


위의 3개체 가 선언 되었다면 D3DXCreateRenderToSurface 함수를 이용해 RenderToSurface개체를 얻고 D3DXCreateTexture함수로 그려질수 있는 텍스쳐개체를 얻어온다. 그리고 GetSurfaceLevel함수를 사용해서 서페이스에 그려지는걸 텍스쳐에 그대로 옮기도록 설정한다.
D3DXCreateRenderToSurface(g_pd3dDevice, 256, 256, D3DFMT_A8R8G8G8, TRUE, D3DFMT_D24S8, &g_pdRenderToSurface);
D3DXCreateTextureg_pd3dDevice, 256, 256, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &g_pTexture);
g_pTexture->GetSurfaceLevel(0, &g_pSurface);

초기화가 됐으면 이제 surface에 그려주면 된다.
g_pRenderToSurface->BeginScene(g_pSurface, NULL);
g_pd3dDevice->clear(...)
//여기에 surface(texture)에 그려질 부분을 렌더링
해주면 된다
g_pRenderToSurface->EndScene(0);

이제 texture에 그려진 장면을 정점을 잡아서 uv좌표에 맞춰서 랜더링 해주면 된다. 여기서 가장 중요한건 RenderToSurface를 만들거나 Texture를 만들때 format이랑 width, height를 꼭 맞춰 주어야 한다. 심지어 텍스쳐를 입힐 사각형의 크기도 width, height를 맞춰 주어야 한다.
Posted by hazeyun

댓글을 달아 주세요

  1. 앨리삵 2013.06.19 11:10 신고  댓글주소  수정/삭제  댓글쓰기

    궁금한점이 있습니다. 고정파이프라인을 사용하고, 포멧이나 크기 등 다 맞췄는데 나오는 텍스쳐가 모자이크(엘리어싱)되어 나옵니다. 짐작가시는 이유가 있나요..ㅠ

    • hazeyun 2013.06.25 17:18 신고  댓글주소  수정/삭제

      아.. 저도 너무 오래전에 한거라 기억이 잘 나진 않지만... 심하진 않지만 계단현상이 약간 있었던듯 합니다.;;; 너무 오래전이라ㅠ