QOpenGL开发入门系列教程0:QOpenGL开发库介绍

系列教程索引:Qt开发入门系列教程索引

首先来说明一下基本的库,QOpenGL使用Qt窗口作为显示窗口组件。

QOpenGLFunctions

  • 此类提供兼容标准OpenGL绘图函数的所有的核心函数
  • 不同版本的Qt支持的OpenGL版本也不一样。比如说Qt5.15.2支持至OpenGL4.5
  • 一些函数Qt以其他方式实现

QOpenGLWidget

基于Qt+OpenGL的窗口组件

QOpenGL使用的是Qt提供的基础库,但是也可以使用像GLU、GLM等库。

说是库,其实是Qt自带的。

工程模板

接下来介绍后续开发会用到的模板

new class

这个就是标准的C++类的使用方法

新建一个Qt Widget工程。

会自动生成

1
2
3
4
5
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
*.pro

新建一个类GLWidget

头文件

1
2
3
4
5
6
7
8
9
10
11
class GLWidget : public QOpenGLWidget,public QOpenGLFunctions
{
public:
GLWidget(QWidget *parent=nullptr);
~GLWidget();

protected:
void initializeGL();//初始化参数函数
void resizeGL(int w,int h);//调整界面尺寸回调函数
void paintGL();//绘图函数
};

实现文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
GLWidget::GLWidget(QWidget *parent)
:QOpenGLWidget(parent)
{}

GLWidget::~GLWidget()
{}

void GLWidget::initializeGL()
{
initializeOpenGLFunctions();//初始化OpenGL上下文内容
glClearColor(0.0f,0.0f,0.0f,1.0f);//将缓冲区清空为RGBA指定的颜色
//使用颜色缓冲区、深度缓冲区、RGBA、alpha支持
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_RGBA|GL_ALPHA_BITS);
glEnable(GL_DEPTH_TEST);//使用深度缓冲区测试
}

void GLWidget::resizeGL(int w, int h)
{
glViewport(0,0,w,qMax(h,1));//设置视角范围
update();//qt自带的界面刷新函数
}

void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_RGBA|GL_ALPHA_BITS);
}

在mainwindow.cpp构造函数中添加

1
2
glWidget = new GLWidget(this->centralWidget());
glWidget->resize(this->centralWidget()->size());

效果

new

prompt

Qt UI设计器中提供了类提升的功能

GLWidget类的代码和new方式的一样

在设计器中的窗口中添加Qt提供的opengl窗口,并将其提升为GLWidget类

prompt

效果为

prompt

inheirt

继承也是标准C++类的功能

还是之前的GLWidget类,只不过不需要*.ui文件。

在main.cpp中直接调用

1
2
3
4
QApplication a(argc, argv);
GLWindow w;
w.show();
return a.exec();

结果为:

inherit

源代码地址:OpenGL_Beginner在QOpenGL下的0.1plain_with_new_class、0.2plain_with_prompt、0.3plain_with_inherit

我在本系列后续的文章中使用的是inherit方法

下一篇:OpenGL开发入门系列教程1:输出版本号