最近在系统的学习有关OpenGL的内容,参考的主要学习资料是Joey de Vries的教程在Github上的中文翻译:LearnOpenGL CN
这些笔记主要是汇总整理的一些其中的想法,并结合Qt的内容给出自己的理解,对于每篇文章的实现的Qt代码,贴在文后
目录:
准备工作
Qt5.5版本以上已经集成Opengl,不需要在工程文件(*.pro)中引入任何库文件就可以使用Qt中集成的OpenGL。
第一个OpenGL工程
关于如何在QCreator中添加文件不再赘述,首先新建一个openglwidget类,openglwidget继承QOpenGLWidget类,保护QOpenGLFunctions类
openglwidget.h
#include <QWidget>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class OpenGLWidget : public QOpenGLWidget,protected QOpenGLFunctions
//在创建类时可以先继承于QWidget,再进行修改
{
Q_OBJECT
public:
explicit OpenGLWidget(QWidget *parent = nullptr);
signals:
public slots:
private:
void initializeGL();
void paintGL();
void resizeGL(int w,int h);
};
openglwidget.cpp
OpenGLWidget::OpenGLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
void OpenGLWidget::initializeGL()
{
initializeOpenGLFunctions();
}
void OpenGLWidget::resizeGL(int w,int h)
{
glViewport(0,0,w,h);
}
void OpenGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor(255.0f,255.0f,255.0f,255.0f);//黑色背景
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
OpenGLWidget* openGLWidget = new OpenGLWidget();
//新的OpenGL窗口实体
QVBoxLayout* centralLayout = new QVBoxLayout();
//新的窗口布局
centralLayout->addWidget(openGLWidget);
//将这个窗口放到这个布局里
this->ui->centralWidget->setLayout(centralLayout);
//在主窗口里放置布局,这样窗口既可以自适应主窗口大小变换
}
MainWindow::~MainWindow()
{
delete ui;
}
由此就得到了可以使用OpenGL绘制图形的初始窗口。
PS:关于Qt中ui设计师中有可直接拖拽的OpenGLWidget,我的建议是最开始不要直接使用这个Widget,最好使用自己写的openGLWidget类初始化出来的窗口,以布局的方式放到主窗口中。