3D 游戏编程大师技巧系列 读书笔记(-)

初入3D游戏编程,便跃跃欲试在这里写点东西,一是方便自己日后查阅,二是为有需要的朋友提供一些便利.

第一章 3D游戏编程入门

视频游戏本质上是一个持续不断的循环,它执行逻辑并且在屏幕上绘制图象----通常以30~60帧/秒或更高的速度进行控制.

一个简化的游戏循环

1)初始化,主要针对内存分配,资源获取,从磁盘或者文件中加载数据等

2)进入游戏循环,这里指的循环是指主游戏循环,用户在这里一般多是执行动作,并且直到游戏循环结束和退出.

3)读取游戏玩家输入,处理来自键盘,鼠标以及摇杆等输入的信息.

4)执行AI和游戏逻辑,关注于人工智能,物理系统和通用游戏逻辑,并且根据结果在屏幕上绘制下一帧.

5)渲染下一帧,根据游戏玩家输入,以及游戏AI和逻辑的执行结果,生成下一个游戏动画帧,因为通常在offscreen buffer中进行的缘故,一般不为用户所见.下一帧图象被快速地复制到可视区域,产生动画影像.在一个3D软件的引擎中,一般使用非常复杂的3D graphics pipelining(亦为3D图形管线)[来源于http://www.extremetech.com/article2/0,1558,9722,00.asp]来渲染生成数个多边形.,但在基于OpenGL或Direct3D硬件加速引擎中,大部分工作都由硬件在承担.

6)同步显示,很多时候,计算机的速度经常被游戏的复杂度所降低或者提高.相应地游戏帧频也是这样的.在这种情况下,一般采用定时函数或者等待函数,同步游戏到某个最大帧频,并且保持该帧频.一般用户可以接受的帧频是30~60,超过60或者低于30都是不便于用户接受的.

7)循环,主要又回到游戏循环开头,然后重新开始游戏.

8)关闭游戏,主要做的是清理工作,在返回操作系统之前释放占用的所有资源,并清理系统.

个人看法,随着游戏的发展,我越来越觉得游戏在填鸦一样,因为框架是固定的,如这本书中列出来的,记得在我最初的简易赛车游戏中(仍为腹中胎儿)就是由几个简单的类组成,CGame,CDraw,CInput,以及CSound.很简易的,每个类分工很清楚,在前面的(1)中,我一般采用两种方法来进行初始化,a)在各个类中设置构造函数,这个构造函数一般完成一些该类的成员变量的初始化工作,b)Create函数主要完成一些资源加载.以及其它工作.(2)一般在主函数WinMain中进行.其中主要的流程在后面的内容有详细介绍.3)一般是由CInput控制.4)通常是由CGame完成,主要的AI以及游戏逻辑都在这里完成.5)应该是由CDraw来完成?8)主要是各个类中对应的析构函数完成.等,

视频游戏是超高性能计算机程序,这将促使你在时间关键代码部分和内存关键代码部分不使用高级API,你必须不能依靠高级API,而应该自己来做这些事情.否则你将偿付低速度和低性能所带来的困饶.

因而你应该努力避免使用基于WIN32API的高级函数,而求助于更加接近低层的技术.书本中就提示了使用_asm关键字,其中包括所要使用的汇编语言.其实在c++中也用到这中做法,用英文说linkage specification(翻译过来就是连接说明),其中的关键字就是extern"C"再在大括号中加入你要使用的c函数原型,显然c的编程实现效率总体上还是胜于c++的,所以,这也是一个这个话题的应用.

参考文献:

林丽闽,褚尚军,标准C++程序设计教程,电子工业出版社P67-P70

 

你可能感兴趣的:(3D 游戏编程大师技巧系列 读书笔记(-))