OpenGL教程(1)——准备
在正式开始学习OpenGL之前,我们需要先配置好OpenGL环境。
IDE
首先我们需要选择一个IDE。支持OpenGL的IDE有很多,这里我们选择Visual Studio 2015(Windows平台)作为我们的IDE。
GLFW
OpenGL是一个图形库,而要画图,就需要先创建一个窗口。不幸的是,OpenGL没有提供创建窗口的功能,必须自己创建窗口。而创建窗口在每一个操作系统上都不同(在Windows上代码量也不少)。因此我们将会使用一个窗口库来简化这一过程。常用的OpenGL窗口库有GLUT、GLFW和SDL。这里我们选择GLFW。
GLFW可以从它的官方网站上下载。你可以直接下载它的binaries,或者自己用CMake编译,详细配置方法请看我的另一篇文章。要注意,最好使用32位的版本。这里我使用的GLFW版本是3.2.1。
如果下载已经编译好的binaries,解压并打开,可以找到一个include文件夹和若干lib-xxxx文件夹(xxxx是编译器名)。include文件夹里含有一个GLFW文件夹,里面有glfw3.h(还有一个glfw3native.h不用管)。如果几个lib-xxxx文件夹里有针对你的编译器的(例如lib-vc2015对应于VS2015),打开该文件夹,可以看到里面有glfw3.lib,glfw3dll.lib和glfw3.dll三个文件。
建议将本教程使用的所有的头文件和库文件分别整理到两个文件夹中(我把它们命名为include和lib),并且整理头文件时,建议直接移动整个GLFW文件夹。
GLEW
除了GLFW,我们还需要一个GLEW库。Visual Studio对于OpenGL(gl.h)只支持到1.1,而本教程要学的是OpenGL 3.3。但是,OpenGL是由显卡支持的,显卡已经提供了我们需要的OpenGL函数。因此就需要在运行程序时动态地获取函数地址。在Windows下,以glGenBuffers为例,大概是这样的:
#include <windows.h>
#include <GL/gl.h>
...
// define the functions' prototypes
typedef void * (*WGLGETPROCADDRESS)(const char *);
typedef void (*GLGENBUFFERS)(GLsizei, GLsizei *);
// load opengl32.dll and query wglGetProcAddress' address
HMODULE hDll = LoadLibrary("opengl32.dll");
WGLGETPROCADDRESS wglGetProcAddress = (WGLGETPROCADDRESS)GetProcAddress(hDll, "wglGetProcAddress");
// query OpenGL functions' addresses
GLGENBUFFERS glGenBuffers = (GLGENBUFFERS)wglGetProcAddress("glGenBuffers"); // now the function can be used as normal
GLuint vbo;
glGenBuffers(, &vbo);
每个使用到的OpenGL函数都要这么做,工作量也是很大的。而GLEW正是做这个的——帮我们获取OpenGL函数地址,这样我们就不需要手动获取函数地址了。
GLEW可以从这里下载。你可以下载已经编译好的binaries,也可以下载源代码自己编译。同样的,最好使用32位的版本。解压binaries之后在include文件夹中有一个GL文件夹,里面有glew.h和几个其它头文件,lib/Release/Win32下有glew32.lib和glew32s.lib(32位),bin/Release/Win32下有glew32.dll(32位)。
静态链接和动态链接
我们上面下载的GLFW和GLEW都有静态和动态两种使用方式。静态的意思就是不使用DLL,而动态就是指使用DLL。但注意,使用DLL和不使用DLL两种情况,会影响到使用的.lib文件。
GLFW:
静态:glfw3.lib
动态:glfw3dll.lib,glfw3.dll
GLEW:
静态:glew32s.lib
动态:glew32.lib,glew32.dll
具体使用哪种,可自行选择。
创建项目
现在我们需要的库已经下载完了,我们可以开始创建项目了。这里我们使用Visual Studio 2015作为IDE,下面是使用Visual Studio时的步骤(其它IDE类似):
1. 点击“文件”(File),选择“新建/项目”(New/Project)。
2. 在新建项目窗口左端,选择Visual C++。
3. 选择“空项目”(Empty Project),选好项目位置,输入名字之后,点击“确定”(OK)。
4. 点击“项目”(Project),选择“属性”(Property)。
5. 在属性页左端,选择“配置属性/VC++目录”(Configuration Properties/VC++ Directories),点击“包含目录”(Include Directories),右边会出现一个箭头,点击该箭头,出现一个“<编辑...>”(<Edit...>)框,点击该框,输入头文件路径(这里我把GLFW的include/GLFW文件夹和GLEW的include/GL文件夹都整理到了一个名为include的文件夹中)。
6. 和“包含目录”类似,编辑“库目录”(Library Directories),输入库文件路径(这里我把所有库文件都整理到了一个名为lib的文件夹中)。
7. 选择“链接器/输入”(Linker/Input),和前面类似,编辑“附加依赖项”(Additional Dependencies),输入如下内容,表示编译时链接下面的.lib:
opengl32.lib
glfw3.lib
glew32s.lib
注意如果GLFW是动态的,把glfw3.lib改成glfw3dll.lib;如果GLEW是动态的,把glew32s.lib改成glew32.lib。
8. 在属性页上,点击“确定”(OK)或“应用”(Apply)。
9. 最后,如果使用了动态链接的库(不管是GLFW还是GLEW),(建议)将相应的dll复制到项目所在路径。
到此,项目配置完成!现在你可以开始学习下一课了。
注:本文可转载,转载请注明地址:http://www.cnblogs.com/collectionne/p/6617364.html
OpenGL教程(1)——准备的更多相关文章
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十七课:CG顶点脚本
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十五课:顶点缓存
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十六课:全屏反走样
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十四课:3D光晕
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十三课:FreeType库
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十一课:体积雾气
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十二课:多重视口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十课:绳子的模拟
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第三十九课:物理模拟
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- JS模式--装饰者模式
在Javascript中动态的给对象添加职责的方式称作装饰者模式. 下面我们通常遇到的例子: var a = function () { alert(1); };//改成: var a = funct ...
- 蓝桥杯-猜年龄-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- godot新手中文系列教程1-打包安卓
国内godot qq群 302924317 我也是个新手,可以进群多多交流. 我想要吐槽一下,官方文档有点陈旧,细节缺乏,所以某些时候不要相信官方文档,可以向我们可爱的群友提问,他们一定很乐意回答. ...
- linux下python+pycharm安装
安装环境: vmware 12 centos 6.8 一.安装python3.5 默认情况下,linux下是默认使用2.x版本的,现在我们要安装3.x版本,具体操作如下 1.去官网下载安装包.(这 ...
- luogu P1015 回文数
题目描述: 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制 ...
- 罪恶的SEO优化
1. 基础概念开始 SEO,搜索引擎优化.概括来说就是针对分析搜索引擎的网站收录以及评价规律,来对网站的结构,内容以及其他因素作出一些合理调整,使得网站更容易被搜索引擎收录,并且能够尽量排在搜索引擎自 ...
- ASP.NET MVC, Url长度过长问题解决,404.15问题
最近在处理一个问题的时候,发现他们存在一个大量数据放在URL中传递的过程,当数据达到一定数量的时候就会报出404.15问题. 运行环境是在IIS8,经过查询之后发现,URL此时最大长度为2048,肯定 ...
- 学习MVC之租房网站(七)-房源管理和配图上传
在上一篇<学习MVC之租房网站(六)-用户登录和权限控制>完成了后台用户登录和权限控制功能的开发,接下来要完成的是房源的管理,用户在后台新增.编辑房源信息,供前台用户操作. 一 房源管理 ...
- WPF 简易手风琴 (ListBox+Expander)
概述 之前听说很多大神的成长之路,几乎都有个习惯--写博文,可以有效的对项目进行总结.从而提高开发的经验.所以初学WPF的我想试试,顺便提高一下小学作文的能力.O(∩_∩)O哈哈~ 读万卷书不如行万里 ...
- 如何使用RSYNC搭建备份服务器
1. RSYNC介绍 RSYNC是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows等多种操作系统平台. 远程数 ...