C++ 二维精灵(背景)前面的三维对象,如何?

C++ 二维精灵(背景)前面的三维对象,如何?,c++,2d,sprite,direct3d,augmented-reality,C++,2d,Sprite,Direct3d,Augmented Reality,我是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

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


你们有什么建议吗

作为一个快速修复,您可以如下禁用深度测试

g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
这样,正在绘制的基本体的z索引应该反映它们的绘制顺序


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

作为一个快速修复,您可以禁用深度测试,如下所示:

g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
这样,正在绘制的基本体的z索引应该反映它们的绘制顺序


此外,请尝试使用PIX调试工具(该工具与DirectX SDK捆绑在一起)。这始终是我对绘图差异的第一个调用端口,因为它允许您单独调试每个绘图调用,并访问深度缓冲区和转换的顶点。

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

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

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

        D3DXVECTOR3 backPos (0.f, 0.f, 0.f);
        pBackgroundSprite->Begin(D3DXSPRITE_ALPHABLEND);
        pBackgroundSprite->Draw (pBackgroundTexture,
                           0, 
                           0,
                           &backPos,
                           0xFFFFFFFF);
        pBackgroundSprite->End();
希望你能做你想做的事