基于QT5的OpenGL学习–创建窗口
在使用OpenGL渲染出出色的3D效果之前,首先需要创建OpenGL上下文(context)和一个用于显示的窗口,而OpenGL并没有提供创建窗口的API,这意味着我们需要自己创建窗口。
为了方便使用,QT对OpenGL进行了封装,提供了QOpenGLWindow和QOpenGLWidget类,可以直接创建窗口。
- 新建工程
此处选择控制台应用程序,之后下一步完成就行了。
- 修改pro文件
# 添加gui库
QT += core gui
#QT -= gui
CONFIG += c++11
TARGET = TextureTest
# 取消控制台
#CONFIG += console
CONFIG -= app_bundle
- 添加窗口类
右键项目名称–>添加新文件–>c++class,手动添加基类QOpenGLWindow,完成。
此处我的类名为CTextureWindow。
在CTextureWindow中必须实现三个虚函数。
TextureWindow.h文件:
#ifndef TEXTUREWINDOW_H
#define TEXTUREWINDOW_H
#include <QOpenGLWindow>
#include <QOpenGLFunctions>
class CTextureWindow : public QOpenGLWindow,
public QOpenGLFunctions
{
Q_OBJECT
public:
CTextureWindow();
public:
// 重载
void initializeGL(); // 初始化OpenGL上下文
void resizeGL(); // 改变窗口大小时调用
void paintGL(); // 绘制,相当于MFC的OnPaint函数
};
#endif // TEXTUREWINDOW_H
TextureWindow.cpp文件:
#include "TextureWindow.h"
CTextureWindow::CTextureWindow()
{
}
void CTextureWindow::initializeGL()
{
// 1. 初始化OpenGL上下文
initializeOpenGLFunctions();
// 2. 设置擦除颜色
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}
void CTextureWindow::resizeGL()
{
// pass
}
void CTextureWindow::paintGL()
{
// 1. 清空颜色缓冲区
glClear(GL_COLOR_BUFFER_BIT);
}
- 创建窗口
main.cpp文件:
#include <QGuiApplication> // 修改头文件,改为Gui
#include "TextureWindow.h"
int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv); // 修改为Gui应用程序
// 设置OpenGL版本信息
// format必须在show之前被调用
QSurfaceFormat format;
format.setRenderableType(QSurfaceFormat::OpenGL);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setVersion(3,3);
// 创建窗口
CTextureWindow w;
w.setFormat(format);
w.resize(QSize(800, 600));
w.show();
return a.exec();
}
至此,窗口创建完毕,运行效果如下:
如果觉得对您由帮助的话,请扫码关注,谢谢!