设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 游戏开发 >> 《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章(17)     SIN_LOOK[angle] = sin(rad_angle);
    COS_LOOK[angle] = cos(rad_angle);
    }  // end for angle
以下是一个利用该张查找表的例子,该代码执行的结果是画一个半径为10的圆:
for (int ang = 0; ang<360; ang++)
    {
    // compute the next point on circle
    x_pos = 10*COS_LOOK[ang];
    y_pos = 10*SIN_LOOK[ang];

    // plot the pixel
    Plot_Pixel((int)x_pos+x0, (int)y_pos+y0, color);
    }  // end for ang
当然,查找表需要占用一定的内存,但这样做也是值得的。“如果你能够预先算出结果,就将其放进查找表中。”这是我的座右铭。你可以思考一下DOOM、Quake以及我的最爱Half-Life是怎样工作的?

汇编语言
我想讨论的最后一种优化是使用汇编语言。你或许已拥有了很酷的算法和好的数据结构,但你还是希望更有效率。手工编写汇编语言不再能使代码如当年运行在8/16位处理器上那般,一下子快上1000倍,但它一般总能使你的代码运行速度提高2至10倍。这说明手工编写汇编语言代码还是非常值得的。
当然,你必须确保只转换游戏程序中需要转换的代码部分。注意不需要优化主菜单程序,因为那样只是浪费时间。用一个性能测试工具(Profiler)测试一下当你的游戏程序运行的时候,CPU时间在何处被消耗殆尽(可能在图形部分),然后定位该处并将其以汇编语言改写。我建议使用Intel的Vtune作为性能测试工具。
在过去(几年前),大部分编译器不支持内联汇编。如果有,也很难用!如今Microsoft、Borland和Watcom的编译器都提供内联汇编的支持,用来编写数十句到几百句的小程序就如同单独使用汇编程序一样得心应手。所以我建议如果需要汇编语句就使用内联的汇编器。下面的代码表明在使用Microsoft VC++时如何调用内联汇编:
_asm
{
.. assembly language code here
} // end asm
内联汇编器最突出的优点是它允许使用已在C/C++中定义的变量名。下面的代码示范了如何使用内联的汇编语言编写一个32位的内存填充函数:
void qmemset(void *memory, int value, int num_quads)
{
// this function uses 32 bit assembly language based
// and the string instructions to fill a region of memory
_asm
   {
   CLD                // clear the direction flag
   MOV EDI, memory    // move pointer into EDI
   MOV ECX, num_quads // ECX hold loop count
   MOV EAX, value     // EAX hold value
   REP STOSD          // perform fill
   }  // end asm

}  // end qmemset
要使用这个新的函数,你只需这样调用:

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