【发布时间】:2015-05-11 22:34:05
【问题描述】:
我尝试在 Direct3D 11 中实现深度缓冲区,但结果并不像我努力的那么容易。这是我的问题:每当我调用此函数时:
m_DeviceContext->OMSetRenderTargets(1, &m_RTV, m_DepthStencilView);
使用第三个参数作为我的深度模板视图,我的窗口中什么也看不到;一切都是黑色的。如果我输入 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);
我搜索了相当长的时间来找到解决方案,但我没有帮助我。我还检查了视口,但它不起作用。我还清理每一帧的视图。
你能帮帮我吗?我会很感激的:)谢谢。
【问题讨论】:
-
通常默认深度模板状态应该是更少的读写,这应该适合您的用例。也许尝试启用调试设备以查看是否有任何运行时警告/错误
标签: c++ direct3d depth-buffer