2014-12-22 70 views
-1

這是我在這個論壇上的第一篇文章。大約3個月前,我開始學習DirectX 11(使用C++)。我正在嘗試編寫基於DirectX 11的自己的引擎,當我在DirectX11內容上繪製Direct2D內容時,我看到了一些小缺點。我明白爲什麼會發生,但我不知道如何解決它。我認爲這個問題是矩陣轉換的四倍,我畫直接二維內容。我從www.braynzarsoft.net學習。教訓:Tutorial 14: DirectX 11 Simple FontC++ - DirectX11的覆蓋Direct2D的質地

i.stack.imgur.com/Ok4Nl.png

i.stack.imgur.com/mR7UH.png

矩陣變換,我的「四拉的方式頂部」的DirectX 11的含量:

XMFLOAT4X4 WVP; 
xmset(WVP, XMMatrixIdentity()); 
xmset(device->m_PerObject.m_wvp, XMMatrixTranspose(XMFloat4X4ToXMMatrix(WVP))); 
xmset(device->m_PerObject.m_world, XMMatrixTranspose(XMFloat4X4ToXMMatrix(WVP))); 
device->getDeviceContext()->UpdateSubresource(device->getPerObjectInfo()->getBuffer(), 0, NULL, &(device->m_PerObject), 0, 0); 
device->getDeviceContext()->VSSetConstantBuffers(0, 1, device->getPerObjectInfo()->getBufferPtr()); 
device->getDeviceContext()->PSSetShaderResources(0, 1, &m_d2dTexture); 
device->getDeviceContext()->PSSetSamplers(0, 1, &sampState); 
device->getDeviceContext()->DrawIndexed(6, 0, 0); 

我寫功能‘xmset’指配第二參數的第一參數(使用XMFLOAT4X4或XMFLOAT3以防止崩潰由於TU 16對齊)。 像教程說我已經指派XMMatrixIdentity()來WVP(世界視圖投影),然後將它傳遞給定的緩衝區。我如何在DirectX 11內容上繪製總是?

+0

請注意,對於DirectXMath的這種使用模式,您應該可以在[DirectX Tool Kit](http://go.microsoft.com/fwlink/?LinkId=248929)中使用SimpleMath,它提供了隱式轉換運算符, 'XMFLOAT4 <-> XMVECTOR''和''XMFLOAT4X4 <-> XMMATRIX''。 –

+0

該問題不可能是轉換矩陣,而是深度順序或深度狀態。請注意,教程假設您使用的是DirectX 11.0系統。使用安裝了DirectX 11.1運行環境的系統時,不需要使用DXGI曲面共享和多個設備在Direct3D 11設備上渲染Direct2D。 –

+0

我在DirectX 11.0中編寫引擎那麼,我可以谷歌找到答案? – razzorflame

回答

0

我已經解決了這個問題。就像查克沃爾伯恩說的那樣,問題處於深入的狀態。我不得不創建兩個深度狀態 - 對於direct2d(DepthEnable = false)和direct3d(DepthEnable = true)。如果有人遇到同樣的問題,您只需要兩個ID3D11DepthStencilState。非常感謝!