C++ 二维精灵(背景)前面的三维对象,如何?
我是Direct3D新手,我参与了一个项目,从网络摄像头拍摄照片,并在它前面绘制一些3D对象 我能够使用正交投影渲染网络摄像头图像作为背景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
//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索引应该反映它们的绘制顺序
此外,请尝试使用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();
希望你能做你想做的事