基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
QQ:289700062
第 1 页 共 199 页
Email:xwebsite@163.com
基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
基于 Visual C# 的 DirectX 开发实例
三峡大学水利与环境学院 肖泽云
前 言
DirectX 是开发三维场景的利器,也是目前大多三维游戏采用的开发平
台。国内外关于 DirectX 开发的书籍不是非常多,而且大多数书籍都是针对
Visual C++语言来介绍的。在安装 DirectX SDK 时可以选择安装例子和教程,
微软为开发者提供了许多较为实用的例子供大家学习。本文结合计算机三维图
形学和 DirectX 的开发帮助,并参考国内外关于 DirectX 开发的书籍和网站资
料等,主要介绍如何采用 Visual C# 语言对 DirectX 进行三维图形开发。本文
共分十六章,以“由易到难、由简单到复杂”为主线,以介绍 DirectX 开发方
法为主,并穿插介绍相关的计算机三维图形知识等。限于作者水平有限,文中
难免存在错误和缺点,敬请读者朋友不吝指正。
肖泽云
2010 年 3 月
注意:文中对应的例子文件存放在 Project 文件夹中,Media 文件夹中的文件
为各例子可能要用到资源文件(如图片、模型等)。如果读者不想安装 DirectX
SDK,而又需要运行程序,请安装 DirectX Runtime或直接将 Project 文件夹下
的 CommonDLL 文件夹中的文件复制到运行程序的同目录下,如复制 CommonDLL
文件夹中 的所有 文件到 “ \Project\04 绘制一个 三角形 \绘制一 个三角形
\bin\Debug”目录下,即可运行和开发程序。
作者联系地址:湖北省宜昌市三峡大学水利与环境学院
邮编:443002
Email: xwebsite@163.com
QQ : 289700062
QQ:289700062
第 2 页 共 199 页
Email:xwebsite@163.com
基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
目 录
一、配置环境...................................................................................................................................1
二、DirectX 9.0 简介......................................................................................................................2
三、第一个 DirectX 程序................................................................................................................3
1、新建项目.............................................................................................................................3
2、新建项.................................................................................................................................3
3、添加窗体.............................................................................................................................4
4、添加引用.............................................................................................................................4
5、定义全局变量.....................................................................................................................5
6、设置窗体初始状态.............................................................................................................5
7、定义初始化函数.................................................................................................................5
8、定义渲染函数.....................................................................................................................6
9、定义程序入口.....................................................................................................................6
10、设置运行方式...................................................................................................................6
四、绘制一个三角形.......................................................................................................................8
五、摄像机基础...............................................................................................................................9
1、定义视图变换.....................................................................................................................9
2、定义投影变换.....................................................................................................................9
3、设置绘图设备投影及视图矩阵.......................................................................................10
4、绘制三角形.......................................................................................................................10
5、显示线框...........................................................................................................................13
六、输入事件.................................................................................................................................14
1、键盘输入...........................................................................................................................14
2、鼠标输入...........................................................................................................................15
七、二维显示.................................................................................................................................19
1、显示图片...........................................................................................................................19
2、二维图片动画...................................................................................................................22
3、显示二维文字...................................................................................................................23
八、矩阵应用.................................................................................................................................25
1、常用矩阵及算法...............................................................................................................25
2、视图矩阵...........................................................................................................................27
3、透视投影矩阵...................................................................................................................29
4、仿射投影矩阵...................................................................................................................36
5、常用矩阵变换...................................................................................................................38
九、四元数理论及其应用.............................................................................................................42
1、四元数定义.......................................................................................................................42
2、四元数运算.......................................................................................................................42
3、四元数的共轭、矩、迹、模、倒数...............................................................................42
QQ:289700062
Email:xwebsite@163.com
第 3 页
基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
4、四元数的三角形式...........................................................................................................43
5、在三维计算机图形中的应用...........................................................................................44
十、摄像机变换.............................................................................................................................46
1、准备场景...........................................................................................................................46
2、旋转摄像机.......................................................................................................................53
3、通过键盘控制摄像机旋转...............................................................................................54
4、通过键盘控制摄像机缩放...............................................................................................57
5、通过鼠标控制摄像机旋转...............................................................................................59
6、通过鼠标滚轮控制摄像机缩放.......................................................................................60
7、通过鼠标控制摄像机移动...............................................................................................61
十一、地形.....................................................................................................................................64
1、索引编号...........................................................................................................................64
2、规则三角网.......................................................................................................................67
3、通过高度图生成三角网...................................................................................................69
4、地形贴图...........................................................................................................................70
5、设置深度缓冲...................................................................................................................72
十二、三维显示控件设计.............................................................................................................75
1、准备工作...........................................................................................................................75
2、上一视图与下一视图.......................................................................................................85
3、附视图、左视图及前视图的实现...................................................................................86
4、常用浏览功能...................................................................................................................89
5、工具栏控件.......................................................................................................................92
十三、绘制基本图元.....................................................................................................................99
1、绘制离散点.....................................................................................................................100
2、绘制分段直线.................................................................................................................102
3、绘制折线.........................................................................................................................103
4、绘制独立三角形.............................................................................................................104
5、绘制扇形三角形.............................................................................................................106
6、绘制三角形带.................................................................................................................107
7、四种绘制图元方法比较.................................................................................................109
8、绘制六面体.....................................................................................................................120
9、绘制球体.........................................................................................................................123
10、绘制圆...........................................................................................................................128
11、绘制圆锥.......................................................................................................................134
12、绘制圆柱.......................................................................................................................139
十四、Mesh 网格.........................................................................................................................146
1、创建基本几何体网格.....................................................................................................146
2、使用构造函数创建网络.................................................................................................150
3、从文件导入网格.............................................................................................................156
4、导入 X 文件的网格贴图.................................................................................................156
QQ:289700062
Email:xwebsite@163.com
第 4 页
基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
5、将网格导出为 X 文件.....................................................................................................158
6、三维字体.........................................................................................................................159
7、子集、属性、邻接、复制.............................................................................................160
8、渐进网格.........................................................................................................................163
9、世界矩阵.........................................................................................................................165
十五、碰撞检测...........................................................................................................................168
1、包围体.............................................................................................................................168
2、点击射线.........................................................................................................................174
3、拾取对象.........................................................................................................................176
十六、材质、贴图与灯光...........................................................................................................182
1、材质.................................................................................................................................182
2、贴图.................................................................................................................................184
3、灯光.................................................................................................................................190
QQ:289700062
Email:xwebsite@163.com
第 5 页
基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
一、配置环境
首先,需要安装 Visual C#,VS 2003、VS 2005或 Express 版都可以。然后再安装 DirectX
SDK,本文中所配置的环境为 VS 2005 和 DirectX 9.0(April 2006)。
目前 DirectX 的最新版本是 DirectX 11,下载的网址:
http://www.microsoft.com/downloads/en/resultsForCategory.aspx?displaylang=en&categor
yId=2&stype=n_dc
QQ:289700062
Email:xwebsite@163.com
第 1 页
基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
二、DirectX 9.0 简介
Microsoft DirectX 是一套用于创建游戏和多媒体程序的底层应用程序接口(API),
它支持高性能的二维和三维图形显示、声音以及输入等。
DirectX 开发的首推工具是 C++,但是由于程序语言的不断发展以及程序员自身的编程
习惯,有很多程序员仍然习惯使用 C#、VB。尽管到了.Net 时代,这些语言开发的程序本身
没有太大区别,但是各种语言仍有很多爱好者。为了使得各种语言都能开发 DirectX,所有
DirectX 9.0 中实行托管代码。开发者能够用托管代码来充分利用 DirectX 的多媒体功能和
硬件加速功能。DirectX 9.0的托管代码也能充分实现非托管的原始功能。下面就是 DirectX
9.0 所支持的托管代码语言:
Microsoft Visual C#
Microsoft Visual Basic.NET
Microsoft Visual C++
Microsoft JScript .NET
托管的 DirectX 主要有以下部分组成:
Direct3D Graphics
DirectDraw
DirectInput
DirectPlay
DirectSound
Audio Video Playback
QQ:289700062
Email:xwebsite@163.com
第 2 页
基于 Visual C#的 DirectX 开发实例 水利与环境学院 肖泽云
三、第一个 DirectX 程序
1、新建项目
新建一个 Visual C#空项目,设置其项目名称为“第一个 DirectX 程序”,如下图所示:
2、新建项
在解决方案资源管理器中选择项目名称并点击右键,选择“添加——新建项”来添加
一个新的文件,如下图所示:
QQ:289700062
Email:xwebsite@163.com
第 3 页