欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenGL学习笔记--配置VS环境

程序员文章站 2022-07-14 08:05:24
...

OpenGL简介

OpenGL(Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。

OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。

开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。它采用C语言风格,提供大量的函数来进行图形的处理和显示OpenGL图形库一共有100多个函数,它们分别属于 OpenGL的基本库、实用库、辅助库等不同的库。

核心库gl,它们是最基本的函数,这部分函数用于常规的、核心的图形处理。
实用库glu(OpenGL utility library),包含的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等。Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。
辅助库glaux(OpenGL auxiliary library),包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数。

OpenGL扩展名

每个扩展都有一个扩展名,扩展名类似如下形式:
GL_ARB_multitexture
第一段GL,用来表示针对OpenGL哪部分开发的扩展,有以下几个值:
GL – 针对OpenGL核心的扩展
WGL – 针对Windows平台的扩展
GLX – 针对Unix / Linux平台的扩展
GLU – 针对OpenGL Utility Library的扩展
第二段ARB,用来表示是谁开发的这个扩展,常见以下几个值:
ARB – 经OpenGL Architecture Review Board(OpenGL管理机构)正式核准的扩展,往往由厂商开发的扩展发展而来,如果同时存在厂商开发的扩展和ARB扩展,应该优先使用ARB扩展
EXT – 被多个硬件厂商支持的扩展
NV – nVIDIA 公司开发的扩展
ATI – ATI公司开发的扩展
ATIX– ATI公司开发的实验性扩展
SGI – Silicon Graphics(SGI)公司开发的扩展
SGIX– Silicon Graphics(SGI)公司开发的实验性扩展
第三段multitexture就是真正的扩展名了,如multitexture就是多重纹理扩展。

VS环境中已有的OpenGL

OpenGL在windows的VS开发环境中已经有了第一版(OpenGL1.1)的头文件(gl.h、glu.h),导入库(opengl32.lib、glu32.lib),动态库(opengl32.dll、glu32.dll)
inc路径通常为C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl
lib路径通常为C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
dll路径通常为C:\Windows\system32(32位系统)或C:\Windows\syswow64(64位系统)

安装OpenGL常用辅助库

glut

glut(OpenGL Utility Toolkit)提供对窗口的封装,这是跨平台窗口的,我们就不必自己去编写烦琐的窗口代码。
它由Mark Kilgard在SGI时写的。作为AUX库的功能更强大的替代品,用于隐藏不同窗口系统API的复杂性。
是一个学习OpenGL编程的一个良好开端。
目前最新版本为3.7

1、下载glut:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
2、解压文件后你会得到5个文件,头文件glut.h、导入库glut32.lib和glut.lib、动态库glut32.dll和glut.dll
3、将glut.h放入inc路径
4、将glut32.lib和glut.lib放入lib路径
5、将glut32.dll和glut.dll放入dll路径

glee

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

下载glee:http://elf-stone.com/,同理,放入到inc路径,lib路径,dll路径
使用方式如下:

#include <gl\GLee.h>          // (no need to link to gl.h) 
...
if (GLEE_ARB_multitexture)    //is multitexture support available?
{
  glMultiTexCoord2fARB(...);  //safe to use multitexture
}
else
{
   //fallback
}

glew

glew(OpenGL Extension Wrangler Library)因为windows默认只支持OpenGL 1.1,你要想用更高版本的OpenGL,你就需要安装它,它能自动识别你的平台所支持的全部OpenGL高级扩展函数

下载glew:http://glew.sourceforge.net/,同理,放入到inc路径,lib路径,dll路径
使用方式如下:

#include <gl/glew.h>
...
if (GLEW_ARB_vertex_program)
{
    /* It is safe to use the ARB_vertex_program extension here. */
    glGenProgramsARB(...);
}

使用VS写个glut测试程序

使用VS新建个空的控制台程序
增加main.cpp写入如下代码:

#include <gl/glut.h>

void MyDisplay(){
    glClear(GL_COLOR_BUFFER_BIT);
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    glFlush();
}

int main(int argc, char* argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(640, 480);
    glutCreateWindow("glut window");
    glutDisplayFunc(MyDisplay);
    glutMainLoop();
    return 0;
}

注意,打开glut.h文件,可以发现如下包含和导入:

#include <GL/gl.h>
#include <GL/glu.h>

#pragma comment (lib, "winmm.lib")     /* link with Windows MultiMedia lib */
#pragma comment (lib, "opengl32.lib")  /* link with Microsoft OpenGL lib */
#pragma comment (lib, "glu32.lib")     /* link with OpenGL Utility lib */
#pragma comment (lib, "glut32.lib")    /* link with Win32 GLUT lib */

所以我们只用简单的#include <gl/glut.h>就可以了,是不是很方便

编译生成,配置正确效果图如下:
OpenGL学习笔记--配置VS环境

glut的几个API介绍

glut的api就是以glut为前缀,函数作用基本看名字就能了解了

1、glutInit:初始化glut库,没有反初始化函数
2、glutInitDisplayMode:初始化显示模式
3、glutInitWindowPosition:初始化窗口位置
4、glutInitWindowSize:初始化窗口大小
5、glutCreateWindow:创建窗口
6、glutDisplayFunc:设置显示函数
7、glutMainLoop:窗口消息循环

8、glClear清屏,全0为黑色
9、glRectf画个矩形,四个参数分别表示了位于对角线上的两个点的横、纵坐标
10、glFlush:保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待),其作用跟fflush(stdout)类似