课程概述

  《3D游戏开发》是“学程序编游戏” 系列课程之二。是使用OpenGL三维图形技术编制3D游戏的实战教学方案。

内容介绍

  本课程以一个完整(基本)的3D游戏为主线,采用循序渐进的方法,从建立OpenGL图形环境入手,讲解3D基本图形、构图原理;从引入摄像机,建立天空、山地、树木,到3D模型使用和3D动画模型的显示。用鱼骨方式讲解相关知识技术,完整地展示了3D游戏的编写过程。


章节 名称 内容提要
第1 章 OpenGL的程序框架 Windows、OpenGL程序框架的建立。
第2 章 OpenGL的基本图形 在OpenGL图形界面上作一些简单的图形。
第3 章 OpenGL的组合图形 用简单图形来构成两个复杂一点的3D模型。
第4 章 摄像漫游 有了摄像机你就可以在OpenGL场景中自由地漫游了。
第5 章 开天辟地 在OpenGL场景中有了天空、大地、景物。
第6 章 OpenGL中显示文字 介绍了OpenGL中文字的几种显示方式。
第7 章 特殊的平面_树 栽些树种些草,让这个OpenGL世界充满生机。
第8 章 显示3D模型 在OpenGL场景中显示3DS格式的模型。
第9 章 使用MD2动画模型 OpenGL场景中出现了活生生的人(3D动画模型)。
第10 章 使用MDL动画模型 介绍一种更先进的动画模型—3D骨骼动画。
第11章 射击、爆炸 逼真的爆炸效果,是用程序仿真爆炸的物理过程。
第12章 碰撞检测 加入碰撞检测后,游戏才有真实的感觉。
第13章 游戏进度保存 场景(或进度)保存和调入是游戏必不可少的。
第14章 3D场景编辑 3D场景编辑,给你提供了安排山河的可能。
第15章 MFC 3D游戏编辑器 一个基本的3D游戏编辑器,等你来把电脑做的更好。


教学目的

  现在互联网上有不少编制3D游戏的技术文章和相关代码,但在网上我们很难看到有完整的、系统的游戏编制过程的讲解,特别是有详细中文注释的游戏全过程的源代码极其稀有。《3D游戏开发》教学方案的旨意主要表现在以下几个方面。

● 重在游戏(或工程项目)的基本实现方法

  一个学员在学习了《2D游戏开发》课程后,谈到“学了程序设计几年,自己没编出一个有用的程序。看了你的书后仿佛知道了一点什么。”另一个朋友说“《2D游戏开发》在技术上也许没有什么高深的,但你要是学了很长时间编游戏都还是一头雾水(很多人都是这样的,呵呵),这门课程将会给你以很大的启示”
“学程序编游戏”技能培训系列课程想表述的是一个游戏(或工程项目)的构建方法。现实中确有不少在学校或通过其它方式学过程序设计课程的人,但对某一种特定的软件设计领域可能是陌生的,陌生之处是这个领域的技术架构。现在IT领域有一个使用频度很高的名词叫做“解决方案”,众多解决方案的实质就是某个新的技术在某个具体领域的实现方法。

● 搭建一个基本功能的游戏环境

  “学程序编游戏” 系列课程重点不是研究、介绍新的技术;恰恰相反,有时为了快速地搭建游戏的某个功能环境,在不影响功能情况下尽量使用了一些简单、好理解的算法。例如:《3D游戏开发》的示范游戏中整个游戏场景只使用了一个主光源,其它几乎就没讲到光的使用。不是在游戏中光的使用不重要,多少我们有一个主光源照着的,要装饰游戏的场景,需要的东西太多了。但相信你搭建好一个基本功能的游戏环境后,你再去寻找需要的OpenGL的功能函数和它们的使用方法时,会有一种眼前一亮的感觉。

● 介绍外部功能模块的使用

  的确现在游戏相关的软件技术发展是很快的,不少的技术还是建立在近年来计算机算法理论上的新突破,理解这些最新的技术确实需要相当的理论、技术功底。就像本课程中出现的MDL骨骼动画的算法,就是搞过多年程序的人都不一定能读懂。怎么办?什么都不要做了。

  其实我们在Windows系统下编程序,大量的工作就是按自己的要求调用Windows的各种API函数。我们更多关心的是这些函数的用法,除非特殊需要一般人是不会去研究它的实现方法。
对一些新的软件技术我们也是用同样的方法,对我们获得的新技术软件包、连接库、动态库或源代码,就把它们当作新的API函数据,主要的精力首先应该放在掌握它们的应用方法上。不一定什么东西都要自己去重新做,只要善于将手中的各种技术架构出一种具体的实现方案也是你劳动价值的体现。本课程中引用了几个重要的外部功能模块,希望它们能成为你新的游戏的组成部分。当然这里要提醒一下,按惯例,网上获取的有些代码是供学习研究使用,如果你开发商品游戏发布上市时,事前一定注意资料来源的版权声明。

《3D游戏开发》全部课程学完后,你收获的将是以下类似三角洲部队的3D射击类游戏。



相关知识

学3D编程是选Direct3D还是OpenGL好

  谈到3D编程序一直有个问题困扰着初学者,学3D编程是选Direct3D还是OpenGL好。甚至有人认为OpenGL是一种过时的技术。

  我们首先了解什么是3D API? API是英语“应用程序接口(Application Programming Interface)”的缩写,3D API就是3维图形应用程序接口了。

● Direct3D(D3D)

   Direct3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是微软(Microsoft)树立的3D API规范,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。自1996年发布以来,Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可,现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。但它也有缺陷,由于是以COM接口形式提供的,所以较为复杂,稳定性差,另外,目前只在Windows平台上可用。
● OpenGL

   OpenGL也是一个3D API,它是开放的图形程序接口,英文全称是“Open Graphics Library”, OpenGL是跨平台的国际计算机工业标准应用程序接口,主要应用于专业设计领域。 OpenGL是与硬件无关的软件接口,只要操作系统使用了OpenGL适配器就可以达到相同的效果,它是一个开放图形库,目前在Windows、MacOS、OS/2、Unix/X-Windows等系统下均可使用,具有良好的可移植性,同时调用方法简洁明了,深受好评,应用广泛。OpenGL能在网络环境下以客户机/服务器模式工作,充分发挥集群运算的威力,是专业图形处理、科学计算等高端应用领域的标准图形库。

  目前3D图形领域,专业用户(CAD/CAM等) 3D绘图大部分利用OpenGL,而微软致力于推广家庭与个人市场的多媒体娱乐平台,DirectX几乎就是Game、CAI等应用软件的绘图标准接口。但是因为OpenGL较早完成,且技术层次洗练深受开发者和用户喜爱,甚至包含许多游戏开发者。但DirectX不只有绘图处理,还包含Video、Sound等多媒体影音处理,因此其涵盖面超过OpenGL,可以说是各有所长。

  现在多数商业游戏都选择了D3D和OpenGL双API方式。设计两个API的作用在于,你的显卡运行某个API出现贴图错误或者运行速度跟不上时,可以试着切换另一个API来运行。这已经是许多游戏玩家都知道的。

● 选择Direct3D还是OpenGL?

  现在的计算机的显示卡普遍具有的3D性能都很强大了,对OpenGL和Direct3D都能很好的支持。所以建议:可能的情况下,“Direct3D和OpenGL一个都不要少”。作为3维图形的初学者OpenGL的API调用方法简洁明了,似乎更好理解一些。 Direct3D的API由于是以COM接口形式提供的,对初学者来说使用较为复杂。重要的是我们不是在学OpenGL或Direct3D,是学习3维图形的处理方法,OpenGL或Direct3D只是一种3维图形的描述方法。