繁体   English   中英

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

[英]Depth buffer is not filled with data in shadow map render pass

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

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

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

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

看起来好像所有碎片都被丢弃了。

我完全不知道如何进行。 您能指出我寻找该问题原因的方向吗?

似乎渲染过程的明确值是这里的问题。

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};

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM