textures - Vulkan 采样器未显示正确的边框颜色
问题描述
我使用“clamp to border”对图像之外的纹理(其格式为 vk::Format::eR8G8B8A8Unorm)进行采样,并将边框颜色设置为不透明的白色。但是我得到的渲染边框颜色总是黑色,我找不到原因。
以下是相关的采样器设置:
vk::SamplerCreateInfo samplerInfo = {};
samplerInfo.addressModeU = vk::SamplerAddressMode::eClampToBorder;
samplerInfo.addressModeV = vk::SamplerAddressMode::eClampToBorder;
samplerInfo.addressModeW = vk::SamplerAddressMode::eClampToBorder;
samplerInfo.borderColor = vk::BorderColor::eIntOpaqueWhite;
我检查了其他类型的寻址模式:vk::SamplerAddressMode::eRepeat、vk::SamplerAddressMode::eMirroredRepeat 和 vk::SamplerAddressMode::eClampToEdge,它们都工作正常。
我用 vk::BorderColor::eFloatOpaqueWhite 替换了 vk::BorderColor::eIntOpaqueWhite 然后我得到了白色 - 但很奇怪,因为如果纹理格式是 vk::Format::eR8G8B8A8Unorm 我希望需要的标志是整数形式 - vk::BorderColor::eIntOpaqueWhite 如下所述:https ://vulkan-tutorial.com/Texture_mapping/Image_view_and_sampler ?
谢谢
解决方案
诸如定点格式之类UNORM
的在读取时会转换为浮点数,而写入它们的浮点数会转换为规范化的定点值。在此转换之后发生 Texel 替换(通过边框颜色) 。因此,在这一点上,格式被视为浮点格式,而不是整数格式。
事实上,定点格式几乎总是被视为浮点格式,除了它们的数据如何映射到内存的细节。
推荐阅读
- java - Java Scanner nextInt() 让我按两次 Enter 以使该值被接受
- typescript - Typescript 项目引用:处理引用项目的第三方依赖项
- python - python - 如何使用正则表达式替换字符串中的特定组?
- sql - 如何使用 windows 功能检索第一个日期和最后一个日期?
- kivy - KivyMD navdrawer 是透明的
- php - 获取 JSON React to PHP
- typescript - 在 if else 语句中发出
- python - 使用 IP 地址将 neo4j 桌面与 python 连接,而不是提供本地主机
- ibm-cloud - 您可以使用工具链在 openshift 上进行部署吗?
- java - 为什么在JDK8下new String() + new String()会返回不同的结果