【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统

摘要:
因此,首先讨论Windows API,然后是DirectX,最后是游戏引擎的设计,这是非常自然的。DirectX是由Microsoft创建的多媒体编程接口。最新版本是DirectX11,它是在最新的Windows7 7上创建的。DirectX包括安全和性能更新,以及涵盖所有技术的许多新功能。应用程序可以使用DirectXAPI访问这些新功能。

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。

http://blog.csdn.net/zhmxy555/article/details/7318264

作者:毛星云邮箱:happylifemxy@qq.com

在从第一节开始看这个笔记系列的话,大家会发现,一上来就开始讲DirectX相关的内容但是写了几节之后,又开始讲

GDI了。

这是因为我写完前几节后,发觉直接讲DirectX有些生硬。最后我想了一下,应该先梳理完GDI相关的重点知识,再来讲

DirectX,毕竟游戏编程里面windows API是基础。所以先讲windows API,接着介绍DirectX,最后讲解游戏引擎的设

,这样会自然得多。

————浅墨于2012年3月26日注

很多朋友在评论中都谈到了GDI的效率问题。关于GDI,我想在这一系列文章的篇首简单的说明一下。

用GDI做游戏的效率很低,非常的不推荐。但是GDI作为windows与生俱来的渲染引擎,在图形方面是一个全能的存在。

学习游戏编程如果想打好一个坚实的基础,掌握GDI是非常有必要的,全能的GDI可以在DirectX尚未做好准备的时候,以一个

强大后援的姿态,在游戏的测试与仿真过程中给予我们莫大的帮助。

————浅墨于2012年4月26日注

很多朋友也谈到游戏开发中是否运用MFC的困惑,我也在这里简单的说明一下。由于MFC有底层代码的隐蔽性等特点,且MF

C毕竟封装了很多实际上没用到的东西,不利于游戏开发的效率和游戏的运行速度,不适合做游戏开发。MFC做游戏地图编辑

器之类的工具软件倒是比较适合。我觉得一款成功的游戏最基本的特点就是具有流畅的用户体验,这个要求达不到的话,其他

方面就不用考虑了。

————浅墨于2012年4月27日注

在浅墨没更新文章的这三个月里,数百位需要游戏编程相关资料的朋友在博客里留了邮箱,没有及时给大家发到邮箱里浅墨表示非常抱歉。在这里,浅墨最终还是决定把这些资料打包上传到CSDN下载频道,这样大家就可以直接下载,省去了浅墨发邮件的功夫,虽然浅墨一直认为这样更亲切更真诚。当然,0资源分下载是必须的。

以后大家想要这些资料,就不用再留邮箱了,直接点链接去下载就好了。

下面是这些资料的一个清单(零编程基础开始):

1.《C++ primer中文版》

2.《Windows程序设计第五版》

3.《VC++深入详解》

4.《Windows核心编程》

5.《Effective STL中文版》

6.《Windows游戏编程大师技巧》

7.《DIRECTX.9.0.3D游戏开发编程基础》

这个书单是从零编程基础开始的,其中部分书中涉及到了DirectDraw与Direct3D 8,这两个API在新版本DirectX SDK中都被移除了,现在基本上无用武之地,所以涉及到DirectDraw与Direct3D 8的那部分就不用仔细看了哈。

本来还有《VC++深入详解》的高清影印版,以及《游戏编程精粹》系列的7本书,以及几本C++系列的经典之作,但是它们块头比较大,浅墨目前这个号在CSDN下载频道只有110Mb的上传限权,传起来比较麻烦。暂时就不传了。

下面给出游戏开发学习资料的下载链接

请点击这里下载:零基础游戏编程学习资料by浅墨

(免责声明:浅墨在这里只是进行了电子版的收集工作,如果大家觉得这些书还不错,建议去买纸质版,毕竟这样对眼睛的健康有好处,健康是金钱买不来的)

————浅墨于2012年11月07日

关于学完DirectX,我们该干什么。

浅墨觉得,历代DirectX龙书的作者Frank Luna在龙书忽视了非常重要的一方面内容的讲解,那就是就是学完了DirectX我们接着该做什么。

这大概是很多怀揣游戏开发梦想的热血青年们曾经思考过的问题。

浅墨也曾经在这问题上迷茫过,也因为没人指明前路而走了不少弯路。

不过后来在黑暗中不断地摸索,将荆棘变成坦途之后,终于摸索出了一条正确的道路。

也就是看完龙书《DIRECTX.9.0.3D游戏开发编程基础》之后,我们需要如何学习,来把学到的知识立体化,最终转化为开发游戏的实际能力。首先我们需要再看一本书,《Real-Time Rendering》,也就是(RTR)实时渲染技术,目前出到第三版了。(这本书并没有中文版,大家如果要走游戏开发的道路,读完龙书之后,剩下基本上都要靠读英文书了。)

学完龙书,也可以选择自己喜欢的游戏引擎来接触并掌握了。看完龙书后浅墨首推学习Irrlight,然后进阶推荐Orge。两者都是开源游戏引擎,都有着源代码提供下载学习,而且网上对这两种引擎的研究热情很高,资料丰富,引擎代码字里行间都是哲思,掌握其中的代码并纳为己用,自己写出像样的游戏demo来是不成任何问题的。

————浅墨于2012年12月02日

作为visual C++,DirectX入门的第一讲,概念性东西比较多,这里我们只是简单的整理一下知识框架,给大家一个大概的认知体系,

后续文章中,我们会展开进行深入的讲解。

1.DirectX的定义

首先,我们必须了解DirectX的定义。DirectX,(DirecteXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于MicrosoftWindows、MicrosoftXbox和MicrosoftXbox360电子游戏开发,并且只能支持这些平台。最新版本为DirectX11,创建在最新的Windows7上。MicrosoftDirectX是这样一组技术:它们旨在使基于Windows的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D动画和丰富音频)的应用程序的理想平台。DirectX包括安全和性能更新程序,以及许多涵盖所有技术的新功能。应用程序可以通过使用DirectXAPI来访问这些新功能。

2.必要的工具和开发环境

要进行游戏的开发,我们必须拥有一套最新的DirectXSDK(软件开发包)。我们可以从微软的官方下载站进行下载然后安装,这里贴出地址,http://msdn.microsoft.com/zh-cn/directx/aa937788.aspx。当然我们还要拥有开发环境,我们选择Microsoft公司的VisualStudio2010。

3.引擎设计概述

游戏引擎是一系列高级代码,我们可以以它为基础开发自己的游戏。现代的游戏引擎已经对使用他的人隐藏了底层实现的细节和规范。例如,可以在OpenGL和Direct3D的基础上开发渲染引擎,这样,引擎用户就不需要知道使用的是哪一个渲染引擎,尽管也用到了一些底层的东西。

游戏引擎包括:渲染引擎,物理引擎,声音引擎等。游戏引擎本身只是一个由更小的引擎组成的集合。游戏引擎或它涵盖的内容并没有一个精确的定义。

对于视频游戏而言,它的游戏引擎至少要包含渲染引擎和输入引擎,这是必须的,否则,就不能称其为交互式游戏。

游戏程序员和游戏引擎程序员完成的是两种不同的工作。游戏程序员只与开发游戏的游戏引擎打交道,而游戏引擎程序员要开发出其他人用于开发游戏的引擎。

4.游戏引擎中的几个关键系统

游戏引擎中的几个关键系统有:游戏渲染系统,输入系统,声音系统,物理系统,动画系统,人工智能(AI)系统等。

5. DirectXAPI函数

DirectX的API主要由DirectGraphics,DirectInput,DirectPlay,DirectMusic,DirectSound组成。每个API之间相互独立,负责完成DirectX内核中不同的功能。DirectX中每个API都可以通过硬件加速,这意味着这些API可以直接和运行软件的底层硬件对话。下面是各种API函数的概要解释。

DirectGraphics:

DirectGraphics为负责向屏幕渲染二维图形和三维图形的DirectXAPI,也就是众所周知的Direct3D。

DirectInput:

DirectInput是可以直接使用所有与计算机关联的输入设备的DirectXAPI。这些设备包括键盘,鼠标和游戏控制器设备。

DirectPlay:

DirectPlay是控制Direct中网络功能的DirectAPI。DirectPlay可以让应用程序对机器进行网络功能设置,从而可以通过和其他网络玩家交流。

DirectMusic:

DirectMusic是负责普通声音处理的DirectXAPI。

DirectSound:

DirectSound是负责高级声音处理的DirectXAPI。

6.动手写一个窗口

在Windows中使用Direct3D创建Win32窗口非常简单。要创建一个Win32窗口就必须拥有一个WinMain()函数(这不是废话是什么)。我们可以在MSDN中查到WinMain()的标准句法

intWINAPIWinMain(

HINSTANCEhInstance,

HINSTANCEhPrevInstance,

LPSTRlpCmdLine,

intnCmdShow

);

当程序第一次运行时,WinMain()函数中的所有参数从系统获取自己的相应参数值。通过在WinMain函数内部创建一个类型为WNDCLASSSEX的窗口类对象,创建窗口,然后显示窗口,然后进行消息循环,就可以实现一个空窗口的显示。具体实现代码如下:

下面是上面讲的框架代码,也是后面的笔记二的基础,需要结合笔记二一起看。

  1. LRESULTWINAPIMsgProc(HWNDhWnd,UINTmsg,WPARAMwParam,LPARAMlParam)
  2. {
  3. switch(msg)
  4. {
  5. caseWM_DESTROY:
  6. PostQuitMessage(0);
  7. return0;
  8. break;
  9. }
  10. returnDefWindowProc(hWnd,msg,wParam,lParam);
  11. }
  12. intWINAPIWinMain(HINSTANCEhInst,HINSTANCEprevhInst,LPSTRcmdLine,intshow)
  13. {
  14. WNDCLASSEXwc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,
  15. hInst,NULL,NULL,NULL,NULL,
  16. "AppClass",NULL};
  17. RegisterClassEx(&wc);
  18. //Createtheapplication'swindow
  19. HWNDhWnd=CreateWindow(WINDOW_CLASS,WINDOW_NAME,
  20. WS_OVERLAPPEDWINDOW,
  21. 100,100,640,480,NULL,NULL,
  22. hInst,NULL);
  23. ShowWindow(hWnd,SW_SHOWDEFAULT);
  24. UpdateWindow(hWnd);
  25. //Enterthemessageloop
  26. MSGmsg;
  27. ZeroMemory(&msg,sizeof(msg));
  28. while(msg.message!=WM_QUIT)
  29. {
  30. if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
  31. {
  32. TranslateMessage(&msg);
  33. DispatchMessage(&msg);
  34. }
  35. else
  36. {
  37. //Dosomethingtothescreen
  38. }
  39. }
  40. //Unregisterourwindow.
  41. UnregisterClass("AppClass",wc.hInstance);
  42. }
发现大家都在留言中说要推荐一下游戏开发相关的书籍,我这里就把各个阶段(从零基础开始)的推荐教程列出来吧,平时我写这个系列的笔记就参考了下面的很多书籍,大家感兴趣的话,可以深入去学习(推荐去买实体书,这样就不用整天盯着电脑屏幕看伤害眼睛,健康是金钱买不来的):
第一阶段,首先是C++的精通。推荐《C++ Primer》,之后《Effect C++》
第二阶段,熟悉windows下的编程。推荐看《Windows程序设计》。
第三阶段,Visual C++的学习。推荐的书目有孙鑫老师的《VC++深入详解》和孙鑫老师的vc视频教程。以及侯俊杰老师的《MFC深入详解》,与时俱进的有《Visual C++2010入门经典》。
(第二阶段和第三阶段可以结合着来学习,有很多知识是相辅相成的,并没有什么大的界限。)

第四阶段,开始学习专门介绍游戏开发的教程(有DirectX和OpenGL两条路可选,这里我们选择DirectX,DirectX在国内为主流。具体比较请移步最近刚写的这篇文章【Visual C++】游戏开发笔记十九 DirectX与OpenGL的博弈),推荐书籍为《DirectX 9.0 3D游戏开发编程基础》(封面为一个红龙的),《Windows游戏编程大师技巧》,《Direct3D游戏开发技术详解》等等,当然这类教程就比较多了,新出的有很多,DirectX相关的层出不穷,也可以选择刚发行不久的新书,毕竟上面讲的知识比较前沿与更具成熟性。(依然感谢liusofttech
的指出,为什么我没有推荐专门讲解3D编程数学基础的教程。我没有专门指出来,是因为几乎每一本Direct3D教材里面都有一章到几章有关必备数学基础知识的讲解。我觉得单独来学数学基础没必要,费时且费力,我们只要在Direct3D或者OpenGL教材里掌握相关的数学知识,那就足够了。)
还有什么经典的书籍,欢迎大家交流补充~~
(有一位兄弟提到,《游戏编程精粹》系列的书也比较经典,都是从事游戏开发多年的全球顶尖游戏工程师的肺腑之言,虽然经常会有个别错误- -,目前出了8本了,大家可以去看看)

免责声明:文章转载自《【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Sqoop 1.4.7安装与配置【IOS】IOS8 TabBarItem设置自定义图片问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FreeRTOS系列第20篇---FreeRTOS信号量API函数

FreeRTOS的信号量包括二进制信号量、计数信号量、相互排斥信号量(以后简称相互排斥量)和递归相互排斥信号量(以后简称递归相互排斥量)。我们能够把相互排斥量和递归相互排斥量看成特殊的信号量。 信号量API函数实际上都是宏。它使用现有的队列机制。这些宏定义在semphr.h文件里。假设使用信号量或者相互排斥量。须要包括semphr.h头文件。 二进制信...

HOOK技术的一些简单总结

好久没写博客了, 一个月一篇还是要尽量保证,今天谈下Hook技术。 在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常用的Hook技术。 SetWindowsHookEx 基本上做Windows开发都知道这个API, 它给我们提供了一个拦截系统事件和消息的机会, 并且它可...

Windows API参考大全(转)

具体用法请参考msdn 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个...

DirectX 官方文档

Windows 开发人员中心 https://docs.microsoft.com/zh-cn/windows/ DirectX 英文文档 https://docs.microsoft.com/en-us/windows/win32/direct3d12/directx-12-programming-environment-set-up DirectX 中...

(转载)游戏开发完整学习路线(各个版本都有)

游戏开发完整学习路线(各个版本都有)   在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指路,是可以事半功倍的。 一 平台与编程语言选择 首先,游戏开发的平台就有很多类型:  个人主机平台:Windows、Linux、Mac OC; 移动平台...

托管DirectX,从MDX到SlimDX的转换(转)

转自:http://gis4all.ru/zh-CN/net/managed-directx/ 开始迁移到托管DirectX SlimDX框架的,例如,MDX应用的帕特里克Murrisa地形的浏览器。 在托管DirectX代码所示,到新的代码,与SlimDX评论的形式。 MDX迁移项目中SlimDX 图书馆设置SlimDX“ 下载并安装“ 2010年2月S...