2011-04-01 40 views
0

我是Direct3D的新手,我在一個項目中從網絡攝像頭拍照並在它前面畫出一些3D對象。2D Sprite(背景)前面的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,我可以看到三角形,但背景是空白的。

你們有什麼建議嗎?

回答

1

作爲一個快速解決方案,您可以禁用如下的深度測試;

g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); 

這樣,繪製的圖元的z-index應該反映它們的繪製順序。

此外,請嘗試使用PIX調試工具(與DirectX SDK捆綁在一起)。這總是我繪製差異的第一個端口,因爲它允許您分別調試每個Draw調用,以訪問深度緩衝區和變換的頂點。

2

如果您打算僅將圖像用於背景目的,我不會在對象空間中繪製攝像頭圖像(D3DXSPRITE_OBJECTSPACE);像

 D3DXVECTOR3 backPos (0.f, 0.f, 0.f); 
     pBackgroundSprite->Begin(D3DXSPRITE_ALPHABLEND); 
     pBackgroundSprite->Draw (pBackgroundTexture, 
          0, 
          0, 
          &backPos, 
          0xFFFFFFFF); 
     pBackgroundSprite->End(); 

應該有希望做你正在尋找的東西。