这是我在这个论坛上的第一篇文章。大约3个月前,我开始学习DirectX 11(使用C ++)。我正在尝试编写基于directx 11的自己的引擎,当我在DirectX11内容之上绘制Direct2D内容时,我看到了一个小缺点。我理解为什么会这样,但我不知道如何解决它。我认为问题是使用quad的矩阵变换来绘制直接的2d内容。我从www.braynzarsoft.net学习。课程:Tutorial 14: DirectX 11 Simple Font
i.stack.imgur.com/Ok4Nl.png
i.stack.imgur.com/mR7UH.png
矩阵变换和我绘制四边形的方式" top" 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(World View Projection)然后将其传递给常量缓冲区。如何在DirectX 11内容之上绘制ALWAYS?
答案 0 :(得分:0)
我已经解决了这个问题。就像查克沃尔布恩所说的那样问题处于深度状态。我必须创建两个深度状态 - 对于direct2d(DepthEnable = false)和direct3d(DepthEnable = true)。如果有人遇到同样的问题,你只需要两个ID3D11DepthStencilState。非常感谢!