簡體   English   中英

2D Sprite(背景)前面的3D對象如何?

[英]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,&center,&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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM