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

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

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

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

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

int new_plue(int a,int b){return a+b;};那么,你肯定得自己新建一个叫plus.h的头文件吧,那顺便也得再建立一个plus.cpp的实现文件吧,然后你把它包括到你的工程里面,这样你就可以在你的工程里面调用这个函数了。就像下图这样:

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

如上图所示,在你的工程右键->属性,然后在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,那么到这里我想大家对环境的搭建应该来说已经一清二楚了吧,之后的教程中我们就会开始正式的开始讲解代码了,因此希望大家现在能够熟练地掌握这些技能,这样以后学习也会更轻松一些。

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

  1. Google Map 开发笔记——基础篇(Javascript )

    Google Map 开发笔记--基础篇 说明: 一.使用入门: 1.在您需要显示地图的 html 页面嵌入这段 script 2.地图 DOM 元素 3.初始化地图 二.地图画点.线.面 1.标记( ...

  2. 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    本节对应的视频讲解:B_站_链_接 QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 1. 属性和方法 QTableWidget 有很多属性和方法,完整的可查看帮助文档. 在 ...

  3. AIR移动(Starling)开发笔记基础篇

    AIR移动(Starling)开发笔记基础篇 ---------kiddyPs:文档写的不是很好,欢迎指正和扩展 Starling相关 自定义移动动画 A.自定义函数 var tw:Tween = n ...

  4. 游戏编程之四 diectxdarw基础篇

    视频课:https://edu.csdn.net/course/play/7621 第四章 diectxdarw基础篇 第一节 DirectDraw简介      Grubers的一个观点是Direc ...

  5. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.3 新建Qt工程

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1UA4y1d7V2 学习任何的编程语言,创建的第一工程都是打印 hello world,学习 Q ...

  6. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.1 为什么要学习Qt

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1334y1776z Qt 是一个跨平台的 C++ 图形用户界面应用程序框架 Qt 为应用程序开发 ...

  7. python3多线程编程_Python 3多线程编程学习笔记-基础篇

    本文是学习<Python核心编程>的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子. 全局解释器锁 ...

  8. 【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.1 效果演示、技术点

    本节对应的视频讲解:B_站_视_频 https://www.bilibili.com/video/BV14P4y197pi Qt 中绘图用到的类是 QPainter,可以实现点.线.矩形.圆形.多边形 ...

  9. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.4 项目构建流程

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1cW4y1y7Lw 在上一节课中,我们新建了第一个 Qt 工程,其中包括 5 个文件: Hell ...

最新文章

  1. 使用numpy遇到ValueError: The truth value of an array with more than one element is ambiguous
  2. vim配置及插件安装管理
  3. Golang——垃圾回收GC(2)
  4. html 存储登录状态,Vue中保存用户登录状态实例代码
  5. 斗地主AI算法——第九章の被动出牌(3)
  6. oracle在哪里输入,Oracle数据库输出输入
  7. 排版小知识 1.针对某个对象对齐
  8. MantisBT 缺陷管理系统
  9. mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?
  10. wait放弃对象锁_Java线程:notify()和wait()示例
  11. python联网斗地主_局域网联机斗地主
  12. python第三方库安装位置_python第三方库安装在哪
  13. Ubuntu联网问题解决
  14. 超启发式算法(hyper heuristic)
  15. 家用空气净化器除甲醛什么品牌好 能除甲醛吗
  16. 切比雪夫不等式例题讲解_浅谈|f(x)|最大值的最小值问题--切比雪夫最佳逼近直线在高考中的应用...
  17. 【机器学习】吴恩达机器学习个人笔记
  18. 基于JavaSwing的雷电游戏(附论文)
  19. Office Tool Plus(安装visio)
  20. 金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(3. KingbaseES移植能力支撑体系)

热门文章

  1. 数据库服务概述 、 构建MySQL服务 、 数据库基本管理 、 MySQL数据类型
  2. 如何辨别梭织、针织和无纺面料?
  3. 如何用SourceInsight打开现有文件
  4. 因为明天,太阳总会升起
  5. iReaper:WebCast视频下载辅助工具
  6. 盘点设置电脑定时关机的5种方法
  7. 什么是Dapp?带你从零开始搭建一个Dapp
  8. SpringBoot 后端获取本机id、端口号
  9. 月亮网摘2009.2.12
  10. 亲戚关系关系算法java程序_亲戚称呼计算器java代码