一、OpenGL的基本功能
OpenGL作为一个性能优越的图形应用程序设计接口(API),它独立于硬件和窗口系统。在使用各种操作系统的计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。在开发三维图形应用程序过程中 OpenGL具有以下最基本的功能:
模型构建。OpenGL通过点、线和多边形等基本图元来绘制复杂的物体。为此, OpenGL中提供了丰富的基本图元绘制函数,从而可以方便地绘制三维物体。
基本变换。 OpenGL提供了一系列的基本坐标变换:模型变换、投影变换以及视口变换等。在构建好三维物体模型后,模型变换能够使观察者在视点位置观察与视点相适应的三维物体模型;投影变换的类型决定了三维物体模型的观察方式,不同的投影变换得到的物体景象是不同的;视口变换则对模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图像。
光照处理。正如自然界中不可缺少光一样,要绘制具有真实感的三维物体就必须做相应的光照处理。 OpenGL里提供了管理4种光(射光、环境光、镜面光和漫射光)的方法,此外还可以指定物体模型表面的反射特性。
物体着色。 OpenGL提供了两种模型着色模式,即RGB模式和颜色索引模式。在RGB模式中,颜色直接由RGB值来指定;而在索引模式中颜色值则由颜色表中的一个颜色索引值来指定。
纹理映射。在计算机图形学中,把包含颜色、透明度值、亮度等数据的矩形数组称为纹理。纹理映射也可理解为将纹理粘贴在三维物体模型的表面上,以使三维物体模型看上去更加逼真。OpenGL提供的一系列纹理映射函数,可使开发者十分方便地把真实图像贴到物体模型的表面上,从而可以在视口内绘制逼真的三维物体模型。
二、OpenGL需要的库
目前常用的库的组合为:freeglut + glew
,或者 glfw + glew
。glfw
是跨平台的C++开源库,用来代替glut
的。glew
是通过动态加载OpenGL
的动态链接库中的函数,以防止出现各个系统中的头文件,库文件的不一致性。
- 在进行OpenGL编程的时候,需要先建立一个窗口来显示图形,还需要从鼠标、键盘获取事件。但OpenGL仅仅是针对图形化的一个接口,它是跨平台的,至于如何建立窗口和监听IO由平台自带库实现,像windows可以用windows.h里面的方法建立窗口,但使用自带库建立窗口一般都特别麻烦。于是,图形学大神Mark Kilgard坐不住了,一声炮响为我们送来了glut。glut(OpenGL实用工具库)为我们提供了一个统一的接口,方便我们进行窗口管理,IO监听,还包括一些三维物体绘制函数,用来绘制特定的更为复杂的物体,像球体、圆面体、茶壶等。而glut是闭源的,从2000年之后没有更新,算是gg了。freeglut是glut的一个开源版本,一直有专门的人员维护和更新。
- glew。glew是一个跨平台的C++扩展库,为了方便管理平台与opengl版本不匹配,以及方便的解决不同显卡特有的硬件接口支持。window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些OpenGL的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支 持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识 别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,就能使用gl,glu,glext,wgl,glx的全部函数。GLEW支持目前流行的各种操作系统(Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。
三、编译OpenGL依赖库(freeglut,glew)
编译平台:Win7-X64+VS2015+CMake,编译freeglut
和glew
库。
freeglut库下载:https://sourceforge.net/projects/freeglut/
glew库下载:http://glew.sourceforge.net/
CMake编译freeglut
过程如下:
选择解压后的源码文件夹,新建build文件夹,作为生成目录,选择好编译器和版本,见下图CMake的配置。
分别点击:Configure,Generate后,生成VS的工程文件,如下图所示:
打开freeglut.sln工程,选择编译
Release
或者Debug
,以及X64
平台,然后右键ALL_BUILD
,生成即可,如下:
编译结束后,生成DLL和lib文件如下,include是需要的头文件,工程中需要包含这些头文件,需要从生成的工程中拷贝出来:
CMake编译glew
源码,过程如下:
- 解压下载的安装包,如下所示:
- 进入build文件夹下,打开vc12的工程:
- 打开后,VS显示如下,选择【Release,x64】,然后,右键红色框,【生成】,可以得到lib文件:
四、配置VS2015的OpenGL开发环境
- 创建空的VS项目,并在工程路径下创建两个文件夹,【include】和【lib】,用于存放第三方库和头文件。
- 配置VS的项目属性
右键项目 --> 【属性】–>【C/C++】–> 【附加包含目录】,添加"$(SolutionDir)\include;",如下图所示,
右键项目属性 --> 【属性】–>【链接器】–> 【常规】–> 【附加库包含目录】,添加(SolutionDir)\lib
右键项目属性 --> 【属性】–>【链接器】–> 【输入】,添加【freeglut.lib,freeglut_static.lib】
将【freeglut.dll】放在运行目录
五、测试代码
#include<iostream>
#include<GL/glut.h>
#include<GL/freeglut.h>
using namespace std;
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT); // 清空颜色缓冲池
glColor3f(1.0f, 0.0f, 0.0f); // 设置绘图颜色
glRectf(-0.5f, -0.5f, 0.5f, 0.5f); // 绘制矩形
glFlush(); // 执行OpenGL指令列表中的指令
}
void main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显示模式
glutInitWindowSize(500, 500); // 设置窗口大小
glutInitWindowPosition(200, 200); // 设置窗口在屏幕上的位置
glutCreateWindow("OpenGL Test");
glClearColor(0.0f, 0.0f, 1.0f, 1.0f); // 使用蓝色清空背景底
glutDisplayFunc(renderScene); // 注册显示窗口时回调函数renderScene
glutMainLoop(); // 消息循环(处理操作系统等的消息,例如键盘、鼠标事件等)
}
运行结果如下: