您的位置:首页 > 运维架构

OpenGL开发前的准备——开发环境的配置

2014-03-18 21:47 381 查看
我在学习opengl之前,windows编程的基础几乎为零,以前学过基础的C++,简单的做过课设,但是没有学的很扎实,后来几年都去搞电路了,过了这么多年了这方面也都忘的差不多了。说这些是想说明对于一个这方面基础基本为零的(不过我对编程语言和程序还是有一定概念)人,从头开始学opengl有多么的痛苦,市面上倍受人推崇的“蓝宝书”或者是“红宝书”也好,都是适用于有基础的人的,再看很多人写的这方面的教程,也都很杂乱,或者说到底还是没有照顾我这种从零开始的学生(= =||)当然,不能怪别人了,还有的就是时间都是很早以前的了,现在都已经2014年了,很多教程甚至都是5、6年前写,这么多年过去了,编译环境发生了变化,opengl的版本发生了变化,总之感觉很多都变了,直接照搬别人的例程都不适用了,而且对一个基础为零的人来说,你根本都不知道错误在哪。所以我很想把自己从零开始学的这段经验记录下来,可以帮助有像我这样的人。

好了,首先我们先来了解下关于OpenGL的一些基础知识吧,这样大家能有一定的概念。

一、什么是OpenGL

http://www.cnblogs.com/hanyonglu/archive/2012/05/13/2498110.html

首先感谢上面这个博主,他的这篇文章中说到的什么是OpenGL归纳的很不错

OpenGL是目前用于开发可移植的、可交互的2D和3D图形应用程序的首选环境,也是目前应用最广泛的计算机图形标准。OpenGL是SGI公司开发的一套的计算机图形处理系统,是图形硬件的软件接口,GL代表图形库(Graphics
Library)。OpenGL具有可移植性,任何一个OpenGL应用程序无须考虑其运行环境所在平台与操作系统,在任何一个遵循OpenGL标准的环境下都会产生相同的可视效果。

OpenGL不是一种编程语言,而是一种API(Application
Programming Interface,应用程序编程接口)。当我们说某个程序是基于OpenGL的或者说它是个OpenGL程序是,意思是说它是用某种编程语言如C或C++编写的,其中调用了一个或多个OpenGL库函数。作为一种API,OpenGL遵循C语言的调用约定。

OpenGL是一套应用程序编程接口(API),借助这个API我们开发人员就可以开发出对图形硬件具有访问的能力的程序。我们可以使用OpenGL开发出运行效率较高的图形程序或游戏,因为OpenGL非常接近底层硬件并且OpenGL使得我们不必去关注图形硬件的细节。既然我们开发人员不必关注图形硬件的细节,那么我们需要关注什么呢?我们需要关注OpenGL如何绘制,按照专业术语就是根据物体的规格参数及相关属性,借助虚拟照相机和光照生成一幅该物体的图像。OpenGL程序与平台是无关的,所以OpenGL
API中不包含任何输入函数或窗口函数,原因是因为这两种函数都要依赖于特定的平台,例如Windows,Linux或是其他系统。

说简单一点,就是一个函数库,我们在自己的程序中添加了关于这些函数的头文件后,我们就可以调用这些函数来实现我们想要的图形的效果。

如果看到这里你还是不是很清楚,那可以再去找下这方面的资料,看看别人是怎么理解的,多看看就能明白了。

二、需要添加的OpenGL的相关库

上面已经说到了怎么用opengl,就是添加它的一些函数库。你可能去网上搜opengl的库,就会有各种各样的说法,有glew、glee、gl
、glu 、glut、 glx、 glext,总之每个人的说法还不一样,我就乱了,我到底要加哪些库,这些库又有什么不同呢,它们自身又有什么作用呢?

我在这里也只是做一个搬运工,很多都是别人的建议,我把他们的总结一下,变成适用我的编译环境的配置。

http://www.cppblog.com/magicqy/articles/73144.html

http://www.cnblogs.com/kesalin/archive/2009/09/08/opengl_settings.html

以上都是参考的一些博客的地址,再次表示感谢

我的编译环境是VS2012+win 8 64位,64位和32位在安装库的时候还是有一定的区别的。

http://www.opengl.org/  这是Op
e856
enGL的官网,好像已经出到4.4版本了。

但是我从网上下的是3.7版本的库,但是直觉觉得应该是够用了。已经比很多还在说2.0版本的好很多了……

前面提到的这些库其实都不是学习opengl必须的,但是有了它们,写程序的时候会方便很多。

OpenGL主要包括三个函数库,它们是核心库、实用函数库和编程辅助库。核心库中包含了OpenGL最基本的命令函数。核心库提供了一百多个函数,这些函数都以”gl”为前缀,用来建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等所有的二维和三维图形操作。实用函数库是比核心库更高一层的函数库,它提供四十多个函数,这些函数都以”glu”为前缀。由于OpenGL是一个图形标准,是独立于任何窗口系统或操作系统的,在OpenGL中没有提供窗口管理和消息事件响应的函数,也没有鼠标和键盘读取事件的功能,所以在编程辅助库提供了一些基本的窗口管理函数、事件处理函数和简单的事件函数。这类函数以”aux”作为前缀。值得一提的是,目前AUX编程辅助库已经很大程度上被GLUT库取代了。

OpenGL 下有一些重用的辅助库,比如glut,glee,glew等等,在windows平台下需要自己安装,因为微软为了推广自己的DX,在windows下只支持openGL 1.1版本。你可以打开\Microsoft Visual Studio X.X\VC\include\gl\gl.h 或 \Microsoft  SDKs\Windows\v6.1\Include\gl\gl.h 文件,查看微软默认支持的openGL版本号是:

 

/* Version */

#define GL_VERSION_1_1                    1

 

现在openGL已经发展到4.4了,因此我们需要自己下载配置这些库,在这里我们来安装glut, glee, glew这三个库,以及一些OpenGL扩展支持。

 先说明下各种库

gl:         OpenGL所使用的函数和常量声明。
glu.h:    GLU(OpenGL实用库)所使用的函数和常量声明。GLU库属于OpenGL标准的一部分。(以下各种库则不属于)

glaux.:  GLAUX(OpenGL辅助库)所使用的函数和常量声明。这个库提供了创建窗口,处理键盘和鼠标事件,设置调色板等
OpenGL本身不提供,但在编写OpenGL程序时又经常用到的功能。目前这个库已经过时,只有比较少的编译环境中有提
供,例如VC系列。在VC系列编译器中,使用这个头文件之前必须使用#include <windows.h>或者具有类似功能的头文件。

glut:   提供对窗口的封装,这是跨平台窗口的,我们就不必自己去编写烦琐的窗口代码。GLUT代表OpenGL应用工具包
(OpenGL Utility Toolkit),是一个与窗口系统无关的工具包。它作为AUX库的功能更强的替代品,用于隐藏不同窗口系
统API的复杂性。GLUT的子程序的前缀使用”glut”。一些编译系统可能不直接提供这个库(例如VC系列),需要单独下载安
装。这个头文件自动包含了<GL/gl.h>和<GL/glu.h>,编程时不必再次包含它们。

glext.h:  扩展头文件。因为微软公司对OpenGL的支持不太积极,VC系列编译器虽然有<GL/gl.h>这个头文件,但是里面只有
OpenGL 1.1版本中所规定的内容,而没有OpenGL 1.2及其以后版本。对当前的计算机配置而言,几乎都支持OpenGL 1.4
版本,更高的则到1.5, 2.0, 2.1,而VC无法直接使用这些功能。为了解决这一问题,就有了<GL/glext.h>头文件。这个头文
件提供了高版本OpenGL所需要的各种常数声明以及函数指针声明。
wglext.h:扩展头文件。与glext.h类似,但这个头文件中只提供适用于Windows系统的各种OpenGL扩展所使用的函数和常量,不适
用于其它操作系统。

glee:  方便用来判断当前系统是不是支持某项OpenGL特性,我们就不用自己去写烦琐的先取函数地址然后再判断的代码了。

GLEE开源库的头文件。它的出现是因为<GL/glext.h>虽然可以使用高版本的OpenGL函数,但是使用的形式不太方便。
GLEE库则让高版本的OpenGL函数与其它OpenGL函数在使用上同样方便。

GLee.h和glew.h都是windows平台下的GL扩展头文件,但是glew使用起来不是很好用,调试时经常会出现一些莫名奇妙的
错误,于是有人写了一个轻量级的glew就是GLee。

使用glew时,有些扩展是需要获取指针的但有些不需要,因此最好在使用的时候都查询并获取要使用的GL函数或扩展,如
果不获取有可能会出现内存异常。

GLee使用起来就相对方便的多了,只需要将GLee.c和GLee.h包含进工程,再在要使用GL函数或扩展的文件中Include上
GLee.h就OK了,最重要的是不需要定义函数指针不需要获取函数指针。

需要注意的是,这个头文件与<GL/gl.h>是冲突的,在包含"glee.h"之前,不应该包含<GL/gl.h>。

也就是你需要先#include<glut.h>再#include<glee.h>

glew:  因为windows默认只支持OpenGL 1.1,你要想用更高版本的OpenGL,你就需要安装它,它能自动识别你的平台所支
   持的全部OpenGL高级扩展函数。GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知
道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到4.4以上了,要使用这些OpenGL的高级特性,就必须
下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支 持的扩展函数,你要想用这数涵数,不得不去
寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识 别你的平台所支持
的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全 部函数。GLEW
支持目前流行的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。

http://www.cnblogs.com/shadow21/archive/2010/11/11/1874530.html

上面地址里的博客写的很明白,当使用extensions时候,要么是下载glext回来,自己提供源代码实现(3, 4)两步。要么是直接用glew or glee。

所以综上所述,我们需要哪些库呢?

glut.h

glee.h

glew.h

下面就来说说如果添加这些库

1.   Windows环境下的GLUT下载地址:(大小约为150k) 
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 
将下载的压缩包解开,将得到5个文件

Ø  32位Windows环境下安装GLUT的步骤
  1、将glut.h复制到D:\VS\VC\include\GL下,若GL目录不存在,则新建。
  2、将glut.lib和glut32.lib复制到D:\VS\VC\lib 下。
  3、将glut.dll和glut32.dll复制到C:\WINDOWS\system32下。
Ø  64位Windows环境下安装GLUT的步骤
  1、将glut.h复制到D:\VS\VC\include\GL下,若GL目录不存在,则新建。
  2、将glut.lib和glut32.lib复制到D:\VS\VC\lib 下。
  3、将glut.dll和glut32.dll复制到C:\WINDOWS\SysWOW64下。
  注:跟32位相比,仅仅是第三步不一样
glew库下载
项目主页: http://glew.sourceforge.net/ 
文档地址: http://glew.sourceforge.net/install.html 
下载地址: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-src.zip

glew安装的步骤,与glut一模一样
http://blog.csdn.net/xuguangsoft/article/details/8002375

glee.h的相关信息如下

http://elf-stone.com/glee.php

开发前的准备工作就到这里了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl