设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 游戏开发 >> 《Windows游戏编程大师技巧》(第二版)第11章
精品推荐
游戏开发点击TOP10
·DirectX5.0最新游戏编程指南 DirectDraw教程篇 二、第一个DirectDraw实例
·用Excel编写小游戏
·五子棋的原代码
·游戏开发方面相关的电子书下载
·游戏文件系统的解决方案
·基于LOD的大规模真实感室外场景实时渲染技术的初步研究 part II&III
·用MFC构造DirectX应用框架
·游戏开发开门
·《Windows游戏编程大师技巧》(第二版)第11章
·DirectX8.1的DirectDraw7研究手记(三)
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

《Windows游戏编程大师技巧》(第二版)第11章

作者: 来源:网络文章 时间:2005-12-17 22:39:07

《Windows游戏编程大师技巧》(第二版)第11章(14) product=(n<<7) + (n<<9); // n*128 + n*512 = n*640
不过,如果处理器在1至2个时钟周期内就可以完成乘法运算,这种优化就失去意义了。
如果你的算法中应用到矩阵操作,要充分利用矩阵的稀疏性——一些元素为零。
在创建常量时,确保其为恰当的类型以防编译器编译出错或将其强迫转换为整数类型。最好是使用C++中新的const指示字。例如:
const float f=12.45;
避免使用平方根、三角函数或任何复杂的数学函数。一般而言,这些复杂函数的计算都可以根据特定的假设或近似而找到一个简单的方法来实现。但即使结果还是不理想,你仍然可以做一张查找表。我在后面将会提及该表。
如果你要将一个大的浮点数组清零,要按如下方式使用memset():
memset((void  *)float_array,0,sizeof(float)*num_floats);
然而事实上也只有这种情况下才能这样做,因为浮点数是以IEEE格式编码的,故而只有整数零和浮点零的数值才完全相等。
在执行数学运算时,看一看在编码前能否手工先将表达式简化。比如,n*(f+1)/n等于(f+1),因为除法和乘法的运算结果将n 消去了。
如果你要执行复杂的数学计算,而且你在下面的代码中需要再次用到计算结果,那么就将其暂存在高速缓存中。如下所示:
// compute term that is used in more than one eXPression
float n_squared = n*n;

// use term in two different expressions
pitch = 34.5*n_squared+100*rate;
magnitude = n_squared / length;
最后,很重要的一点是确保将编译器的选项设定为打开浮点协处理器,这样编译出的代码的执行速度较快。

定点运算

几年以前,大多数3D引擎都采用定点运算来进行3D中大量的变换和数学运算。这是因为处理器对浮点的支持没有对整数的支持快,甚至在奔腾处理器上也是如此。但是今天,奔腾Ⅱ、Ⅲ和Katmai处理器拥有更好的浮点能力,所以定点运算不再那么重要。
然而在许多情况下,由浮点到整数的光栅变换仍然很慢,因此在内部循环的加法和减法运算中使用定点运算仍是一个较好的选择。在低档的奔腾机器上,这类运算依然比浮点运算要快,因此你可以运用技巧快速地从定点数中提取出整数部分,而不必进行float到int的类型转换。
无论如何,这些都具有一定的不确定性。今天,使用浮点来处理任何运算通常都是最好的选择,但是多了解一些定点运算总还是有帮助的。我的观点是使用浮点来处理所有的数据表示和变换,对于低水平的光栅变换可以分别试一试定点运算和浮点运算,看一看那种处理方法最快。当然,如果你使用纯硬件加速,无需多虑,只要一直使用浮点数即可。

记住了这些,下面让我们来看看如何表示定点数。

定点数的表示
所有的定点数学实际上是以整数尺度为基础的。比如,我们想用一个整数来表示10.5。这做不到,因为没有小数位。你可以将其截断为10.0或将其舍入为11.0,但10.5不是一个整数。但如果你将10.5放大10倍,10.5就变成了105.0,这是一个整数。这便是定点数的基础。你可以采用某一比例系数来对数值进行缩放,并在进行数学计算时将比例系数考虑进去。
由于计算机是二进制的,大部分游戏程序倾向于使用32位整数(或int),以16.16的格式来表示定点数。如图11-12所示。

图11-12:一种16.16定点数表示法
 
你可以将整数部分放在高16位,小数部分置于低16位。这样你已将整个数值放大为原来的216即65536倍。另外,为提取出一个定点数的整数部分,你可以移位并屏蔽掉高16位;为得到小数部分,你可以移位并屏蔽掉低16位。
以下是一些常用的定点数的类型:
#define FP_SHIFT 16     // shifts to produce a fixed-point number
#define FP_SCALE 65536  // scaling factor

typedef int FIXPOINT;

在定点与浮点之间转换

1.《Windows游戏编程大师技巧》(第二版)第11章(1)
2.《Windows游戏编程大师技巧》(第二版)第11章(2)
3.《Windows游戏编程大师技巧》(第二版)第11章(3)
4.《Windows游戏编程大师技巧》(第二版)第11章(4)
5.《Windows游戏编程大师技巧》(第二版)第11章(5)
6.《Windows游戏编程大师技巧》(第二版)第11章(6)
7.《Windows游戏编程大师技巧》(第二版)第11章(7)
8.《Windows游戏编程大师技巧》(第二版)第11章(8)
9.《Windows游戏编程大师技巧》(第二版)第11章(9)
10.《Windows游戏编程大师技巧》(第二版)第11章(10)
11.《Windows游戏编程大师技巧》(第二版)第11章(11)
12.《Windows游戏编程大师技巧》(第二版)第11章(12)
13.《Windows游戏编程大师技巧》(第二版)第11章(13)
14.《Windows游戏编程大师技巧》(第二版)第11章(14)
15.《Windows游戏编程大师技巧》(第二版)第11章(15)
16.《Windows游戏编程大师技巧》(第二版)第11章(16)
17.《Windows游戏编程大师技巧》(第二版)第11章(17)
18.《Windows游戏编程大师技巧》(第二版)第11章(18)
19.《Windows游戏编程大师技巧》(第二版)第11章(19)
20.《Windows游戏编程大师技巧》(第二版)第11章(20)
21.《Windows游戏编程大师技巧》(第二版)第11章(21)
22.《Windows游戏编程大师技巧》(第二版)第11章(22)
23.《Windows游戏编程大师技巧》(第二版)第11章(23)
24.《Windows游戏编程大师技巧》(第二版)第11章(24)
25.《Windows游戏编程大师技巧》(第二版)第11章(25)
26.《Windows游戏编程大师技巧》(第二版)第11章(26)
27.《Windows游戏编程大师技巧》(第二版)第11章(27)
28.《Windows游戏编程大师技巧》(第二版)第11章(28)
29.《Windows游戏编程大师技巧》(第二版)第11章(29)
30.《Windows游戏编程大师技巧》(第二版)第11章(30)
31.《Windows游戏编程大师技巧》(第二版)第11章(31)
32.《Windows游戏编程大师技巧》(第二版)第11章(32)
33.《Windows游戏编程大师技巧》(第二版)第11章(33)
34.《Windows游戏编程大师技巧》(第二版)第11章(34)
35.《Windows游戏编程大师技巧》(第二版)第11章(35)
36.《Windows游戏编程大师技巧》(第二版)第11章(36)
37.《Windows游戏编程大师技巧》(第二版)第11章(37)
38.《Windows游戏编程大师技巧》(第二版)第11章(38)
共38页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [388 :>

《Windows游戏编程大师技巧》(第二版)第11章 相关文章:
《Windows游戏编程大师技巧》(第二版)第11章 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com