阴影贴图渲染过程中深度缓冲区未填充数据

时间:2018-08-20 19:25:21

标签: c++ vulkan depth-buffer shadow-mapping zbuffer

我目前正在Vulkan进行着色。我已经基于SaschaWillem'sItoral's代码为我的阴影贴图创建了一个单独的渲染通道。我的应用程序基于VulkanTutorial

我遇到的问题是应该将Z值写入的深度缓冲区完全用零填充。我目前正在将与相机相同的MVP传递给阴影贴图着色器。我已经将RenderDoc附加到我的应用程序上,并且阴影贴图过程的“网格输出”选项卡包含与常规过程完全相同的gl_Position值。不幸的是,这些值没有按纹理查看器所示保存到缓冲区中。

同时将常规着色器中计算出的值正确填充到常规深度缓冲区中。

  

“每次光栅化器产生碎片时,深度测试都会   检查新片段是否比前一个片段更近。如果它   否,则新片段将被丢弃。通过的片段   深度测试将其深度写入深度缓冲区。”

似乎所有碎片都被丢弃了。

我对如何进行的想法一无所知。您能指出我寻找问题原因的方向吗?

1 个答案:

答案 0 :(得分:0)

这里似乎是渲染过程的清除值。

std::array<VkClearValue, 1> clearValues = {}; 
clearValues[0].depthStencil = { 1.0f, 0 }; 
renderPassInfoStruct.clearValueCount = 1; 
renderPassInfoStruct.pClearValues = clearValues.data(); 

是什么为我解决了这个问题。以前索引0的颜色值设置为 {0.f,0.f,0.f,1.f};

感谢杰西再次提出的建议,否则我可能永远找不到:)