当前位置: 首页 > news >正文

OpenGL(2)基于Qt做OpenGL开发

文章目录

  • 一、基于Qt做OpenGL开发
    • 1、环境准备
    • 2、创建OpenGL窗口
    • 3、绘制基本图形

一、基于Qt做OpenGL开发

1、环境准备

确保你已经安装了 Qt 开发环境(包含 Qt Creator),并且支持 OpenGL 开发。在创建 Qt 项目时,选择 “Qt Widgets Application” 或 “Qt Quick Application”,根据项目需求进行选择。

2、创建OpenGL窗口

在 Qt 中,可以通过继承 QOpenGLWidgetQOpenGLFunctions_x_x_Core 类来创建一个 OpenGL 窗口。以下是一个简单的示例:

#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_4_5_Core {
public:OpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}protected:// 初始化 OpenGL 上下文void initializeGL() override {initializeOpenGLFunctions();glClearColor(0.2f, 0.3f, 0.3f, 1.0f);}// 绘制 OpenGL 场景void paintGL() override {glClear(GL_COLOR_BUFFER_BIT);}// 处理窗口大小变化void resizeGL(int width, int height) override {glViewport(0, 0, width, height);}
};int main(int argc, char *argv[]) {QApplication a(argc, argv);OpenGLWidget w;w.show();return a.exec();
}

代码解释

  • initializeGL 函数:在这个函数中,我们调用 initializeOpenGLFunctions() 来初始化 OpenGL 函数,然后使用 glClearColor 设置清屏颜色。
  • paintGL 函数:这是绘制 OpenGL 场景的主要函数,在这个函数中,我们使用 glClear 函数清除颜色缓冲区。
  • resizeGL 函数:当窗口大小发生变化时,这个函数会被调用,我们使用 glViewport 函数设置视口大小。

3、绘制基本图形

下面我们在 paintGL 函数中绘制一个简单的三角形:

#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_4_5_Core {
public:OpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}protected:void initializeGL() override {initializeOpenGLFunctions();glClearColor(0.2f, 0.3f, 0.3f, 1.0f);}void paintGL() override {glClear(GL_COLOR_BUFFER_BIT);// 启用顶点属性glEnableClientState(GL_VERTEX_ARRAY);// 定义三角形的顶点坐标GLfloat vertices[] = {-0.5f, -0.5f, 0.0f,0.5f, -0.5f, 0.0f,0.0f,  0.5f, 0.0f};// 设置顶点指针glVertexPointer(3, GL_FLOAT, 0, vertices);// 绘制三角形glDrawArrays(GL_TRIANGLES, 0, 3);// 禁用顶点属性glDisableClientState(GL_VERTEX_ARRAY);}void resizeGL(int width, int height) override {glViewport(0, 0, width, height);}
};int main(int argc, char *argv[]) {QApplication a(argc, argv);OpenGLWidget w;w.show();return a.exec();
}
http://www.lryc.cn/news/540149.html

相关文章:

  • 使用JWT实现微服务鉴权
  • 高并发内存池项目介绍
  • PHP会务会议系统小程序源码
  • Java中的常用类 --String
  • PWM(脉宽调制)技术详解:从基础到应用实践示例
  • Hutool - DB 连接池配置集成
  • 激光工控机在自动化生产线中有什么关键作用?
  • Visual Studio Code的下载安装与汉化
  • nlp|微调大语言模型初探索(3),qlora微调deepseek记录
  • 【全栈】SprintBoot+vue3迷你商城-细节解析(1):Token、Jwt令牌、Redis、ThreadLocal变量
  • 基于ffmpeg+openGL ES实现的视频编辑工具(一)
  • 面试完整回答:SQL 分页查询中 limit 500000,10和 limit 10 速度一样快吗?
  • Linux系统管理(十六)——通过WSL配置windows下的Linux系统(可视化界面与远程连接)
  • 【RabbitMQ业务幂等设计】RabbitMQ消息是幂等的吗?
  • flutter在安卓模拟器上运行
  • linux shell 当命令执行出现错误立即退出的方法
  • 与本地电脑PDF文档对话的PDF问答程序
  • QT之改变鼠标样式
  • 后端开发:开启技术世界的新大门
  • Sun-Panel:简洁且美观的导航首页开源项目!!
  • 第4章 信息系统架构(四)
  • 【Java八股文】07-Redis面试篇
  • Windows PyCharm的python项目移动存储位置后需要做的变更
  • 微信小程序消息推送解密
  • 《道德经的现代智慧:解码生活与商业的底层逻辑2》
  • 通过监督微调提升多语言大语言模型性能
  • 用deepseek学大模型05逻辑回归
  • 图解循环神经网络(RNN)
  • vue文件没有name属性怎么被调用
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-build.py