3D游戏编程入门

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Βιβλιοθήκη Baidu
SDI: Simple Document Interface 单文档界面 4:Windows 编程常见类型 这些东西多是 Windows 内核已经宏定义好了的符号
BOOL 布尔型变量 BOOLEAN 布尔型变量 BYTE 8 位字节型 CCHAR/CHAR Windows 字符型 COLORREF 32 位 RGB 格式的颜色值 CONST const 常量 DWORD 32 位双字节 DWORDLONG 64 位双双字节 DLGPROC 指向一个应用程序定义的对话框过程回调指针 FLOAT 浮点型 FARPROC 指向应用程序定义的指针 HACCEL 加速键表句柄 HANDLE 对象句柄 HBITMAP 位图对象句柄 HBRUSH 笔刷句柄 HDC 设备上下文句柄 HGDIOBJ 图形设备接口对象句柄 HFILE 文件句柄 HFONT 字体句柄 HHOOK 钩子句柄 HGLOBAL 全局内存块句柄 HICON 图标句柄 HINSTANCE 实例句柄 HLOCAL 本地内存句柄 HMENU 菜单句柄 HOOKPROC 指向应用程序定义的钩子句柄 HPALETTE 调色版句柄 HPEN 画笔句柄 HWND 窗口句柄 LOCALHAND 本地内存句柄 LONG 32 位无符号值 LONGLONG 64 位无符号值 LPARAM 32 位消息参数 LPCSTR 指向 Windows 常字符串的指针 LPSTR 指向 Windows 字符串的指针 LPVOID 指向任意类型的指针 LRESULT 常用函数返回值 MSG Windows 消息 PROC 指向回调函数的指针 SHORT 短整型数
<2> Windows 编程基础概念
终于可以继续 D3D 的相关复习了.呼,这将长期而辛苦~希望我们能够一同努力下 去.切入正题
Windows 简介
首先,我们必须了解 Windows 是什么一个东西,这么一问,想必大家都很容易回答: 一个操作系统.恩,没错,那么它有什么特性呢?跟游戏制作相关有什么关系呢?我 在这里为什么又会选择 Windows 平台来制作网络游戏呢?这要从它的基本特性来 述说. 1:Windows 特性 Windows 是基于图形界面的操作系统,它的特性就是其标准化的图形用户界面 (GUI)。同时它又是一个多任务操作系统,允许用户在同一时刻运行多个应用程 序或同一个应用程序的多个实例。它采用了与硬件无关的方式来处理视频显示、 键盘、鼠标、打印机、串行口以及系统时钟。这些特性决定了 Windows 的成功, 它现在做为世界上最主流的操作系统,也是网络游戏最主要的开发平台.我们需 要使用它. 我们对 Windows 编程,那么我们需要了解它的 API. 2:WinAPI 的重要性 或许有朋友会说,我们可以使用微软的 MFC 库和 FCL 库进行编程啊,那么我想告诉 大家的是,Windows API 的 SDK 方式编程更有利于我们去了解 Windows 的本 质,MFC,FCL 库均是对 Windows API 的一种高级封装而已,而且当我们使用 DirectX 时,我们将明白,DX 的绝大多数版本和相关资料,均是使用 WinAPI 的方式 来进行开发的. API 是 Windows_SDK 开发的基础,Win 平台上的一切软件都可以使用 WinAPI 来实 现,而对于我们的 3D 网络游戏制作来说,WinAPI 的学习对于我们针对 DirectX 程 序设计和 WinSock 程序设计的理解和掌握是相当重要的。 3:部分编程简称 API: Application Programing Interface 应用程序接口 SDK: Software Development Kit 软件开发包 MFC: Microsoft Founddation Class 微软基础类库 MSDN: Microsoft Development Network 微软开发者网络 GDI: Graphics Device Interface 图象设备接口 MDI: Multiple Documents Interfaces 多重文档界面
3D 游戏编程入门
<1> 前期准备
在决定写 3D 游戏编程之前,我犹豫了很长一段时间. 首先是时间问题,我并没有大学那样多空闲时间,我必须在 JAVA 和 3D 编程做一个 选择,终于想到一个折中的办法,策划文档介绍将继续每日一帖的进度进行,而 J2ME 和 D3D 方面,我将不定期的隔几天轮换制作一份,只要时间足够了.我一定会 保证进度的. 其次我在想进度问题,我实在无法从 C++的基础讲起,因为仅仅一个 C++,和 Windows API 编程,就足够我花费小半年的时间去介绍了,想了又想,只能直接从 D3D 部分说起了,当然我会简单告诉大家一下使用 WindowsAPI 创建窗口的方法和 原理,方便大家调试.我这里将会假设大家在已熟悉 C++语法的前提下进行介绍. 最后是发帖问题,我很怀疑在 66RPG 不允许存在这样的帖子,因为 D3D 实在和 RM 丝毫挂不上钩,然而今天在论坛新@地球村版块中确切的看到斑竹大人有发过 3D 引擎,看来是合法而且有朋友感兴趣的,于是冒着胆子开是写帖子,不过考虑到来 论坛的大部分朋友的口味,我将不再开新帖,关于 D3D 的游戏编程入门我将持续 的跟帖讲述. 值得说明的是,我写这些东西的原因主要是方便自己的复习和理解,其次就是帮 助 3D 编程新手来入门制作 3D 游戏,我不会象一些教程,面面俱到的详细解释每一 个部分,我只会根据制作游戏的需要来讲解,与游戏制作无关或极少用到的部分, 我将仅仅进行极其简单的描述.毕竟大家要明白,这些程序和语言并非专门为游 戏制作而开发的,它们附带的 API 接口也有许多在制作游戏中使用不到或者极少 使用的. 3D游戏编程难度,远远大于 2D游戏编程,这将会是一个漫长的过程,我会努力以 最简朴易懂的口语来叙述,但由于个人技术有限,难免会有疏忽遗漏之处,若大家 有什么建议或意见,可以论坛PM我,或者发信至duzhi5368@163.com 今天我先讲述一下 D3D 游戏的开发环境,我需要你准备好以下工具: 1:作系统我用的是 WindowsXP,但是我更支持你使用 2000,Profession 或 Server 版都可以,优点是稳定、可靠,不会经常死机影响学习的情绪。 2:Microsoft Visual Studio.NET2003 环境,当然你有 VC6.0 版本也是可以的,其 他版本的话我无法保证能顺利运行我所讲述的代码. 3:Microsoft DirectX 9.0 SDK for developer.是的,这里我们不需要 8.0,也不 需要 10.0,因为 8.0 和 9.0 更变了许多接口,而 10.0 需要的显卡支持我们现在都 不可能达的到,当然,我也没有接触过,只听说更新的变化非常之大,就如 7.0 和 8.0 一样质的飞跃.另外值得一提的是,我们需要的是DX9.0 SDK for developer, 而不是DX9.0 普通用户版.你可以在http://www.microsoft.com/downloads/中 下载.大约是 200M 推荐 1:推荐安装 Visual Assist X 插件.当然你安装其他的插件也未尝不可,个 人感觉这个插件比较强大方便而已.安装插件的目的仅仅是方便你的编程,即使 没有的话也可以顺利进行编程 推荐 2:若你对和我一样对自己的英语没有信心的话,建议随便找一个英文翻译 软件.因为今后你将只会接触到英文的文档,有些重点部分我会为大家翻译为中 文来介绍,但这远远是不够的,有个适合的英文翻译软件会为你的编程之路带来 很多帮助.
必不可少. 3:资源 在 Win 编程中,窗口的图标,鼠标光标,菜单等都是资源的类型,在 VC 环境 下,Tab 页也专门为资源进行了有效的管理,它将资源进行编译存放在.rc 格式文 件中,我们可以用代码来控制何时何地调用哪个资源. 4:模块 在 Win 编程中,模块其实就是 DLL 编程.Dynamic Link Library 动态链接 库其实就是一种动态的函数库封装.对于我们频繁使用的函数库,我们可以将它 封装到 DLL 文件中,动态的调用比原先静态的 Lib 库优点显而易见,极大的减少了 应用文件大小.因为我们可以重复调用. 5:实例 Instance 也是 WIN 编程中重要的句柄.我们每使用一个应用程序,我们都 会获得一个对应的实例.然而实例和窗口句柄是不同的.我们这里可以举例,当我 们一个程序开启多个窗口时,我们将仅仅一个实例,而有许多的窗口句柄,但值得 注意的是,实例并不是锁定某个程序的,当我们的程序关闭,实例将释放消失,当 我们再次启动该程序时,将获得一个新的实例,而与原先的实例完全不同,当然这 个实例对应的窗口句柄也将更新. 6:内存块 我们必须清楚,在早期计算机中,内存和硬盘是严格区分的,内存拥有 着独特的寻址方式,然而这并不利于我们的内存操作.所以现在通常使用"页"式 内存管理。这将更加符合我们硬盘的寻址方式.所以当现在我们的计算机内存不 足时候,计算机将会将一部分的硬盘虚拟的做为内存供给我们应用程序来使用, 也就是"虚拟内存".然而硬盘数据读取速率和内存的读取速率是无法比拟的,所 以当我们内存不足而使用虚拟内存时,程序的运行速度将会大大降低..我们进行 编程设计时应当合理使用内存,避免使用虚拟内存。
<3> Windows 消息机制
相当伤心,本来写了很多的,结果这天杀的新浪...只好重新写了,呼 刚才我们说了 Windows 编程的基础知识和名词解释,我们现在继续讲述 WIN 编程 的消息机制. WIN 消息机制 1:Windows 系统我们可以看做是一个消息驱动的操作系统.而实质上它的确就是 这样运做的.系统程序记录我们的一切操作信息,并将其翻译发布后堆放在消息 队列中,每个应用程序从消息队列中获得自己关心的消息,并对其进行相应的处 理. 2:消息 MSG 是由 ID 和两个消息参数(WPARAM,LPARAM)构成的,当消息被应用程序 的窗口获得,该窗口将调用 WndProc 消息处理函数来对相应消息进行具体处理. 我们这里可以看看 MSG 这个结构体包含的信息 typedef struct tagMSG{ //消息结构体 HWND hwnd; //窗口的句柄,用来锁定此消息是针对哪个窗口 UINT message; //消息的类型,仅仅可以使用低位数,高位数是由系统来使用的 WPARAM wParam; //消息的额外信息,它由消息的类型来决定 LPARAM lParam; //消息的额外信息,它也由消息的类型来决定 DWORD time; //投递消息的时间 PIONT pt; //投递消息时,鼠标的位置 }MSG;
Windows 编程部分概念精解
1:句柄. 几乎所有的 Windows 编程都会涉及句柄,而实际上它就做一个标识的作 用.你甚至可以将它理解成人的名字,当我们让"张三"做某事时,这个句柄就是" 张三",而"李四"是不会做出应答的. 2:窗口 Windows 编程实现的基础就是窗口,大多数 Win 程序都是以窗口形式运行 的,而我们即将开始的 DX 程序也必须以 Win 窗口上实现,它是一切的实现基础.
5:Windows 命名规则 相信熟悉编程的朋友不会不知道著名的"匈牙利命名法"吧,这个全世界程序员遵 循的编程规范部分如下 全局变量 g_ 常量 c_ 类成员变量 m_ 指针 p 句柄 h 布尔型 b 浮点型 f 无符号 u 初始化函数 Init 临时变量 Tmp 目的对象 Dst 源对象 Src 窗口 Wnd 我们很必要来记住这些命名规则,他对于我们阅读代码用途很大,而规范的编程 习惯是成为程序员的第一步! 例如,我们见到一个 g_bFlag 变量,我们很容易理解,它是全局的布尔型的状态标 志变量.
其次我需要你准备好一些硬性的知识: 1:随便一种面向对象设计的语言的熟练运用. 2:对 3D 美工基本概念流程的简单理解. 3:对空间矩阵变换有一定的理解. 4:英语入门,起码没有烂到家. 最后,期望你本身拥有的一些素质: 1:对游戏编程的爱好 2:对学习编程的耐心和毅力 3:勤于动手,能够主动的学习
呵呵,是不是看晕了,实际上,上列定义虽是从网上转载的,但均经过我整理,亲手 打出,也的确花了一些时间,但仔细看的话,不难发现,其实这些是有迹可寻的,前 面是"LP"的就是 LongPiont,长指针类型的.而"H"开头的,大部分是 Handle 句柄 类型的,"U"是 Unsign 无符号型,这样一下子就简化了很多吧~当然这些不是全部, 还有 CALLBACK 回调函数的声明方式,WNDCLASS 窗口类的声明方式.
UCHAR 无符号 Windows 字符 UINT 无符号整型 ULONG 无符号长整型 32 位 USHORT 无符号短整型 16 位 VOID 任意类型 WINAPI 相当于 FAR PASCAL WNDPROC 指向应用程序中定义的窗口的指针 WORD 无符号字 16 位 WPARAM 32 位消息参数
相关文档
最新文档