c++ - 深度缓冲区未填充阴影贴图渲染通道中的数据
问题描述
我目前正在研究我在 Vulkan 中的阴影。我根据SaschaWillem和Itoral 的代码为我的阴影贴图创建了一个单独的渲染通道。我的应用程序的基础是基于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 提出的再次检查的建议,否则我可能永远找不到它:)
推荐阅读
- sql - SQL Server DATEDIFF 对 YEAR 差值进行四舍五入。如何四舍五入?
- javascript - Javascript 对象,返回包含嵌套数组中的值的更新对象
- r - grDevices::dev.new() 第一次不起作用
- vue.js - 带有 imagemin webpack 插件的 Vue cli 3
- sql - 大于或小于一个数量
- ms-access - 通过访问表单上的按钮将费用记录复制到发票详细信息
- java - Spring Integration 从 REST 服务获取分页结果
- javascript - 查找最大匹配计数
- r - 使用 ggplot scale_x_yearmon 缺少 yearmon 标签
- sql - SSIS 中的 Google Analytics/Adwords 数据?