当前位置:文档之家› 3D游戏编程入门

3D游戏编程入门

5:Windows 命名规则 相信熟悉编程的朋友不会不知道著名的"匈牙利命名法"吧,这个全世界程序员遵 循的编程规范部分如下 全局变量 g_ 常量 c_ 类成员变量 m_ 指针 p 句柄 h 布尔型 b 浮点型 f 无符号 u 初始化函数 Init 临时变量 Tmp 目的对象 Dst 源对象 Src 窗口 Wnd 我们很必要来记住这些命名规则,他对于我们阅读代码用途很大,而规范的编程 习惯是成为程序员的第一步! 例如,我们见到一个 g_bFlag 变量,我们很容易理解,它是全局的布尔型的状态标 志变量.
呵呵,是不是看晕了,实际上,上列定义虽是从网上转载的,但均经过我整理,亲手 打出,也的确花了一些时间,但仔细看的话,不难发现,其实这些是有迹可寻的,前 面是"LP"的就是 LongPiont,长指针类型的.而"H"开头的,大部分是 Handle 句柄 类型的,"U"是 Unsign 无符号型,这样一下子就简化了很多吧~当然这些不是全部, 还有 CALLBACK 回调函数的声明方式,WNDCLASS 窗口类的声明方式.
<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;
UCHAR 无符号 Windows 字符 UINT 无符号整型 ULONG 无符号长整型 32 位 USHORT 无符号短整型 16 位 VOID 任意类型 WINAPI 相当于 FAR PASCAL WNDPROC 指向应用程序中定义的窗口的指针 WORD 无符号字 16 位 WPARAM 32 位消息参数

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 短整型数
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@ 今天我先讲述一下 D3D 游戏的开发环境,我需要你准备好以下工具: 1:作系统我用的是 WindowsXP,但是我更支持你使用 2000,Profession 或 Server 版都可以,优点是稳定、可靠,不会经常死机影响学习的情绪。 2:Microsoft Visual 2003 环境,当然你有 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 普通用户版.你可以在/downloads/中 下载.大约是 200M 推荐 1:推荐安装 Visual Assist X 插件.当然你安装其他的插件也未尝不可,个 人感觉这个插件比较强大方便而已.安装插件的目的仅仅是方便你的编程,即使 没有的话也可以顺利进行编程 推荐 2:若你对和我一样对自己的英语没有信心的话,建议随便找一个英文翻译 软件.因为今后你将只会接触到英文的文档,有些重点部分我会为大家翻译为中 文来介绍,但这远远是不够的,有个适合的英文翻译软件会为你的编程之路带来 很多帮助.
Windows 编程部分概念精解
1:句柄. 几乎所有的 Windows 编程都会涉及句柄,而实际上它就做一个标识的作 用.你甚至可以将它理解成人的名字,当我们让"张三"做某事时,这个句柄就是" 张三",而"李四"是不会做出应答的. 2:窗口 Windows 编程实现的基础就是窗口,大多数 Win 程序都是以窗口形式运行 的,而我们即将开始的 DX 程序也必须以 Win 窗口上实现,它是一切的实现基础.
<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 多重文档界面
相关主题