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,¢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,我可以看到三角形,但背景是空白的。
你们有什么建议吗?
答
作为一个快速解决方案,您可以禁用如下的深度测试;
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();
应该有希望做你正在寻找的东西。