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 中,可以通过继承
QOpenGLWidget
和QOpenGLFunctions_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();
}
相关文章:
OpenGL(2)基于Qt做OpenGL开发
文章目录 一、基于Qt做OpenGL开发1、环境准备2、创建OpenGL窗口3、绘制基本图形 一、基于Qt做OpenGL开发 1、环境准备 确保你已经安装了 Qt 开发环境(包含 Qt Creator),并且支持 OpenGL 开发。在创建 Qt 项目时,选择 “Qt Widget…...

使用JWT实现微服务鉴权
目录 一、微服务鉴权 1、思路分析 2、系统微服务签发token 3、网关过滤器验证token 4、测试鉴权功能 前言: 随着微服务架构的广泛应用,服务间的鉴权与安全通信成为系统设计的核心挑战之一。传统的集中式会话管理在分布式场景下面临性能瓶颈和扩展性…...

高并发内存池项目介绍
💓博主CSDN主页:Am心若依旧409-CSDN博客💓 ⏩专栏分类:项目记录_⏪ 🚚代码仓库:青酒余成 🚚 🌹关注我🫵带你学习C 🔝🔝 1.前言 在经历一年多左右的时间…...

PHP会务会议系统小程序源码
📅 会务会议系统 一款基于ThinkPHPUniapp框架,精心雕琢的会议管理微信小程序,专为各类高端会议场景量身打造。它犹如一把开启智慧殿堂的金钥匙,为会议流程优化、开支精细化管理、数量精准控制、标准严格设定以及供应商严格筛选等…...

Java中的常用类 --String
学习目标 掌握String常用方法掌握StringBuilder、StringBuffer了解正则 1.String ● String是JDK中提前定义好的类型 其所在的包是java.lang ,String翻译过来表示字符串类型,也就是说String类中已经提前定义好了很多方法都是用来处理字符串的,所以Str…...

PWM(脉宽调制)技术详解:从基础到应用实践示例
PWM(脉宽调制)技术详解:从基础到应用实践示例 目录 PWM(脉宽调制)技术详解:从基础到应用实践示例学前思考:一、PWM概述二、PWM的基本原理三、PWM的应用场景四、PWM的硬件配置与使用五、PWM的编程…...
Hutool - DB 连接池配置集成
在实际开发中,尤其是在高并发场景下,使用连接池来管理数据库连接是非常必要的,它可以显著提高数据库操作的性能和效率。Hutool - DB 支持集成多种常见的连接池,如 HikariCP、Druid 等。下面分别介绍如何将这两种连接池集成到 Huto…...

激光工控机在自动化生产线中有什么关键作用?
激光工控机作为自动化生产线的核心设备,通过高精度控制、快速响应和智能化集成,在提升效率、保障质量、实现柔性制造等方面发挥着不可替代的作用。以下是其关键作用的具体分析: 一、实现高效连续生产: 1.高速加工能力࿱…...

Visual Studio Code的下载安装与汉化
1.下载安装 Visual Studio Code的下载安装十分简单,在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了...

nlp|微调大语言模型初探索(3),qlora微调deepseek记录
前言 上篇文章记录了使用lora微调llama-1b,微调成功,但是微调llama-8b显存爆炸,这次尝试使用qlora来尝试微调参数体量更大的大语言模型,看看64G显存的极限在哪里。 1.Why QLora? QLoRA 在模型加载阶段通过 4-bit 量化大幅减少了模型权重的显存占用。QLoRA 通过 反量化到 …...
【全栈】SprintBoot+vue3迷你商城-细节解析(1):Token、Jwt令牌、Redis、ThreadLocal变量
【全栈】SprintBootvue3迷你商城-细节解析(1):Token、Jwt令牌、Redis、ThreadLocal变量 往期的文章都在这里啦,大家有兴趣可以看一下 后端部分: 【全栈】SprintBootvue3迷你商城(1) 【全栈】…...

基于ffmpeg+openGL ES实现的视频编辑工具(一)
在深入钻研音视频编辑开发这片技术海洋时,相信不少开发者都和我有同样的感受:网络上关于音视频编辑工具实现的资料繁多,理论阐释细致入微,代码片段也随处可见。然而,一个显著的缺憾是,缺乏一个完整成型的 A…...
面试完整回答:SQL 分页查询中 limit 500000,10和 limit 10 速度一样快吗?
首先:在 SQL 分页查询中,LIMIT 500000, 10 和 LIMIT 10 的速度不会一样快,以下是原因和优化建议: 性能差异的原因 LIMIT 10: 只需要扫描前 10 条记录,然后返回结果。 性能非常高,因为数据库只…...

Linux系统管理(十六)——通过WSL配置windows下的Linux系统(可视化界面与远程连接)
前言 WSL,即Windows Subsystem for Linux,是微软在Windows 10和Windows 11中引入的功能,允许用户在Windows上原生运行Linux的命令行工具和应用程序,无需启动完整的Linux虚拟机或进行双系统启动。 开启WSL服务 开启虚拟化 进入…...
【RabbitMQ业务幂等设计】RabbitMQ消息是幂等的吗?
在分布式系统中,RabbitMQ 自身不直接提供消息幂等性保障机制,但可通过业务逻辑设计和技术组合实现消息处理的幂等性。以下是 8 种核心实现方案及最佳实践: 一、消息唯一标识符 (Message Deduplication) 原理 每条消息携带全局唯一IDÿ…...

flutter在安卓模拟器上运行
目录 下载android studio,然后把其中的模拟器设为环境变量,然后在vscode/cursor中使用插件,打开安卓模拟器一、下载android studio网址mac 下载64位 ARM 二、启动android studio三、设置SDK四、打开文件 打开模拟器五、运行程序六、在vscode/…...
linux shell 当命令执行出现错误立即退出的方法
在 Linux 脚本中,如果你想在整个脚本执行完毕后检查是否有错误发生,可以通过以下几种方式实现: 1. 使用 $? 检查上一条命令的退出状态 每个命令执行后,Shell 会将其退出状态存储在特殊变量 $? 中。$? 的值为 0 表示成功&#…...
与本地电脑PDF文档对话的PDF问答程序
文章目录 PDF问答程序程序流程处理PDF文档创建问答链 在探索和学习新技术时,了解LangChain框架的理论知识固然重要,但实际的案例分析与实践尝试能为你提供更加直观的认识和更深人的理解。本文主要以解析案例代码为主。通过具体的实践操作,你可…...

QT之改变鼠标样式
QT改变鼠标图片 资源路径如下 代码实现 QPixmap customCursorPixmap(":/images/mouse.png");QCursor customCursor(customCursorPixmap);QWidget::setCursor(customCursor); // 可以设置为整个窗口或特定控件QWidget::setCursor(); // 设置为透明光标,…...

后端开发:开启技术世界的新大门
在互联网的广阔天地中,后端开发宛如一座大厦的基石,虽不直接与用户 “面对面” 交流,却默默地支撑着整个互联网产品的稳定运行。它是服务器端编程的核心领域,负责处理数据、执行业务逻辑以及与数据库和其他后端服务进行交互。在当…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...