Directx9 Oberfläche textur
Ich will meine Backbuffer in meine LPDIRECT3DSURFACE9 und kopieren Sie dann die Oberfläche in meinen IDirect3DTexture9 schließlich verwenden, die textur als mein Objekt der Haut. Ich habe die codes aber erhielt nur schwarze Pixel.
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);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, so etwas wie dieses
Wo IdStage ist das aktuelle render-target, das Sie kopieren möchten, in Ihrem Fall es wird sein 0
m_Texture ist eine DirectX-Textur, die Sie erhalten möchten, um die Kopie von der backbuffer
Einen Anderen Weg:
Schritt 1: Get back-buffer als eine Fläche:
Schritt 2: Erstellen Sie eine Leere textur
Hinweis: Wenn Sie möchten, dass die alpha-Kanal-verwenden Sie dann D3DFMT_A8R8G8B8 format.
Schritt 3: Holen Sie sich die Zeiger, welche auf der oberen Oberfläche der leeren textur
Schritt 4: Oberfläche zu Oberfläche Kopie (back-buffer Oberfläche leere Fläche)
Schritt 5: Resultierende textur mit back-buffer Inhalt