0.3d fps (第一人称射击游戏)
简述:
当今游戏业的发展最为风光独好的莫过于MMORPG(大型多人在线游戏了),这类游戏往往投入巨大,然而收益也是非常巨大。最好的例子就是当今最为流行的网游,暴雪公司出品的魔兽世界,一个巨大的4维世界:3D空间+时间维度。而这些游戏的前面却是现在不起眼的单机3D FPS游戏。(从编程角度看)。
3D FPS起源跟图形处理芯片有莫大的关系:ID soft公司的John kamark起用一篇60年代的数学论文架构一个BSP树的3D视图加速程序在PC机上运行3D视角图形开始成行3D射击游戏风气。经历到现在,3D FPS游戏已经是一个相对成熟的制作产业。代表作有孤岛危机,
使命召唤4,使用成熟的3D game engine制作,效果非常逼真。
而现代一个普通3D FPS 游戏的制作基本上是使用成熟的3D game engine制作的了。3D ga me engine目前市场上有好多,各种各样,开源,免费,收费都有,收费的有高价的也有低价的,相差也比较远。目前出名的有unreal game engine && ID Tech game
engine。 当然游戏还要其他策划,美工,剧本的非程序员角色。
原理上game engine就是3D graphics + physics
+ audio + input + script (图形+物理+声音+输入+脚本)5大组件组成, 下面我将一个一个讲解下,并寻找如何组合它们的方法:
1.3D 视图渲染世界:
概述:游戏的图形当然的用图形库,两大主流:DirectX && OpenGL. 目前基于windows平台的游戏居多。所以DirectX占优。我想介绍的是DirectX. 为什么不直接用引擎,因为引擎封装的是也是DirectX,道理一样。明白DirectX就可以对引擎的了解达到一种相当的程度。
1.1DirectX 简单概述:
XXXXXX
1.2DirectX的数学3D世界
XXXXXX
1.3DirectX的基础
XXXXXX
1.4实用DirectX
XXXXXX
1.5GPU编程
XXXXXX
2.物理世界(碰撞检测)
2.1AABB
3.声音世界
4.一个简单的游戏
4.0 简述:
简单的游戏,在一个盒子里实现到有目标人物的射击;
4.1 DXUT engine
4.1.1DirectX
SDK 里面包含了一个简单的封装D3D常用功用的类的一个库;架构如下:
各文件大概解析:
1.DXUT 是管理windows窗口的,还有一些线程的内存任务的管理
2.DXUTEnum是管理设备的也就是显卡,
3.DXUTgui是一个简单的用户界面库
DXUTsettingDlg就是一个已经格式化的一个管理显示设备的对话框
一个架构图:
4.DUXTmesh是3D网格文件的管理
5.DXUTTexture是管理纹理的
6.DXUTmis是一个杂类,有管理数据结构体的,有时间器的,有摄象机的,有方向管制的。
其中的CFirstPersonCamera 就是第一人称视角摄象机,用起来很方便
7.DUXTSound是声音
4.1.2sample
DXUT
4.2 一个盒子的世界
meshCell
4.3增加一个东西
4.3.1 射击球:ammo
struct AMMO_STATE
4元数世界坐标转化
位置
速度
颜色
创建时间
生命周期
透明
}
4.3.2 怪物:droid
struct DROID_STATE
{
4元数世界坐标转化
位置
速度
颜色
创建时间
生命周期
透明
离camaer有多远
动作状态
};
4.4 游戏壮态:
一个游戏应该有个场景管理的结构体,表明当前玩家处于游戏的什么状态,例如,玩家处在设置游戏的显示设置时,那么游戏玩的其他资源就应该不那么快创建;
按照我设想。。就是一个标志位:玩时为1,设置其他东西为2,结束为3.
4.5运动起来
当创建怪物与球体后,就应该初始化它们存在的状态参数,然后根据物理定律把握住它们的状态(速度,位置,重量。。。)进行运算再返回结果给它们。
适当的物理参数设置:
由于是简单游戏,所以基本上设置一下世界引力系数,再加上一些碰撞后的缺失,磨擦系数就可以了
4.5UI
用微软提供的DXUT库里面的就基本上足够了。
4.6 基本程序架构
面向对象与全局变量?
基本上整体的结构是使用面向对象思想的。
像摄象机,封装好一个类(DXUT库提供)网格也是。
然而大局里是用全局变量来设计的
全局的数组储存球体信息与怪物信息;
全局的结构体储存要渲染的资源。
理由
因为要考虑到全局变量可以减少函数参数堆栈出入带来的时间损失!(3D是每秒桢桢循环,调用函数频繁)
当然还有检索怪物跟球体,把握它们的句柄是相当迅速的
4.7全局整体架构解析
总有来说就是依靠在DXUT库上做个简单的程序