zoukankan      html  css  js  c++  java
  • (转)【D3D11游戏编程】学习笔记四:准备工作

    (注:【D3D11游戏编程】学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~)

           现在可以开始接触D3D了,但是在开始前,还有一小部分准备工作要做,即配置开发环境。

           配置环境相当简单,属于一劳永逸那种。接触过游戏编程的同学绝大多数应该很熟悉这个步骤了,但为了保证一致,防止后面学习过程中因为遗漏掉哪一部而浪费大量时间,我在这里把所有必要步骤整理一下,按照这些步骤做完,后面学习过程基本上就再也不用为这类问题耗费时间了。

           一、 安装最新版的DirectX SDK

           这一步对于已经在学游戏编程的同学来说,肯定早就完成啦。除非在通过OpenGL学习,否则任何一本教材第一件事都会告诉你,到微软官方网站下载、安装最新的SDK。目前最新版的SDK为2010年六月份推出的版本,选择自己喜欢的目录安装。安装成功后所在目录文件夹名为“Microsoft DirectX SDK (June 2010)”。后面配置IDE环境变量时都跟这目录有关。

           二、 编译DirectX自带的Effect框架

           这一步可能很多人没做过。Effect框架是微软额外提供的一个程序框架,使用户在程序中使用shader时与C++程序更方便地衔接。这个框架对于编写D3D程序来说不是必需的,好比D3DX库对于D3D程序来说也是可有可无的。但它毕竟大大方便了我们使用shader,在学习过程把心思放在要点上,因此在后面学习过程中将全程使用Effect框架。但是从direct11开始,Effect框架开始以源码形式提供,而不是直接编译好的,因此需要我们手动来编译,以生成相应的.lib库(针对Debug和Release各一个)文件在程序链接时使用。

           编译方法很简单,进入到你安装SDK的目录,即“Microsoft DirectX SDK (June 2010)”,进Samples目录,继续进C++Effects11目录,这里就是微软提供给我们的Effect框架的所有源代码。找到相应版本的Visual Studio对应的.sln文件,打开。(注意不同版本的VS要使用不同的.sln文件,比如2008版的跟2010版的就不一样。)打开后即可以直接Build了。选择Debug和Release配置各Build一次,在相应的Debug和Release目录里面会出现对应的Effects11.lib文件,这就是我们要的东西。注意Debug配置下Build出来的.lib文件名字应该跟Release下出来的名字一样(Effects11.lib),把它改名为Effects11d.lib,以区别于Release模式对应的文件。这两个文件在后面工程中会跟d3d11.lib等这些lib文件一样使用,因此最好找个固定的地方放起来(可以跟其他lib文件放到一个目录下),这样配置目录时更方便。

           这里给出Build的方法,即右键单击侧边栏中的项目名字,出现菜单中第一行即是Build。如下图:

           三、 配置Visual Studio环境变量

           我自己最喜欢使用的IDE是Visual Studio,2010版。毕竟学习的是微软的技术,用自家的IDE肯定最合适不过了。对于习惯使用其他IDE的也一样,配置原理都一样的。首先当然是创建Win32应用程序,项目建立起来后开始配置。

           同样是项目名字右键单击,选最下方Properties(属性),

     

           弹出的对话框中左侧栏选择VC++ Directories,

     

           右边的Include Directories和Library Directories即是我们要修改的地方。

           在Include Directories里面最前方把你安装SDK的Include那个目录(即:xxxMicrosoft DirectX SDK (June 2010)Include)复制进去即可,最加加分号(;)与后面的目录分开。其次还要记得把Effect框架对应的头文件目录也加进来,即之前Build框架时所在的目录里面的Inc目录(我们要的头文件为”d3dx11effect.h")。对于Library Directories也一样,把你SDK目录对应的Lib目录(X64还是X86取决于你机器是64位还是32位,不过x64都适合,即:xxxMicrosoft DirectX SDK (June 2010)Libx86)复制到Library Directories里面最前面即可,分号结尾。(注意:如果你没把刚Build出来的Effect框架对应的两个.lib文件放到这个目录,则记得把那两个文件对应的目录也复制进来。)

           头文件、库文件目录配置完毕。

           下面来指定链接的库文件。在当前对话框左侧栏继续选择“Linker",进一步选择里面的”Input",

           右边第一行即“Additional Dependencies",把我们需要的.lib文件写到这里面即可。

           在我们学习d3d11过程中,要用到的库文件为(Debug模式):d3d11.lib、d3dx11d.lib、D3DCompiler.lib、Effects11d.lib、dxerr.lib、dxgi.lib、dxguid.lib。把所有这些库文件添到每一行的最开始处,各文件间用分号分开。在对话框上面分别选择Debug和Release两种模式进行配置,

           对于Release模式,把末尾有'd'字符的去年'd'即可,比如Effects11d.lib在Release模式下对应的Effects11.lib文件,其他一样。

           配置完毕,点击”确定“结束对话框。

           四、 永久保存配置

           以上过程即是配置IDE的整个过程,即我们学习d3d11过程中创建项目完、开始写代码前要做的事情。但是按照这种方法配置是针对单个项目的,即每次新建项目后都要重新进行配置。我们学习d3d11过程中要经常创建新项目,每次配置环境是件很麻烦的事情,因此最好能在一次配置完毕后,可以永久保存,这样以后再建项目就不用关心这个了。方法如下:

           在菜单中选择"View",

           下拉框中选择”Property  Manager“,

           在左侧新出现的栏中双击项目名。

           此时会弹出一个跟刚才配置环境时一样的对话框,按照上面的步骤操作即可,Release和Debug都配置下。这时配置好、确定后,以后再打开不同项目时配置就已经保存在里面啦~

           五、 Windows编程基础

           把环境配置好之后,就可以真正开始写代码啦~ 不过学习d3d11前还有一点要求,就是熟悉下Win32编程。其实对于Win32编程完全没必要精通,只要熟悉下最基本的原理即可,包括WinMain入门函数、创建窗口类、创建窗口、显示窗口、消息循环、消息处理函数等。熟悉这些就足够了,因为我们学的是3D编程,而不是Windows桌面应用程序开发。只要熟悉下这些基础知识,一次写好代码,以后是可以直接重用的,很少需要再关注Win32相关的代码(偶尔个别程序需要特定的Win32 API来实现某个功能除外,查下MSDN即可)。

           作为第一次创建Win32程序,最简单的代码如下:

           1. 包含<Windows.h>头文件

           2. 指定入门函数int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow)

           3. 创建、注册窗口类WNDCLASS

    [cpp] view plain copy
    1. WNDCLASS wndcls;  
    2. wndcls.cbClsExtra = 0;  
    3. wndcls.cbWndExtra = 0;  
    4. wndcls.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);  
    5. wndcls.hCursor = LoadCursor(NULL,IDC_ARROW);  
    6. wndcls.hIcon = LoadIcon(NULL,IDI_APPLICATION);  
    7. wndcls.hInstance = hInstance;  
    8. wndcls.lpfnWndProc = WinProc;  
    9. wndcls.lpszClassName = L"d3d11";  
    10. wndcls.lpszMenuName = NULL;  
    11. wndcls.style = CS_HREDRAW | CS_VREDRAW;  
    12.   
    13. if(!RegisterClass(&wndcls))  
    14. {  
    15.     MessageBox(NULL,L"窗口注册失败!",L"错误",MB_OK);  
    16.     return false;  
    17. }  


           4. 创建窗口CreateWindow

    [cpp] view plain copy
    1. HWND hWnd = CreateWindow(L"d3d11",  
    2.                     L"D3D11学习",  
    3.                     WS_OVERLAPPEDWINDOW,  
    4.                     CW_USEDEFAULT,CW_USEDEFAULT,  
    5.                     640,480,  
    6.                     NULL,  
    7.                     NULL,  
    8.                     hInstance,  
    9.                     NULL);  
    10. if(!hWnd)  
    11. {  
    12.     MessageBox(NULL,L"窗口创建失败!",L"错误",MB_OK);  
    13.     return -1;  
    14. }  

           5. 显示、更新窗口ShowWindow(),UpdateWindow()

    [cpp] view plain copy
    1. ShowWindow(hWnd,SW_SHOW);  
    2. UpdateWindow(hWnd);  

           6. 进入消息循环

    [cpp] view plain copy
    1. MSG msg = {0};  
    2. //主消息循环,也是游戏当中的主循环  
    3. while(msg.message != WM_QUIT)  
    4. {  
    5.     if(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))  
    6.     {  
    7.         TranslateMessage(&msg);  
    8.         DispatchMessage(&msg);  
    9.   
    10.     }  
    11.     else  
    12.     {  
    13.         //在这里做该做的事  
    14.     }  
    15. }  

           7. 退出循环,结束

    [html] view plain copy
    1. return msg.wParam;  

           此外,每个程序还要指定消息处理函数,比如WinProc,d3d应用程序中最简单的消息处理函数如下:

    [cpp] view plain copy
    1. LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  
    2. {  
    3.     switch(msg)  
    4.     {  
    5.     case WM_DESTROY:  
    6.         PostQuitMessage(0);  
    7.         return 0;  
    8.     }  
    9.   
    10.     return DefWindowProc(hwnd,msg,wParam,lParam);  
    11. }  

           基本Win32程序就这样,这里只是把关键点列了下,如果完全没接触过Windows编程的话还是需要找专门的书来先学习下。这些基础知识就可以作为学习D3D11的开始了。

           以下是上述基本Win32程序整理后的代码:

           BasicWin32

          

           接下来就是D3D的初始化了。

  • 相关阅读:
    JSON:JSON对象和JSON数组混排的复杂字符串
    爬虫4:pdf页面+pdfminer模块+demo
    爬虫3:html页面+webdriver模块+demo
    爬虫2:html页面+beautifulsoap模块+post方式+demo
    爬虫1:html页面+beautifulsoap模块+get方式+demo
    IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量
    【转】linux下如何查看某个软件 是否安装?安装路径在哪
    Linux下通过源码编译安装程序
    【转】rpm包和源码包安装的区别
    linux centos7 安装nginx并启动
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/6603836.html
Copyright © 2011-2022 走看看