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

xiaoxiao2021-02-28  99

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的几个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 认证博客专家 c/c Qt libhv 编程之路,其路漫漫,吾将上下而求索https://github.com/itheweihttps://hewei.blog.csdn.net
转载请注明原文地址: https://www.6miu.com/read-83477.html

最新回复(0)