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

来源:互联网 发布:五年级上册优化答案 编辑:程序博客网 时间:2024/04/29 03:16
浮点指令要比定点指令慢很多,功耗也大很多,在精度要求不那么高的情况下,就可以将浮点数定点化,用定点指令来代替浮点指令,一个典型的例子就是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;

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

0 0
原创粉丝点击