《游戏编程算法与技巧》笔记(4~12)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Le_eG/article/details/82420939

第四章 3D图形

软件光栅化:不利用硬件,由软件方式将3D模型渲染到2D颜色缓冲。

图形处理单元(GPU):硬件可以绘制点、线、三角形等功能。

3D对象在计算机的表示:三角形。只用3个顶点且3个顶点必在一个平面上,同时任何3D对象都可以简单地用细分三角形表示。

坐标系:模型坐标系;世界坐标系;视角/摄像机坐标系;投影坐标系。

模型坐标系:模型本身的坐标系。

世界坐标系:不同模型自身坐标系不同,而在游戏世界必须有一个统一的坐标系。在模型坐标系转换到矩阵坐标系的过程中,涉及模型缩放、平移、旋转等操作,用到变换矩阵。

视角/摄像机坐标系:3D对象在游戏世界真实存在,但玩家只关心看到的部分。利用观察者矩阵对模型世界坐标进行变换。

投影坐标系:通过视角坐标系,可以确定所有可能被看到的3D对象,但由于物体间的相互遮挡,需要再对3D对象进行投影变换,得到真正可见的部分。投影分为正交投影与透视投影。正交投影没有深度的概念,对远近没有体现;透视投影会有近大远小的变化。

颜色:RGBA

顶点属性:为使模型有颜色,需在顶点存储额外信息,例如纹理坐标、顶点法线(通常意义上讲三角形具有两个法线,取决于顶点序,利用顶点序,可以对3D对象进行背面剔除)。

环境光:添加到场景中每一个物体上的固定光照。

方向光:没有位置,只有方向,可以作用于整个场景,但由于方向原因,物体背面没有光照。

点光源

聚光灯

Phong光照模型(局部光照模型,因其不考虑二次反射):环境光+漫反射+高光。漫反射是光源作用于物体表面的主要反射,会被所有方向光、点光源、聚光灯等影响,但不受摄像机位置影响。高光取决于光源与摄像机的位置。

着色:平面着色;Gouraud着色;Phong着色。

可见性:深度缓冲区。对于场景中存在透明物体,深度缓冲区先画所有不透明物体,再画透明物体,再进行深度检查。如果深度缓冲区位数较少,会产生深度值冲突,即两个像素深度相近,在每一帧会交替出现前后像素切换的情况。

欧拉角

万向锁

四元数

第五章 游戏输入

输入形式:数字形式,只有两种状态的输入,例如键盘按键;模拟形式,输入为一个确定范围内的值,例如手柄摇杆,但在模拟输入时应对模拟输入进行过滤,消除输入的偏差值,可以考虑采取设置无效区域的方法。

基于事件的输入:游戏中有些功能需要一直检测是否有输入,多个代码块都要轮询输入,此时可以采取事件机制,将所有需要轮询的函数存放到表中,当有输入时,向表中的每一个函数发送通知。此外有的功能存在相互制约,因此在注册时,需要为每一个函数确定优先级顺序。

移动设备输入:触屏、手势(手势判定可以采用Rubine算法)、加速器、陀螺仪。

第六章 声音

原始数据:短音效可以存储为WAV格式或者其他无压缩文件格式;长音效则可以采用MP3或者OGG.

监听者

发射者

衰减

环绕声

数字信号处理:在加载音效之后,对其进行修改得到不同效果。

回声:回声效果库Freeverb3

音高偏移:常见的有多普勒效应。

声音遮挡/声音衍射:低频率音波比高频率更容易传播,声音遮挡利用低通滤波器,将高频音波移除,且降低了整体音量。声音衍射在声音遇到障碍物时,不以直线传播。可以利用Fresnel声学衍射方法对遮挡或是衍射进行判别。如果没有一个方向的声音可以直接到达,则为遮挡,如果一些可以到达即为衍射。

第七章 物理

碰撞几何体:包围球;轴对齐包围盒(AABB),每一条边都平行于坐标轴;朝向包围盒(OBB),类似于AABB,但不要求与轴对齐;胶囊体;凸多边形;组合碰撞几何体。

碰撞检测:

【即时碰撞检测】

球与球:距离平方与半径之和的平方进行比较。

AABB与AABB:判断不碰撞较为简便,比较对应边的坐标大小。

线段与平面:将线段方程带入平面方程求解。

线段与三角面:先判断线段与三角面所在平面,存在交点继续。取该交点分别与三角形三个顶点组成向量,判定向量与三角形三边的旋转方向是否与三角形顶点顺序相同,若是,则点在三角形内。

球与平面:过球球心做平行的平面,计算两平面间距离与球半径进行比较。

【连续碰撞检测】

球形扫掠体检测(子弹穿过纸张问题)

响应碰撞

优化碰撞:场景内存在大量物体,无法每帧都进行检测,可对游戏世界进行分区,例如四叉树、二进制空间分割(BSP)、八叉树等。

基于物理的移动:线性力学,采用固定步长对速度进行积分(欧拉和半隐式欧拉积分、Verlet积分等),计算位移。

第八章 摄像机

摄像机类型:固定摄像机、第一人称摄像机、跟随摄像机、场景切换摄像机

投影透视:视场(FOV);宽高比

摄像机实现:基础跟随摄像机、弹性跟随摄像机、旋转摄像机、第一人称摄像机

摄像机支持算法:摄像机碰撞、拣选

第九章 人工智能

【寻路】

搜索空间的表示:图作为数据结构,每个可到位置作为节点,路径即组成边。(路点/导航网格)

可接受的启发式算法:曼哈顿距离/欧几里得距离

贪婪最佳优先算法

【A*寻路】

基于状态的行为:AI状态机;状态机设计模式

第十章 用户界面

菜单系统:菜单栈/按钮/打字

HUD元素

UI问题:支持多套分辨率;本地化(支持多语言)

第十一章 脚本语言和数据格式

【脚本语言】

C++:渲染引擎、AI(寻路)、物理系统、文件加载

脚本语言:摄像机逻辑、AI(状态机)、一般的游戏逻辑、用户界面

Lua

实现一门脚本语言:标记化、正则表达式、语法分析、代码执行与生成

数据格式

二进制/文本格式(INI、JSON、XML)

第十二章 网络游戏

协议(IP、ICMP、TCP、UDP)

网络拓扑

作弊

猜你喜欢

转载自blog.csdn.net/Le_eG/article/details/82420939