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

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>就可以了,是不是很方便

编译生成,配置正确效果图如下:
glut效果图

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)类似

ithewei CSDN认证博客专家 c/c++ Qt libhv
编程之路,其路漫漫,吾将上下而求索
https://github.com/ithewei
https://hewei.blog.csdn.net
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页