【图形学与游戏编程】开发笔记-基础篇1:熟悉开发环境

(本系列文章由pancy12138编写,转载请注明出处:http://blog.csdn.net/pancy12138)

在入门篇的文章中,我们几乎没有提及任何与程序相关的知识。只是为大家逐一的解释了如何能够将3D游戏这一问题,转换成计算机能够处理的数字问题以及大家可能会需要提前了解的与游戏编程息息相关的概念。这些知识虽然不能让大家写出任何程序,但是在整体上来讲,这些知识的重要性是很高的。我们在之后所讲的所有的细节实现都是在这个大前提之下的。而在我看来,知道为什么需要这么做,要比知道该怎么做重要一些。如果一开始就给大家讲一些函数调用以及程序设计的问题,那大家一定会对各种算法和函数的用法产生一堆疑问,这势必会在之后消耗大家更多的时间去弥补。

那么在接下来的基础篇里面,大家就要正式的接触程序设计了。注意我们之后的程序一般来说都会分成两部分,一部分是运行于CPU上的C++,一部分是运行于GPU上的HLSL/GLSL,大家如果之前没有学习或者了解过图形学或者GPU通用计算的话这里可能需要转换一下编程思路。不过这些都是我们教程要讲解的重点,所以大家多学习肯定会熟悉的。这一篇文章主要是讲解开发环境的搭建以及使用的知识,可以说是大家开始编程之前必须经过的一个步骤。

首先是环境,在我们的教程里无论是OpenGL也好,还是DirectX也好,所使用的编译器都是VS2015,当然,大家可以自由选择编译器,我在下面也会给大家解释环境搭建最根本的原理和方法,这也就能够让大家更容易的在其余的编译器上搭建相应的环境。

那么,在windows上,我们无论是做哪方面的开发,首当其冲的就是要得到相应的API库文件。也就是我们经常见到的dll,lib和.h文件。然后才能自如的调用其封装好的函数。举一个最简单的例子,比如printf("Hello world");这么一句大家耳熟能详的语句,就必须要包括以及相应的lib和dll,编译器才能认识。当然有人就说,那我什么都没有干啊,就是#include告诉编译器包含了这个头就可以写出hello world了啊。也没见要什么dll,lib啥的啊?当然,你能这么省事是因为你调用的.h是编译器自带的。那么假如你要自己写一个函数,比如说是一个加法

int new_plue(int a,int b){return a+b;};那么,你肯定得自己新建一个叫plus.h的头文件吧,那顺便也得再建立一个plus.cpp的实现文件吧,然后你把它包括到你的工程里面,这样你就可以在你的工程里面调用这个函数了。就像下图这样:【图形学与游戏编程】开发笔记-基础篇1:熟悉开发环境_第1张图片

上图就为大家展示了如何创建一个库文件并调用它。这种方法就是最初我们使用库文件的方法,就是直接把源代码并到我们的工程里面来就好了。但是随着科学的发展,大家的工程量越来越大,于是就有人想能不能不用把别人的代码加在自己的工程里面,同时还能用到别人写好的函数呢?答案是肯定的,这之后就出现了一种神奇的东西来代替.h+.cpp这种定义函数的办法,我们叫做.h+“静态链接库”或者是.lib文件的函数定义方法,这种文件的好处是神马呢,好处就是别人的工程已经编译完毕了,你只需要调用他的函数,编译器就可以把他写好的功能链接到你的程序里面去,这样你就可以在不增加代码量的情况下使用别人写好的库了。这种链接库无论是生成还是使用都很简单,只要你把.lib和.h文件的路径告诉编译器,那编译器就认为你可以调用.h里面所声明的函数了。用法和上图.h+.cpp的做法一毛一样。那么怎么才能告诉编译器.h和.lib的路径呢?在不同编译器上方法一般不一样,但是差别也不大。下面我会说在VS2015中如何告诉编译器一个我们自己的库文件的位置:

【图形学与游戏编程】开发笔记-基础篇1:熟悉开发环境_第2张图片

如上图所示,在你的工程右键->属性,然后在VC++目录->包含目录里面填上你需要的库文件的头文件也就是.h文件的路径,然后在VC++目录->库目录里面填上对应的.lib文件的路径,最后在链接器->输入->附加依赖项里面填上所有需要的lib文件的名称。这就算完了。之后你就可以随意的在你的工程里面使用你自己写的函数了。事实上,大部分相关的API都是这么做的,比如directx以及opengl还有windowsAPI等等。那么接下来我们把思维再向前看一步。随着科学的继续发展(balabala)工程量的据需增大,大家又发现了一个问题,那就是虽然说库文件是已经编译好的,但是他们不停地在更新中,比如什么1.0,2.0,3.0这些的。像directx虽然大更新一般不互相兼容,但是小更新还是有的。那么问题就来了,比如说今天老黄心情好了,N卡的驱动给你一更新,然后这下好了,他一更新,directx和opengl就得更新,然后无数的游戏引擎也得随之更新,然后无数的游戏就得更新,就算我们是用的静态库而不是老黄的源代码,但是我们还是得重新换库重新编译一个exe出来才行。那么有没有什么办法,让他更新他的,我这边的exe永远都不变,还能享受更新的效果呢?答案是肯定的。这之后就出现了一种神奇的东西,叫.h+“动态链接库”也就是.dll。这玩意就厉害了,根本不经过编译器就能和你的程序合二为一,也就是说你只管用,什么都不用配,到时候他就能在dll里面找到已经完全编译成二进制码的功能函数。当然.h文件的位置还是得有的。dll的使用比上面说的简单多了,你把相关的dll要么放到c:\windows里面,要么就放到程序的根目录下就可以了。这样只要你有函数定义的.h就可以放心的调用这里面的函数。比如说最常见的就是什么opengl32.dll以及d3d9.dll,d3d11.dll这种,如果你没放的话他就会提示你缺少dll,通常游戏运行不了都是这个原因。这样老黄的驱动程序更新只需要更新相关的dll就好了,其他的什么directx啊,引擎啊,游戏啊大可以什么都不改放心的使用。

OK,上面嘚吧嘚吧半天就是为了让大家清楚的认识到什么是.h,lib,dll以及这些东西的用处是神马。因为大家不一定都是用vs来作为开发环境的,所以讲的详细一点让大家更容易了解和使用。那么接下来我们就得讲重点了。也就是directx和opengl是怎么配的。首先我们来谈directx。注意有些人可能之前学过一些dx9或者相应的图形学内容,而第一印象是要去下载那个2010年6月的directx SDK。但是实际上自从那一次的directx发布之后,微软在win8上就已经把directx合并到windows sdk里面了。神马意思呢,就是说现在如果你用的是vs2012,2013或者2015的话,那么d3d11.h和stdio.h的用法是一样的,直接#include就可以了。是不是非常的简便。这个时候肯定就有人说了,卧槽,博主你在逗我呢,我在上面好不容易才看懂啥是库,怎么用库。你现在才告诉我其实directx和stdio.h一样,其实根本神马都不用配?没错,确实是神马都不用配,但是大家眼界要远一点对吧,首先游戏引擎不仅仅是需要directx的,像物理啊,声音啊,模型导入啊,到时候需要配的库多了去了。再加上除了directx的核心库以外,像effect框架以及dds纹理的导入这些工具库还是得去msdn上下载并配到vs里面,所以说上述的知识还是很有意义的。接下来我们再提一下OpenGL,这个库我们需要配的就是glew,因为openGL和directx不一样,他只是一个标准,实现都在c:\windows\system32\opengl32.dll里面,这个文件是显卡驱动自带的不需要我们自己下载。然后大家需要下载的就是glew库,这个库以windows的方式定义了所有大家会用到的openGL函数。如果相要写opengL的童鞋就需要麻烦一点去下载这个库了。当然配置库的方法上面已经介绍的很详细了,.h部分和静态库部分就把路径按上面的方式告诉编译器,dll部分就直接塞到c:\windows里面就可以了,非常简单。下面是我整理的dx11的工具库和glew库的下载地址:

点击打开链接

注意这个dx11的工具库是由vs2015编译的,也就是说只有vs2015能认得出来,如果大家用的是别的编译器的话需要去msdn上下载相应的DirectXTK以及Effects11的工程:

effect11:点击打开链接

DirectXTK:点击打开链接

OK,那么到这里我想大家对环境的搭建应该来说已经一清二楚了吧,之后的教程中我们就会开始正式的开始讲解代码了,因此希望大家现在能够熟练地掌握这些技能,这样以后学习也会更轻松一些。

你可能感兴趣的:(开发笔记,计算机图形学,图形,游戏编程)