将深度值压缩进颜色通道的方法

规格化的深度值和颜色值都在[0,1]区间内, 但是大多Z-BUUFER中的深度值都有24位的精度,而每个颜色分量都只有8位精度,所以需要将深度值分拆,分别放入多个颜色通道中。

 

可以简单将一个24位的深度值分别放入3个8位的通道中,即R,G,B

需取小数(二进制) 前8位放入R中,方法为:

 

color.r = floor( depth * 256 ) / 256  即将深度值左移8位取整,再右移8位规格化到[0,1]区间内。

 

接下来是将中间8位放入G中:

 

color.g = floor( (depth - color.r) * 256 * 256 ) / 256

 

最后将后8位放入B中:

 

color.b = floor( (depth - color.r - color.g / 256) * 256 * 256 * 256 ) / 256

 

 

使用时应该将深度值还原:

 

depth = color.r + color.g / 256 + color.b / ( 256 * 256 )

 

 

 

这个方法针对一些不支持浮点纹理的硬件,比如本人的硬件,对于现在大多数支持浮点纹理的硬件,则不必进行这样的转换。

 

这个方法的一个缺点是,任何对压缩进RGB通道中的深度分量进行插值的操作都会使最后的结果不正确,所以不要在VS中进行压缩操作。

第二个要注意的是,保存压缩后深度的RGB纹理不能进行过滤,否则结果也会不正确。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值