第一章:Introduction
- 游戏团队里的成员。
- 游戏的类型。
- 游戏引擎的概念。
- 几个知名游戏引擎。
- Runtime Engine Architecture。从hardware到游戏subsystem。
- 游戏开发用到的tool和resource。游戏的tool有两种模式:Standalone tools architecture和Tools built on a framework shared with the game。
第二章:Tools of the Trade
介绍了几个游戏开发用到的工具
- 版本控制(SVN)
- IDE(Visual Studio)
- Profile工具
- 内存泄漏检测工具
第三章:Fundamentals of Software Engineering for Games
介绍游戏开发中的软件工程
- 面向对象编程:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。
- C++编程:类型、大小尾端、定义和声明(注意header里的inline函数要有函数体才可以inline成功)、链接(注意cpp中的重名static变量是独立的)。
- C++程序的内存Layout:堆栈、堆、内存对齐、类的vtable。
- 错误处理:Return Code、异常、断言。遇到错误应该处理后尽量运行下去,不应该直接跳出。
第四章:3D Math for Games
介绍图形学知识。
- 点与向量
- 点积与叉积
- 矩阵
- 变换:平移、旋转、缩放。
- 坐标基底转换。
- 法向量的变换:使用变换矩阵的逆转置:(M_(A->B)^(-1))^T。(如果只有保角变换时可以用原矩阵)
- 四元数及其运算
- 对各种表示旋转的方法的比较
– 三个角度(缺点:gimbal lock,以及旋转顺序不确定)
– 3x3矩阵 (缺点:需要空间大)
– 旋转轴+旋转角度(缺点:计算较复杂)
– 四元数(优点:插值简单可以用SLERP) - SQT(表示缩放、旋转、平移,优点:比4x4矩阵所需空间少)
- 双四元数(表示缩放、旋转、平移,参考资料.)
- 自由度
- 直线、射线、线段、球、平面的数学表示
- 边界处理:Axis-Aligned Bounding Boxes、Oriented Bounding Boxes、Frusta、Convex Polyhedral Regions
- SIMD加速(做点积的技巧:使用
_mm_shuffle_ps()
把register里面的一维扩散到复制到另三维) - 随机数生成