VC6.0下配置OpenGL
首先我想弄明白两个概念
OpenGL: (全称Open Graphics Library)定义了一个跨编程语言、跨平台的编程接口的规格。
OpenCV:(全称Open Source Computer Vision Library)由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法,基于C/C++语言的开源计算机视觉函数库。
我看着这个概念依旧还是有点模糊的,两个都和图像处理有关系,说通俗点这两个的区别在于OpenGL主要是游戏开发等三维处理,OpenCV是数字图像处理开放库。
我其实对OpenGL概念熟悉一些,因为以前安装大型单机游戏NBA2k系列的时候有提示我需要OpenGL的,貌似还有个DirectX的东西,嘿嘿~闲话不扯了,开始OpenGL在VC6.0下的配置吧。
综合网上的一些安装配置教程,我整理了一套适合本机的配置:
首先是安装GLUT库(OpenGL Utility Toolkit),是一个与窗口系统无关的工具包, OpenGL主要包括三个函数库,它们是核心库、实用函数库和编程辅助库。核心库中包含了OpenGL最基本的命令函数。核心库提供了一百多个函 数,这些函数都以”gl”为前缀,用来建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等所有的二维和三维图形操作。实 用函数库是比核心库更高一层的函数库,它提供四十多个函数,这些函数都以”glu”为前缀。由于OpenGL是一个图形标准,是独立于任何窗口系统或操作 系统的,在OpenGL中没有提供窗口管理和消息事件响应的函数,也没有鼠标和键盘读取事件的功能,所以在编程辅助库提供了一些基本的窗口管理函数、事件 处理函数和简单的事件函数。这类函数以”aux”作为前缀。值得一提的是,目前AUX编程辅助库已经很大程度上被GLUT库取代了
一、VC 6.0 安装GLUT库:
1、下载GLUT库:http://www.openglsource.com/download/download.htm
2、 将压缩包内的glut.h放C:\Program Files\Microsoft Visual Studio\VC98\Include\GL目录下
3、将glut32.lib放到C:\Program Files\Microsoft Visual Studio\VC98\Lib目录下
4、将glut32.dll放到系统盘(我的是C盘)C:\Windows\System32目录下
注意:我的VC6.0是安装在c盘下的ProgramFiles下的,所以上面的路径就按自己机器上的贴了,大家可以根据自己实际情况操作。
二、连接GLUT库:
打开VC6.0,新建一个Win32 Console Application,工程名称随意取好了,我这用的OpenGL
然后点击OK按钮,选择An empty project 点击Finish
再点击OK 这样我们就建立了一个Win32的空工程。
接下来在空工程中按Ctrl+N新建一个空代码文件,文件名可以随意取,我这里用的是eg.c
注意:后缀名要为.c,网上查了点资料, OpenGL不是一种编程语言,而是一种API(Application Programming Interface,应用程序编程接口)。当我们说某个程序是基于OpenGL的或者说它是个OpenGL程序是,意思是说它是用某种编程语言如C或 C++编写的,其中调用了一个或多个OpenGL库函数。作为一种API,OpenGL遵循C语言的调用约定。而我们都知道.c文件即为C语言源程序文件。
再按OK,即可以进入代码编辑页面。
选择 Proejct—>Settings
选择 LINK 选项卡
添加一下文件到 Object/library: opengl32.lib glut32.lib glu32.lib
注意: 同时添加了glu32.lib 和opengl32.lib. 他们是标准OpenGL库.
点击OK完成我们的基本配置。下面用一个简单OpenGL的小程序测试下我们的配置是否成功
#include
#include
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0); //Set display-window color to white.
glMatrixMode(GL_PROJECTION); //Set projection parameters.
gluOrtho2D(0.0,200.0,0.0,150.0);
}
void lineSegment(void)
{
glClear(GL_COLOR_BUFFER_BIT); //Clear display window.
glColor3f(1.0,0.0,0.0); //Set line segment color to red.
glBegin(GL_LINES);
glVertex2i(180,15); //Specify line-segment geometry.
glVertex2i(10,145);
glEnd();
glFlush(); //Process all OpenGL routines as quickly as possible.
}
void main(int argc,char* argv)
{
glutInit(&argc,&argv); //Initialize GLUT.
glutInitWindowPosition(50,100); //Set top-left display-window position.
glutInitWindowSize(400,300); //Set display-window width and height.
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //Set display mode.
glutCreateWindow("An Example OpenGL Program"); //Create display window.
init(); //Execute initialization procedure.
glutDisplayFunc(lineSegment); //Send graphics to display window.
glutMainLoop(); //Display everything and wait.
}
将上面代码拷贝到刚刚建立的eg.c的文件中,编译运行得到如下结果:
说明我们的配置成功。
在这里大家会发现,我们一共弹出了两个窗口,Console(控制台,也就是我们以前刚学C语言时候经常看得到的所谓的黑窗口)和OpenGL窗口。如果你不想黑窗口(控制台窗口)出现,只是需要看下你编写出来的界面如何,可以做一下设置:
选择 Project -> settings
选择 Link 选项卡
从 Category 中选择 Output
在 Entry-point synmbol 文本框中键入 mainCRTStartup
对于已存在的控制台工程, 有一个简单的办法将它转换成Win32应用程序:
根据上面的步骤修改入口点
在 Project options 文本框中用 subsystem:windows 覆盖 subsystem:console
附图如下:
点击OK,再重新编译运行,得到的就只有一个OpenGL的窗口了。
这段实例程序是在网上拷贝的,几乎每句代码后面都有注释。
可以试着摸索OpenGL的基本函数使用,我们会发现代码中所有的函数前面都有一个前缀glut.
1、在定义主函数后,首先要做的第一步工作就是初始化GLUT,对于初始化函数glutInit
void glutInit(int *argc, char **argv);
参数说明:
//argc - 一个指向主函数 argc 变量的 未经修改 的指针.
//argv - 一个指向主函数 argv 变量的 未经修改 的指针.
2、初始化 GLUT 本身以后, 要定义显示窗口. 首先, 建立窗口的位置, 例如: 在窗口的左上角. 要实现这个功能, 需要调用函数 glutInitWindowsPosition.
void glutInitWindowPosition(int x, int y);
//参数:
//x- 距离屏幕左边的像素数. 默认值是 -1, 由Windows系统决定窗口的位置. 如果没有没有采用默认值, 那么你应该使用一个合适正值作为实参.
//y- 距离屏幕屏幕顶端的像素数.
3、接下来我们要决定创建窗口的大小,调用函数glutInitWindowSize.
void glutInitWindowSize(int width, int height);
参数:
//width - 窗口的宽度
//height - 窗口的高度
4、然后要定义显示模式, 使用glutInitDisplayMode 函数.
void glutInitDisplayMode(unsigned int mode)
参数:
mode - 指定显示模式
//mode 参数是一个 GLUT 预定义常数的复合布尔型 (位或). 可以使用 mode 来指定颜色, 以及缓冲区的数量和类型.
这些常数是:
GLUT_RGBA or GLUT_RGB - 默认颜色模式
GLUT_INDEX - 颜色索引模式
显示模式允许你选择单或双缓冲区窗口. 相关常数是:
GLUT_SINGLE - 单缓冲区窗口
GLUT_DOUBLE - 双缓冲区, 平滑动画需要
这里还有更多关于缓冲区的常数:
GLUT_ACCUM - 聚集缓冲区
GLUT_STENCIL - The stencil buffer (...翻译不出来)
GLUT_DEPTH - 深度缓冲区
5、上面步骤过后,可以调用 glutCreateWindow 函数了,顾名思义,这是个创建窗口的函数了。
int glutCreateWindow(char *title);
参数:
title - 窗口标题
glutCreateWindows 函数的返回值是索创建窗口的标示符.
那么要看到你想见的OpenGL窗口,接下来你就得进行下一步操作:
6、告诉 GLUT 系统负责渲染的函数:
也就是例子中的这个函数
这个函数就是你要在这个OpenGL的窗口中实现的行为。
7、GLUT 中有一个函数接受一个函数指针作为参数, 它将这个指针指向的函数作为渲染函数glutDisplayFunc
void glutDisplayFunc(void (*func)(void));
参数:
func - 渲染函数指针, NULL在这里非法
8、我们最后要做, 就是让程序进入事件处理循环. GLUT 给我们准备了一个函数来使程序进入一个无限循环(死循环), 永远在等待下一个需要处理的事件. 这个函数就是 glutMainLoop
void glutMainLoop(void)
该函数必须是程序中的最后一个,它显示初始图形并使程序进入检查鼠标或键盘等设备输入的无穷循环之中.
好了 以上就是关于OpenGL的基本配置与使用过程了,希望对大家有用