[英]3D object in front of 2D Sprite (background) , how?
我是Direct3D的新手,當時我在一個項目中,從網絡攝像頭拍攝照片並在其前面繪制一些3D對象。
我能夠使用“正交投影”將網絡攝像頭圖像渲染為背景。
//init matrix
D3DXMatrixOrthoLH(&Ortho, frameWidth, frameHeight, 0.0f, 100.0f);
//some code
D3DXVECTOR3 position = D3DXVECTOR3(0.0f, 0.0f, 100.0f);
g_pSprite->Begin(D3DXSPRITE_OBJECTSPACE);
g_pSprite->Draw(g_pTexture,NULL,¢er,&position,0xFFFFFFFF);
g_pSprite->End();
然后,我嘗試在其前面插入一個簡單的三角形。 矩陣設置如下
D3DXMATRIXA16 matWorld;
D3DXMatrixTranslation( &matWorld, 0.0f,0.0f,5.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI / 4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
5.0應該小於100.0,並且三角形應該出現在圖像的前面。 但是,除非將z位置設置為0,否則它不會出現。在位置0,我可以看到三角形,但背景為空白。
你們有什么建議嗎?
如果您打算僅將圖像用於背景目的,則不會在對象空間(D3DXSPRITE_OBJECTSPACE)中繪制網絡攝像頭圖像; 就像是
D3DXVECTOR3 backPos (0.f, 0.f, 0.f);
pBackgroundSprite->Begin(D3DXSPRITE_ALPHABLEND);
pBackgroundSprite->Draw (pBackgroundTexture,
0,
0,
&backPos,
0xFFFFFFFF);
pBackgroundSprite->End();
應該希望做您想要的。
作為快速解決方案,您可以按以下方式禁用深度測試;
g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
這樣,繪制圖元的z索引應反映繪制圖元的順序。
另外,請嘗試使用PIX調試工具(該工具與DirectX SDK捆綁在一起)。 這始終是我對圖形差異的第一個呼吁,因為它允許您分別訪問深度緩沖區和變換后的頂點來調試每個Draw調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.