3D-объект перед 2D Sprite (фон), как? - PullRequest
0 голосов
/ 01 апреля 2011

Я новичок в 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 я вижу треугольник, но фон пустой. </p>

У вас есть какие-нибудь предложения?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Я бы не рисовал изображение веб-камеры в пространстве объектов (D3DXSPRITE_OBJECTSPACE), если вы собираетесь использовать свое изображение исключительно в качестве фона; что-то вроде

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

следует надеяться сделать то, что вы ищете.

1 голос
/ 01 апреля 2011

В качестве быстрого исправления вы можете отключить проверку глубины следующим образом:

g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);

Таким образом, z-индекс рисуемых примитивов должен отражать порядок, в котором они нарисованы.

Кроме того, попробуйте использовать инструмент отладки PIX (он входит в комплект DirectX SDK). Это всегда мой первый порт вызова для отрисовки расхождений, поскольку он позволяет отлаживать каждый вызов Draw отдельно с доступом к буферу глубины и преобразованным вершинам.

...