2D Sprite(背景)前面的3D对象,怎么样?

问题描述:

我是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,我可以看到三角形,但背景是空白的。

你们有什么建议吗?

作为一个快速解决方案,您可以禁用如下的深度测试;

g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); 

这样,绘制的图元的z-index应该反映它们的绘制顺序。

此外,请尝试使用PIX调试工具(与DirectX SDK捆绑在一起)。这总是我绘制差异的第一个端口,因为它允许您分别调试每个Draw调用,以访问深度缓冲区和变换的顶点。

如果您打算仅将图像用于背景目的,我不会在对象空间中绘制摄像头图像(D3DXSPRITE_OBJECTSPACE);像

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

应该有希望做你正在寻找的东西。