Я пытался реализовать буфер глубины в Direct3D 11, но оказалось, что это не так просто, как я боролся. Вот моя проблема: всякий раз, когда я вызываю эту функцию:
m_DeviceContext->OMSetRenderTargets(1, &m_RTV, m_DepthStencilView);
С 3-м параметром в качестве моего представления глубины трафарета я ничего не вижу в своем окне; все черное. Если я добавлю nullptr, то все мои геометрии будут отображены без проверки глубины (как это было до того, как я попытался реализовать глубину). Вот как я создаю свой буфер глубины и мой шаблон глубины:
D3D11_TEXTURE2D_DESC depthBufferDesc;
ZeroMemory(&depthBufferDesc, sizeof(D3D11_TEXTURE2D_DESC));
depthBufferDesc.Width = iwidth;
depthBufferDesc.Height = iheight;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 1;
depthBufferDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthBufferDesc.SampleDesc.Count = 1;
depthBufferDesc.SampleDesc.Quality = 0;
depthBufferDesc.Usage = D3D11_USAGE_DEFAULT;
depthBufferDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
hr = m_Device->CreateTexture2D(&depthBufferDesc, nullptr, &m_DepthStencilBuffer);
hr = m_Device->CreateDepthStencilView(m_DepthStencilBuffer, nullptr, &m_DepthStencilView);
Я довольно долго искал решение, но мне не помогло. Я также проверил область просмотра, но она не работает. Я также очищаю вид каждого кадра.
Можете ли вы помочь мне, пожалуйста? Я ценю это 🙂 Спасибо.
Возможно, вы забыли очистить буфер глубины до 1.0, прежде чем пытаться его использовать.