《DirectX Shaders——3D游戏引擎开发》

  DirectX 商业游戏开发全面详解系列  
《DirectX Shaders——3D游戏引擎开发》是可奇教育最新推出的一套适合广大学生朋友和初中级水平职场人士快速学习的视频教程。该教程继承可奇一贯轻松学习的理念,帮助您更加轻松和快速地掌握业内必备核心技术,在最短的时间内理解核心概念、原理、框架,并通过真实的动手实践,将最核心的知识点牢固掌握。

《DirectX Shaders——3D游戏引擎开发》 使用真实的商业游戏“魔兽争霸”作为教程中的例子。 教学的每个环节都有可以执行代码、资源等文件提供,所有的代码在教程中都配有深入详细的讲解。使用《DirectX 可编程渲染管线——3D游戏引荐开发》,您可以亲自动手修改或重写每个环节的源代码,能够帮助您以最快速度从原理学习转入实践操作阶段,最终制作出真实的3D商业游戏。

代码在线演示与学习指引

《DirectX Shaders——3D游戏引擎开发》

1、MD2文件的结构与信息的描述

  描述文件头信息

  描述帧信息

  描述三角形信息

  描述纹理信息

  描述顶点与顶点缓冲区信息

  定义MD2类

2、读取MD2文件

  计算MD2文件的大小并分配存储空间

  查找各部分内容的起始位置

  读取顶点信息

  读取三角形信息

  建立索引存储空间并保存索引信息

  描述并创建索引缓冲区

  读取并计算纹理坐标信息

  建立顶点与纹理坐标的存储空间

  根据索引来组织并存放顶点与纹理坐标

  描述并创建顶点缓冲区

3、绘制MD2模型

  设置输入布局

  设定顶点缓冲区

  设定索引缓冲区

  根据索引值绘制模型

4、绘制MD2模型动画

  动画的形成

  模型动画的控制

  绘画模型动画帧

5、对象

  对象的作用

  对象与模型的联系

  对象的描述

  对象的应用

  对象信息的初始化

  绘画对象

6、动画集的切换

  动画集切换的原理

  插值的运算分析

  插值运算的存储

  动画集切换的控制

  绘画切换后的模型动画

7、计算并绘画模型的AABB盒

  AABB盒的作用

  计算AABB盒的大小

  实现AABB盒的着色器代码

  绘画AABB盒

8、读取模型与纹理图

  读取对应格式的模型

  读取对应格式的纹理

9、添加地形

  初始化地形信息

  读取地形纹理

  绘画地形

10、拾取

  拾取的作用

  拾取的转换过程

  拾取的转换计算

  拾取射线的计算

11、调整窗口与获取鼠标位置

  设置窗口的大小

  判断鼠标信息

  获取窗口中鼠标的位置

12、拾取射线的相交判断

  拾取射线与三角形相交的作用

  获取要判断的三角形

  拾取射线与三角形的相交判断

13、拾取射线的相交判断

  拾取射线与三角形相交的作用

  获取要判断的三角形

  拾取射线与三角形的相交判断

14、角色的方向控制

  计算鼠标在世界空间中的位置作用

  角色的描述

  确定角色与鼠标的位置

  判断角色转动的方向

  设置角色转动的角度

15、使用多个地形网格

  初始化多个地形网格的信息

  设置地形网格的位置

  绘画多个地形网格

16、调整地形的中心位置

  以3D坐标的原点进行地形网格计算

  根据各地形网格的位置进行绘画

17、控制角色切换到移动状态

  判断鼠标点击

  绘画角色移动的动画集

18、寻路

  寻路的原理

  描述路径节点

  寻路入口函数的分析

  子网格编号与行列号的转换计算

19、寻路的实现1

  初始化待处理列表

  计算当前位置到目标的距离

  对路径节点排序并存入待处理列表

  取出待处理列表中的节点

20、寻路的实现2

  判断是否到达移动目标

  找到节点对应的地形网格与障碍标志

  判断是否遇到障碍

  历史最佳记录的判断

  保存找到的最佳移动路径

21、寻路的实现3

  初始化历史最佳数组

  尝试当前节点周围的节点

  获取成功寻路后的路径节点

  计算成功寻路后的节点数量

22、角色与寻路

  改变角色移动中的方向

  角色是否到达移动的目标位置

  根据角色位置与鼠标拾取位置调用寻路

23、角色按寻得的路径移动

  取出路径节点并计算对应的信息

  判断角色的移动方向

  路径节点是否为障碍

  角色是否移动到节点指定的位置

  角色按照设定的速度进行移动

  角色移动是否结束

24、角色移动

  分配障碍标志存储空间

  设置地形子网格的大小

  设置角色的初始位置

  鼠标拾取与地形网格的判断

  角色寻路是否成功

  角色是否可以移动

25、摄像机跟随角色移动

  摄像机位置跟随角色位置变化

  摄像机观察位置跟随角色位置变化

  重新设置观察与投影矩阵

26、敌人

  敌人的描述与初始化

  设置敌人与对象的联系

27、敌人的方向

  敌人的攻击方向判断

  敌人移动中的方向判断

  敌人的寻路

28、敌人按寻得的路径移动

  取出路径节点并计算对应的信息

  判断敌人的移动方向

  路径节点是否为障碍

  敌人是否移动到节点指定的位置

  敌人按照设定的速度进行移动

  敌人移动是否结束

29、敌人移动与攻击

  判断敌人是否允许寻路

  敌人寻路是否成功

  判断敌人移动或攻击

  切换移动或攻击状态

  敌人移动

30、绘画敌人

31、防止敌人完全重叠

  通过敌人设置障碍标志

  通过地形保存敌人的信息

  保存敌人移动前的位置信息

  删除敌人设置的障碍信息

  删除与敌人匹配的信息

32、敌人设置与删除障碍

  根据敌人信息计算所在的地形网格

  根据敌人信息计算对应的障碍

  设置或删除所在地形网格的障碍标记

  设置或删除所在地形网格的敌人信息

33、角色设置与删除障碍

  根据角色信息计算所在的地形网格

  根据角色信息计算对应的障碍

  设置或删除所在地形网格的障碍标记

  设置或删除所在地形网格的角色信息

34、角色攻击敌人

  获取角色与敌人的信息

  判断是否击中敌人模型

  减少敌人生命值

  当敌人生命值为零时标志为死亡状态

  角色攻击动画的判断

  角色的攻击方向

35、敌人死亡动画与尸体处理

  判断死亡动画是否播放完毕

  显示敌人尸体

  控制敌人尸体下沉

36、清除敌人死亡后的障碍标志与对象信息

  清除敌人设置的障碍标志

  清除敌人设置的对象信息

  敌人对象的删除

37、绘画2D模型

  2D模型信息的描述

  设置2D模型的纹理坐标

  创建2D模型的顶点与索引缓冲区

  创建2D模型的世界矩阵

  创建平行投影矩阵

  绘画2D鼠标模型

38、显示敌人生命值

  转换敌人在世界空间中的位置到屏幕

  绘画敌人的2D生命值边框模型

  根据敌人当前的生命值进行绘画的设置

  绘画敌人的2D生命值模型

  判断鼠标是否选中了敌人并显示对应的生命值

39、绘画状态栏

  设置状态栏纹理坐标

  绘画状态栏背景

  绘画状态栏各组成部分

40、地形跟踪

  计算地形子网格的行列号

  计算对象在地形网格中的位置

  判断对象在地形网格中哪个三角形上

  计算地形子网格在顶点缓冲区中的下标

  对地形网格进行影射

  计算对象所在位置的地形高度

41、读取对象与地形纹理信息

  读取对象的信息

  读取地形顶点与纹理信息

  读取并设置摄像机的起始位置

42、光效

  光效的设置

  绘画光效

43、平截头体的计算与剔除判断

  什么是剔除以及剔除的重要性

  什么是平截头体

  平截头体的计算原理

  计算平截头体中的六个平面

  判断模型是否在平截头体的范围内

44、绘画缩略图与显示角色位置

  设置缩略图单元的大小

  绘画缩略图单元

  设置角色所在位置的标志

  清除角色旧的位置标志

  绘画角色在缩略图中的位置

45、通过缩略图定位摄像机

  计算地形与缩略图的大小

  根据鼠标在缩略图中的点击进行定位计算

  设置摄像机的位置与观察点