글의 출처는 KGDA 프로그래밍 란입니다.
-------------------------------------
┼ ▨ 3D기반으로 2D를 만들때 질문입니다... - jym0201(jungym0201@hanmail.net) ┼

안녕하세요... 이번에 3D기반으로 2D를 만들어 볼려구 하는데 궁금 한게 있어서 질문을 드립니다.
2D에서는 필요할때 오프스크린에 여러가지 이미지를 한번만 찍은후 매 프레임마다 오프스크린만
찍어주면 매번 여러개의 이미지를 매프레임마다 찍지 않아도 되서 좀더 효율적이었는데(겹쳐지는
부분이 많을경우)도 이런 비슷한 방법이 있는지요..  예를들어 여러개의 텍스쳐를 매번 찍어줄필
요 없이 하나의 빈 텍스쳐에 여러개의 텍스쳐를 한번만 찍어 준후 이 빈 텍스쳐를 출력하는 방법
이란든지...???  아시는 분께선 답변해주시면 감사하겠습니다.


No, 4731
이름:dodo (dodo@mail.knm.net) ( 남 )
분류:A
레벨:아마추어
2003/3/5(수)
조회:98
평가:

당근 가능합니다^^

기본적으로 오프스크린을 클리어 하지 않으면 되지만 바람직한 방법은 jym0201님이 생각하신 방법으로 하시면 됩니다. 즉, Renderable texture 생성하시면 됩니다.

D3DXCreateRenderToSurface함수를 참조하시면 됩니다. 아무래도 D3DX함수를 사용하시는게 에러를 줄이고 좋은 방법일듯 합니다.

개념은 같지만 구현 하는 방법은 몇가지가 있을수 있습니다. 아래의 방법이 나름대로 깔끔 할거 같으니 참조 바랍니다.

아래에 대충 중요 소스 부분만 적어 봅니다.

// Renderable texture

LPD3DXRENDERTOSURFACE   g_pRenderToSurface = NULL;
LPDIRECT3DSURFACE8      g_pSurface   = NULL;
LPDIRECT3DTEXTURE8      g_pTexture   = NULL;

// Renderable texture 생성

D3DDISPLAYMODE d3ddm;
g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );

D3DXCreateRenderToSurface(g_pd3dDevice, 512,512,d3ddm.Format,FALSE,D3DFMT_UNKNOWN,&g_pRenderToSurface);

D3DXCreateTexture(g_pd3dDevice, 512, 512, 0, D3DUSAGE_RENDERTARGET, d3ddm.Format,  D3DPOOL_DEFAULT, &g_pTexture);

g_pTexture->GetSurfaceLevel(0, &g_pSurface);



// 랜더링

g_pRenderToSurface->BeginScene(g_pSurface,NULL);
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET , D3DCOLOR_ARGB(0,255,255,255), 0, 0 );

각종 랜더링....

g_pRenderToSurface->EndScene();

//////////////////////////////////////////////

이렇게 하시면 g_pTexture에 랜더가 됩니다.

이제 이렇게 만들어진 텍스쳐를 사용하시면 됩니다.

^^즐프...