第2章 3D游戏的技术知识
第2章 3D游戏的技术知识
2.1 3D图形库
API(Application Programming Interface)函数是编程人员经常调用的一种3D图形库,显卡与应用程序直接的接口定义为Unity3D图形库。从而与之沟通,硬件的驱动程序启动显卡内强大的3D图形处理功能,制作出具有3D的游戏。
非常快速是3D图形库执行具有特点,具有可移植性并且高度的,计算机图形学原理在设计中被严格遵循,符合普通人对3D的和光线等的认知,点、线、面的三维特征需要编程人员用这些API函数定义,用合适的光照,合理的坐标系统和文理贴图再加上一个固定的参照系,就可以形成较为真实的3D场景。其中的API函数定义为独立于任何程序设计语言的一组规范,在特定语言中的实现描述由国际标准化组织来制定。许多三维演示系统都用3D图形库作为三维图形生成和控制的编程接口。
2.2 物理引擎
2.2.1 物理引擎简介
在游戏这项综合应用中中,除了华丽的画面渲染外,作为表现虚拟世界系统内在物理规律的计算是必不可少的。当被模拟的刚体的运动比较简单,可以在一定程度上通过编程或编写脚本来实现,如简单的加速和减速牛顿物理运动。但当模拟比较复杂的物体的碰撞、滚动、滑动或者弹跳的时候,通过编写底层算法会造成工程延误,这显然不符合软件工程的思想。成熟的物理引擎能够允许更复杂的物理模拟,像球形关节、轮子、气缸或者铰链,有些也支持非刚性体的物理属性,比如流体和布料。
物理引擎接受的输入是由外界调用模块传递过来的场景信息以及场景中物体的位置信息。根据调用模块的不同,可能输出三种计算结果:场景与物体以及物体之间是否发生碰撞、碰撞发生的具体位置以及发生碰撞后物体的具体位置,并将计算结果传送给调用模块。如图2-1所示。
图2-1 物理引擎功能示意图
3
第2章 3D游戏的技术知识
2.2.2 物理引擎基本架构
物理引擎一般分为两个重要部分,即碰撞检测和物理学世界。如图 2-2 所示。
图2-2 物理引擎基本架构
碰撞检测模块是物理引擎的核心模块,建立在物理学世界的基础上的。其由初步碰撞检测、精确碰撞检测和精确求交三个基本模块组成,各模块的执行顺序。如图2-3所示。
图2-3 碰撞检测模块流程图
在初始化阶段,碰撞检测模块给虚拟世界每个物体建立包围盒,比较常用的包围盒算法有AABB(Axis-aligned bounding box)、包围球、胶囊体等。逐步求精阶段将整个虚拟世界进行空间划分,主要用到数据结构有八叉树、k-d树和BSP树等。最后再精确求交
4
第2章 3D游戏的技术知识 模块中使用凸体算法和射线检测算法得到精确的碰撞信息。
2.3 Unity3D
2.3.1 Unity3D简介
Unity3D是由Unity Technologies开发的一款全面整合的专业游戏引擎,其具有的功能使得开发人员可专注于游戏的设计而忽略底层的技术实现,达到快速开发的目的。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下。其主要的特色有:
图形动力:内部封装了DirectX和OpenGL图形渲染库,并附带一些常用的渲染组件及着色器脚本。
物理仿真:Unity3d不但整合了Nvidia PhysX物理引擎,并在其基础上封装了游戏中常会用到的物理组件,如碰撞体、连接体等。
跨平台性:可发布游戏至Windows、Mac、iOS、Android、Xbox、Wii或PS3平台,也可以利用Unity web player或者Flash插件发布网页游戏,支持Mac和Windows的网页浏览。
资源商城:开发人员可在资源商城中购买其他人开发的资源(代码、模型等),进行高效复用。
资源服务器:Unity资源服务器是一个附加的版本控制的产品,但比起SVN更适合游戏团队中不同职位的人员共同使用(程序、策划、美术)。
性能分析器:引擎中自带一个Profiler分析器,开发人员可在编辑器或者设备连线进行性能分析CPU和GPU不同阶段的效率。
2.3.2 Unity3D基本概念
一个完整的Unity3d程序是由若干个场景(Scene)组合起来的,每个场景中又包含有许多游戏对象(GameObject),每个对象可以具有若干组件(Component),其中的继承自MonoBehavior的脚本组件进行初始化、更新等操作,而我们在场景所看到的内容是由摄像头(Camera)来呈现并控制的。
场景(Scene):场景是Unity3D程序的基本组成单位,任何一个Unity3D程序都是由若干场景组合而成,程序通过脚本在这些场景之间跳转。场景通过场景图的形式组织,场景图实际上是一种树形结构,其中每个节点就是一个游戏对象。对象与对象之间存在父子关系,即当父级对象移动、旋转、缩放时,子级对象也跟着一起变换,如图2-4所示。
5
第2章 3D游戏的技术知识
图2-4 旋转一个父节点同时它的子节点也跟着旋转
游戏对象(GameObject):在场景中按照场景图形式组织,场景图实际上是一种树形结构,树形层次结构中的节点,加入的特定组件后就成了有实际功能的对象,如可渲染网格、摄像机、光源等,游戏对象可以打包成.prefab格式的文件方便复用。
组件(Component):组件可以是网格(Mesh)、光源(Light)、摄像机(Camera)、粒子系统(Particle)、物理碰撞体(Collider)、布料(Cloth)、连接体(Joint)、声音(Audio)、动画(Animation)以及最重要的脚本(Script)。Unity3D的设计是以面向对象理论为基础,Unity3D支持C#、JavaScript和Boo三种脚本语言,如果对象继承自MonoBehavior脚本对象,生命周期将交给Unity3D来管理,如图2-5所示。
图2-5 MonoBehavior的生命周期
6
相关推荐: