我想將我的Backbuffer捕獲到我的LPDIRECT3DSURFACE9中,然後將表面複製到我的IDirect3DTexture9中,最後使用該紋理作爲我的對象外觀。我編寫了代碼,但只收到黑色像素。Directx9表面紋理
IDirect3DTexture9* texture;
LPDIRECT3DSURFACE9 pd3dsBack = NULL;
void init()//init point
{
D3DXCreateTexture(g_pd3dDevice, 640, 480, D3DUSAGE_DYNAMIC,
0, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &texture);
}
void render()//render point
{
g_pd3dDevice->BeginScene();
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_COLORVALUE(0.0f, 1.0f, 0.0f, 1.0f), 1.0f, 0);
//my scene (1) 3d objects codes for draw.
g_pd3dDevice->EndScene();
//now try to get back-buffer into surface
g_pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pd3dsBack);
//i add this Save section to ensure the backbuffer data received complete and work.(it was ok and save complete true picture of Scene(1)).
D3DXSaveSurfaceToFileA("BackbufferImage.BMP", D3DXIFF_BMP, pd3dsBack, NULL, NULL);
//this line put surface into my texture ; if u think this way is false please give me a simple code to fill texture by surface.
texture->GetSurfaceLevel(0, &pd3dsBack);
pd3dsBack->Release();//release my surface
//scene(2)
g_pd3dDevice->BeginScene();
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_COLORVALUE(1.0f, 0.0f, 0.0f, 1.0f), 1.0f, 0);
//now render my scene(2) and useing the texture object for draw it as skin of my 3d object
g_pd3dDevice->SetTexture(0, texture);
g_pd3dDevice->EndScene();
g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}
謝謝卡洛斯爲您help.i做到這一點,但沒有變化(也許我這樣做是錯誤的),所以請你看看我的代碼編着的。代碼在這裏完成,你也可以編譯它。 – daniel
心中已經上傳它這裏 - > http://www.mediafire.com/?vwin2zj6mhe5wv6 – daniel
嘗試改變0參數中創建紋理1. D3DXCreateTexture(g_pd3dDevice,640480,D3DUSAGE_DYNAMIC,1,D3DFMT_X8R8G8B8,D3DPOOL_DEFAULT,&My_3DTexture ); –