连载:编写高效代码(10) 在精度允许的条件下,将浮点数定点化

        浮点指令要比定点指令慢很多,功耗也大很多,在精度要求不那么高的情况下,就可以将浮点数定点化,用定点指令来代替浮点指令,一个典型的例子就是alpha混合。

        《反恐精英》是很多人非常喜欢的游戏,在下面的游戏截图中,一个人扔了个烟雾弹,画面呈现出半透明的烟雾效果,随着时间的推移,烟雾逐渐散去,画面恢复到原来的状态。

        这种效果如果让美工来实现,那会把人累死,其实这种效果在计算机中可以通过将两张图像进行半透明的混合来实现,这就是图像的alpha混合。混合后新图像每个像素的颜色值为:

 Pixel_ C = (int)(Pixel_A * alpha + Pixel_B * ( 1-alpha ));

 

CS中的烟雾弹效果

         alpha为透明度,是介于0和1之间的小数。随着时间的推移,烟雾图像的alpha值越来越小,当alpha为0时,烟雾效果就完全消失。

         这条语句是一个浮点运算,由于图像上的每个像素都要经过这样的运算,相当耗时,其实可以将alpha定点化为0~32之间的一个整数值,0表示完全显示B图像,32表示完全显示A图像,中间分32个等级,这个代码可以改为:

 Pixel_ C = (Pixel_A * alpha + Pixel_B * ( 32-alpha ) + 16)>>5;

         由于全部是定点语句,执行时间大幅减少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值