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的初始化了。

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/6603836.html
Copyright © 2011-2022 走看看