微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vulkan 标准化值公式例如 VK_FORMAT_R8_UNORM?

如何解决Vulkan 标准化值公式例如 VK_FORMAT_R8_UNORM?

在 Vulkan 中,VK_FORMAT_R8_UnorM 等格式将 [0.0f,1.0f] 范围内的单精度浮点数映射到 8 位无符号整数。是float->uint8_t方向的公式正是

uint8_t unorm(float x) {
  return roundf(x*255.0f);
}

标准C函数在哪里?或者是别的什么?还是实现定义的?

(请注意,上述内容会为 uint8_t(0) 和 uint8_t(255) 提供的值是其他值 uint8_t(1)、uint8_t(2) 到 uint8_t(254) 的一半。)

解决方法

从 3.9.2 开始。从浮点到归一化定点的转换

从浮点值 f 到相应的无符号归一化定点值 c 的转换定义为首先将 f 钳制到范围 [0,1],然后计算

c = convertFloatToUint(f × (2b - 1),b)

其中 convertFloatToUint(r,b) 返回两个无符号二进制整数值之一,恰好 b 位最接近浮点值 r。实现应该四舍五入到最接近的。如果 r 等于一个整数,则必须返回该整数值。特别是,如果 f 等于 0.0 或 1.0,则 c 必须分别赋值为 0 或 2b - 1。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。