着色器Encoding floats to RGBA

前言

先简单记录一下,在cesium中看见一个函数czm_unpackDepth,原码中对于其解释是 ,czm_unpackDepth:将 vec4 深度值解包为 [0, 1) 范围内的浮点数。并给出了一篇博客地址Encoding floats to RGBA - the final?

正文

1. 如何实现编码到RGBA中

inline float4 EncodeFloatRGBA( float v ) {
  float4 enc = float4(1.0, 255.0, 65025.0, 16581375.0) * v;
  enc = frac(enc);
  enc -= enc.yzww * float4(1.0/255.0,1.0/255.0,1.0/255.0,0.0);
  return enc;
}
inline float DecodeFloatRGBA( float4 rgba ) {
  return dot( rgba, float4(1.0, 1/255.0, 1/65025.0, 1/16581375.0) );
}


参考文章

2. 为什么要编码到RGBA中

单通道的float为32-bit,
不总是支持浮点纹理格式,要在这些系统上存储深度,必须将它们转换为定点并打包到传统无符号归一化 (UNORM) 纹理的 4 个通道中。
Why encode floats in RGBA?
把float编码到RGBA8

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值