基于QT5的OpenGL学习--创建窗口

基于QT5的OpenGL学习–创建窗口

在使用OpenGL渲染出出色的3D效果之前,首先需要创建OpenGL上下文(context)和一个用于显示的窗口,而OpenGL并没有提供创建窗口的API,这意味着我们需要自己创建窗口。

为了方便使用,QT对OpenGL进行了封装,提供了QOpenGLWindow和QOpenGLWidget类,可以直接创建窗口。

  1. 新建工程
    在这里插入图片描述

此处选择控制台应用程序,之后下一步完成就行了。

  1. 修改pro文件
# 添加gui库
QT += core gui
#QT -= gui

CONFIG += c++11

TARGET = TextureTest
# 取消控制台
#CONFIG += console
CONFIG -= app_bundle
  1. 添加窗口类

右键项目名称–>添加新文件–>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);
}
  1. 创建窗口

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();
}

至此,窗口创建完毕,运行效果如下:
在这里插入图片描述
如果觉得对您由帮助的话,请扫码关注,谢谢!

如果觉得对您由帮助的话,请扫码关注,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值