搜索《Introduction to 3D Game Programming with DirectX 11》下载本书及代码

有的需要从VC++6.0的习惯中走出来

从VC++6.0到VS C++学习需要有一个适应的过程,这个过程可能是异常痛苦的,但本质是相同的,下边以经典的Win32 Applicationg演示说明下:

一、建立工程与文件的不同:

VC++6.0与VS2010演示对比
   VC++ 6.0   VS 2010
新建工程 文件-》新建-》工程.Win32 Application  文件-》新建-》三个选项:选择工程-》Win32 Application   
工程名 -》自己起文件名(如“myproject”)-》确定   同左(推荐英文名,中文名后边很麻烦)
生成工程 -》默认 an ampty project 点选下一步:应用程序默认 windows应用,附加项:空项目
创建完成  -》完成 同左
文件视图  选择文件视图(file view)-》出现熟悉的:头文件、源文件及资源文件夹  默认或选择 视图-》解决方案资源管理器-》出现同左, 同左,多了一个外部依赖项
增加源文件.app 选择 source files-》文件-》新建-》C++source files-》工程名下输入文件名(如:myproject)-》确定 源文件-》右击-》添加-》新建项-》C++文件-》输入文件名(如:myproject)-》添加
包含文件(本节可暂不设置) 一般自动包含头文件和库文件,工具-》选择-》目录-》include files其实已经包含了一些头文件。其中有--\SDK\INCLUDE(没有的话可能没有下载,请搜索最新的directX sdk下载)  -》在library files 其实已经包含了-:\SDK\LIB\X86,没有的请按如上下载。这些都是封装的功能,include引用头文件,以利用他们的功能,library释放。当然包含只是头一步,还要在代码中引用头文件(如:#include <d3d11.h>),释放可用预编译(如:#pragma comment(lib, "d3d11.lib")  ),也可用衔接器。有些,如#include <windows.h>,个性化较强,设计代码时解决,没有windows.lib。当然,自己编写在工程同一个文件夹下的头文件不用目录包含,只需代码包含,如#include <----.h>,一旦设置目录包含,可能永久有效,不用反复操作。 2种方法:1.手工操作:右击解决方案下的工程(如:myproject)-》属性-》vc++目录-》增加包含目录中的SDK--include-》增加库目录中的SDK---lib---X86;2.一劳永逸的方法:视图-》属性管理器-》展开工程(如:myproject)-》展开debug|win32-》双击microsoft.cpp.win32.user-》如第一步更改VC++目录,以达到与VC++6.0相同的目的。(包含不同的头文件与库文件,请养成好习惯)
释放文件功能(本节可暂不设置) 接如上,2种方法:第一用#pragma comment(lib, ".lib")写在代码种,第二:工程-》设置-》link-》对象模块下-》拖到最后-》空格-》加入对应的.lib。也可在project options下,  /nologo /subsystem前添加。 2种方法,第一种同左。第二种:又包括2种,同上两种方法,包含文件的方法,打开属性页选择衔接器-》输入。一劳永逸的方法用视图的属性管理器,如上
功能测试 请把下边的代码复制到建好的.cpp种,如myproject.cpp,前提知识,了解windows生成简单窗口的知识。 同左

二、VC++6.0与VS2010运行代码的不同:(通过上表设置环境,建立C++文件,复制下列代码分别运行)

#include <windows.h>//回调函数,这个函数里的消息及消息处理我们下节再讲,这节大家先理解窗口创建显示的流程
LRESULT WINAPI WinProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{switch (Msg)            //处理消息过程{case WM_DESTROY:        //响应鼠标单击关闭按钮事件PostQuitMessage(0); //退出消息队列return 0;           //退出函数}return DefWindowProc(hWnd, Msg, wParam, lParam);
}//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{char *cName = "CWindowName";  //窗口类的名字WNDCLASSEX wc;HWND hWnd;MSG Msg;wc.style = CS_HREDRAW | CS_VREDRAW;wc.cbSize = sizeof(WNDCLASSEX);wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景.wc.hCursor = NULL;         //不设置wc.hIcon = NULL;           //不设置wc.hIconSm = NULL;         //不设置wc.hInstance = hInstance;  //当前程序的句柄,hInstance是有系统给传递的wc.lpfnWndProc = WinProc;  //窗口处理过程的回调函数,有关回调函数,下节再讲wc.lpszClassName = cName;  //窗口类的名字。wc.lpszMenuName = NULL;    //目录名,不设置RegisterClassEx(&wc);//在系统中注册//创建窗口,注意返回值是一个句柄。hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, cName, "我的窗口", WS_OVERLAPPEDWINDOW,200, 100, 600, 400, NULL, NULL, hInstance, NULL);  //创建窗口,窗口标题为"我的窗口"//创建窗口的容错处理while (hWnd == NULL){          MessageBox(NULL, "There's an Error", "Error Title", MB_ICONEXCLAMATION | MB_OK);return 0;}//显示窗口ShowWindow(hWnd, nShowCmd);UpdateWindow(hWnd);//下面是对消息的循环处理,关于消息及消息的处理我们下节在讲。while (GetMessage(&Msg, NULL, 0, 0)){TranslateMessage(&Msg); //翻译消息DispatchMessage(&Msg);  //分派消息}return Msg.message;
}

先在VC++6.0中运行

复制完代码开始调试(编译-》开始调试):F5

VC++6.0编译一般无错,link时可能出错:

有可能出现 link2001类错误,.如:error LNK2001: unresolved external symbol _main Debug/....exe : fatal error LNK1120: 1 unresolved externals,不能解决的外部问题,

解决方法:1.暂时方法:(1)打开工程-》设置-link-》project options,如果是subsystem:console,请改为:subsystem:windows,原因是winmain的链接方法为windows,非console;

(2)也可以用预处理方法:#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )。

2.一劳永逸:但这不是根本更改,需要通过任务管理器修改,ctrl+alt+delete-》打开任务管理器-》服务-》打开服务-》若application informationg禁用,请启用。

复制代码在VS2010运行则出现了3个大错误:

(调试-》启用调试):F5

1.error C2440: “=”: 无法从“char *”转换为“LPCWSTR”;

对应: wc.lpszClassName = cName;   等同于wc.lpszClassName ="CWindowName";

cName的声明:char *cName = "CWindowName";

2.error C2664: “CreateWindowExW”: 不能将参数 2 从“char *”转换为“LPCWSTR”;

3.error C2664: “MessageBoxW”: 不能将参数 2 从“const char [17]”转换为“LPCWSTR”;

以上问题同根,VS函数对应的名字大多用wchar型的LPCWSTR,为长指针,32位,而VC++对应的函数对应的名字用char 8位,需将8位的char转化为32位的LPCWSTR,方法有N多:

1.#include “wchar.h”,把出问题的名字前加_T("");略麻烦;

2.用转化函数;麻烦

3.修改VS设置;麻烦,副作用大;

4.直接在名前加L进行转化;简单方便,如L“LPCWSTR”,注意L与“间不能有空格;

5.用其他函数:一般在函数名后加A或改为A;如:MessageBox(NULL, "There's an Error", "Error Title", MB_ICONEXCLAMATION | MB_OK);改为MessageBoxA(NULL, "There's an Error", "Error Title", MB_ICONEXCLAMATION | MB_OK);;略麻烦。

..................................................

总而言之,用第4、5个比较好。

修改后的VS2010代码如下:不用char*了,否则改不好出现乱码!

#include <windows.h>//回调函数,这个函数里的消息及消息处理我们下节再讲,这节大家先理解窗口创建显示的流程
LRESULT WINAPI WinProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{switch (Msg)            //处理消息过程{case WM_DESTROY:        //响应鼠标单击关闭按钮事件PostQuitMessage(0); //退出消息队列return 0;           //退出函数}return DefWindowProc(hWnd, Msg, wParam, lParam);
}//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{//  char *cName = "CWindowName";  //窗口类的名字WNDCLASSEX wc;HWND hWnd;MSG Msg;wc.style = CS_HREDRAW | CS_VREDRAW;wc.cbSize = sizeof(WNDCLASSEX);wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景.wc.hCursor = NULL;         //不设置wc.hIcon = NULL;           //不设置wc.hIconSm = NULL;         //不设置wc.hInstance = hInstance;  //当前程序的句柄,hInstance是有系统给传递的wc.lpfnWndProc = WinProc;  //窗口处理过程的回调函数,有关回调函数,下节再讲wc.lpszClassName = L"CWindowName";  //窗口类的名字。wc.lpszMenuName = NULL;    //目录名,不设置RegisterClassEx(&wc);//在系统中注册//创建窗口,注意返回值是一个句柄。hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, L"CWindowName", L"我的窗口", WS_OVERLAPPEDWINDOW,200, 100, 600, 400, NULL, NULL, hInstance, NULL);  //创建窗口,窗口标题为"我的窗口"//创建窗口的容错处理while (hWnd == NULL){          MessageBox(NULL, L"There's an Error", L"Error Title", MB_ICONEXCLAMATION | MB_OK);return 0;}//显示窗口ShowWindow(hWnd, nShowCmd);UpdateWindow(hWnd);//下面是对消息的循环处理,关于消息及消息的处理我们下节在讲。while (GetMessage(&Msg, NULL, 0, 0)){TranslateMessage(&Msg); //翻译消息DispatchMessage(&Msg);  //分派消息}return Msg.message;
}

第一.Introduction to 3D Game Programming with DirectX 11介绍一相关推荐

  1. Introduction to 3D Game Programming with DirectX 11 翻译 --- 开篇

    Direct3D 11简介 Direct3D 11是一个渲染库,用于在Windows平台上使用现代图形硬件编写高性能3D图形应用程序.Direct3D是一个windows底层库,因为它的应用程序编程接 ...

  2. 《Introduction to 3D Game Programming with Directx 11》随书代码在 Win10 和 Visual Studio 2017上的修改

    <Introduction to 3D Game Programming with Directx 11>书中代码的修改以适配Win10 SDK(原版代码需依赖Microsoft Dire ...

  3. Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(一)

    顶点和顶点布局 在Direct3D中,顶点由空间位置和各种附加属性组成,Direct3D可以让我们灵活地建立属于我们自己的顶点格式:换句话说,它允许我们定义顶点的分量.要创建一个自定义的顶点格式,我们 ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...

  5. Introduction to 3D Game Programming with DirectX 12一书学习记录(第一个例子编译错误)

    准备开始学一学d3d,听说<Introduction to 3D Game Programming with DirectX 12>这本书不错,于是就拿来学一学.不料第一个例子,按照书中的 ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader)...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 原文: Int ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 原文:Introduction to 3D Game P ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引

    代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 回顾视景坐标系变换的数学算法: 熟悉第一人称摄像机的功能: 实现第 ...

  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    学习目标 对Direct 3D编程在3D硬件中扮演的角色有基本了解: 理解COM在Direct 3D中扮演的角色: 学习基本的图形学概念,比如存储2D图像.页面切换,深度缓冲.多重纹理映射和CPU与G ...

最新文章

  1. linux重命名命令
  2. 基于矩阵分解的推荐算法
  3. Quartz-2D绘图之路径(Paths)详解
  4. python水印_用python来给图片加水印
  5. python中单引号,双引号,多引号区别
  6. PAT甲级题目翻译+答案 AcWing(高精度)
  7. 丰田pcs可以关闭吗_别只知道开不坏,现在的丰田还有这些厉害绝招!
  8. mac os 开启redis_关于Redis,学会这8点就够了
  9. 仙岛求药(信息学奥赛一本通-T1251)
  10. 计算机应用专业对视力,多媒体教学设备对学生视力影响问题的思考及建议
  11. 小米8可以刷鸿蒙os,鸿蒙 OS 2.0 来了!小米也能用么?
  12. 关于子IP地址子网划分和子网汇总
  13. 使用OpenCV和Python实现图像的颜色检测
  14. python多久可以完全学会_python好学吗自学要学多久
  15. html+css day1 如何用Mac创建html文件
  16. uni-app。APP-PLUS 获取应用缓存,缓存清除
  17. 机器学习(2)逻辑回归
  18. HTTPS 方式访问网站
  19. centos7 系统安装及开机优化
  20. Linux 版本分支图

热门文章

  1. Spotify将后端服务迁移到GCE
  2. Java程序员黄金年龄25-28岁,我们30+的人该去哪儿?附华为案例
  3. 专题-子项-5-mysqlf-information_schema信息大全
  4. Node.js前端工程师入门速成-姜威-专题视频课程
  5. 异步电机矢量控制深度学习
  6. 悲剧的JAVA环境变量
  7. 【C/C++服务器开发】事件驱动、事件驱动架构、事件驱动编程及设计模式
  8. Cortex-a8 arm11 arm9 xscale powerpc 嵌入式处理器实测性能
  9. Tornado的Application
  10. java 缓冲区溢出_缓冲区溢出攻击_java教程_缓冲区溢出攻击 漏洞