深度缓冲区未填充阴影贴图渲染通道中的数据
Depth buffer is not filled with data in shadow map render pass
我目前正在 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 };
谢谢杰西的建议,再次经历它,否则我可能永远不会找到它:)
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 深度缓冲区未填充阴影贴图渲染通道中的数据
- OpenCV-浮动数据类型和强度范围在0-255范围内的RGB通道
- 通过用于UV4L数据通道的unix域套接字发送数据
- GPUMAT-访问自定义内核中的2个通道浮点数据
- 将一个通道数据复制到OpenCV中的另一个通道
- 打包左通道和右通道数据
- 在传输中未收到数据包而没有通道数据包丢失的原因
- 在双通道矩阵中插入数据
- 带alpha的WebP会丢失颜色通道数据
- 当"修改器"列表中有2个以上的修改器时,3ds Max C++修改器不会接收贴图通道数据
- 使用IOBluetooth框架的音频数据污染了我的RFCOMM通道