文章目录
- 0、 概念/准备
- 1、VS+Opengl
- 快速添加
- 手动编译
- 2、QT中使用opengl
- 1.pro配置文件
- 2.引入头文件 继承QGLWidget
- 3.实现三个主要函数
- 3、引用
0、 概念/准备
opengl官网地址
1、OpenGL 函数库相关的 API 有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。gl 是核心,glu 是对 gl 的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut 是为跨平台的 OpenGL 程序的工具包,比aux 功能强大(aux 很大程度上已经被 glut 库取代)。扩展函数库是硬件厂商为实现硬件更新利用 OpenGL 的扩展机制开发的函数。
实际上windows系统默认是自带opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了。由于这篇教程用的是VS编译器,并且是在Windows操作系统上,我们只需将opengl32.lib添加进连接器设置里就行了
2、在opengl官网详细说明安装平台支持主流的windows·、linux、Mac系统,在安装opengl之前首先保证电脑的GPU驱动是否是匹配的(渲染和速度会优化),当然没有GPU也是可以的。
1、VS+Opengl
这里的opengl实际包含两部分:窗口加载库+函数管理库
**窗口加载:**在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样的,OpenGL有目的地从这些操作抽象(Abstract)出去。这意味着我们不得不自己处理创建窗口,定义OpenGL上下文以及处理用户输入。
幸运的是,有一些库已经提供了我们所需的功能,其中一部分是特别针对OpenGL的。这些库节省了我们书写操作系统相关代码的时间,提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUT,SDL,SFML和GLFW。在教程里我们将使用GLFW。
GLFW 轻量级 lightweight 的 OpenGL 框架,的确是除了跨平台必要做的事情都没有做,所以一个头文件,很少量的 API,就完成了任务。glfw 的开发目的是用于替代 glut 的,从代码和功能上来看,我想它已经完全的完成了任务。它是一个轻量级的,开源的,跨平台的library。支持 OpenGL 及 OpenGL ES,用来管理窗口,读取输入,处理事件等。
函数管理:OpenGL 只是一个标准/规范,具体的实现是驱动开发商针对特定显卡实现的。由于 OpenGL 驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。这个过程非常复杂,而且很繁琐,需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程。现在主要用glew和gad
glew:glut 或者 freegult 主要是 OpenGL 1.0 的基本函数功能,glew 是使用 OpenGL 2.0 之后的一个工具函数。
不同的显卡公司会发布一些只有自家显卡才支持的扩展函数,要想用这数涵数,不得不去寻找最新的 glext.h,有了 glew 扩展库,就再也不用为找不到函数的接口而烦恼,因为 glew 能自动识别你的平台所支持的全部 OpenGL 高级扩展函数。也就是说,只要包含一个 glew.h 头文件,你就能使用 gl,glu,glext,wgl,glx 的全部函数。
glew 支持目前流行的各种操作系统,但有一个缺陷是它并没有提供一种方式可以屏蔽 OpenGL 旧函数的调用,尽管可以使用 Core profile 的方式,但是代码中仍然存在 glVetex、glBegin 这样固定管线 OpenGL 的函数调用(虽然它们在 Core Profile 模式下没有任何作用),看起来不那么统一。要做到这一点可以使用下面的 glad。
glad 是继 gl3w,glew 之后,当前最新的用来访问 OpenGL 规范接口的第三方库。简单说glad 是 glew 的升级版。
glad 是一个开源的库,它的配置与大多数的开源库有些许的不同,glad 使用了一个在线服务。在这里能够指定 glad 需要定义的 OpenGL 版本,并且根据这个版本加载所有相关的OpenGL 函数。这样做让 glad.h 中仅仅只包含我们想要的头文件,例如在设置 3.3 + Core Profile 版本之后,可以严格控制头文件中只有这些内容,所以凡是代码中有 OpenGL 旧函数的调用都会在编译的时候给出错误提示。
- 所以在这里最好选择GLFW +GLEW(最好都是32位,据说64位问题多)或者GLFW +GLAD(推荐)
快速添加
官网有编译好的库文件,可以直接下载,在工程中引用
即可:
GLFW下载链接
GLEW下载链接
GLAD下载地址
手动编译
在上面网站都支持源码下载,其实可以根据工程的需要+Cmake或者用VS去编译适合自己的的库文件(不具体展示)
通过上述的方法,将得到的dll和lib或者.so因为opengl支持主流的windows·、linux、Mac系统
#include <glad/glad.h>
#include <GLFW/glfw3.h>
2、QT中使用opengl
如果厌倦了繁琐的配置和版本兼容问题,那么使用QT来开发再好不过。Qt是一个非常强大的应用程序开发框架,它自己提供了OpenGL的模块,不需要配置环境即可直接使用,其次对GLSL也有支持。
主要流程:
1.pro配置文件
QT += opengl
#最好包含
LIBS += -lopengl32 \
-lglu32 \
2.引入头文件 继承QGLWidget
代码如下(示例):
#include<QtOpenGL/qgl.h>
#include<GL/gl.h>
#include<GL/glu.h>
3.实现三个主要函数
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
最后运行效果
工程连接
3、引用
1、【由浅入深OpenGL】一:Visual Studio下搭建OpenGL开发环境
2、OpenGL 库介绍和开发环境搭建