【问题标题】:Direct3D 11 depth buffer result in black screenDirect3D 11 深度缓冲区导致黑屏
【发布时间】: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


【解决方案1】:

您可能在尝试使用之前忘记将深度缓冲区清除为 1.0。

【讨论】:

  • 我没有代码了,但我确定我没有忘记这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多