Qt5.12 + OpenGL 着色器

QT5+OpenGL es2 + eglfs交叉编译安装(RK3399) 最近由于项目的需要,需要在aarch64 Ubuntu16.04中安装QT5,本来系统中自带了一个qt5,奈何项目要求必须是qt5.12的版本并且需要包含opengl和eglfs的库,所以只能重新移植QT5.12到开发板中,下面把移植过程记录下。 下载QT5源码 下载地址:https://download.qt.io/archive/qt/ 找到自己需要的版本进行下载。 图中标出来的就是源码下载链接。随便下载哪一个都行。下载后放入ubuntu(我用的Ubuntu 16.04)系统中进行解压。 解压 阅读详情

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~

原教程地址:

https://learnopengl-cn.github.io/01%20Getting%20started/05%20Shaders/

 

一、 着色器概述

从基本意义上来讲,着色器只是一种把输入转化为输出的程序。它们之间唯一的“通讯”方式只有通过输入和输出来实现。

着色器是使用一种叫GLSL的类C语言写成的,GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。

 

1. 输入与输出

顶点着色器中定义一个输出,在片段着色器中定义输入来接收这个输出。

顶点着色器:

 out vec4 vertexColor;  // 为片段着色器指定一个颜色输出

片段着色器:

in vec4 vertexColor;    // 从顶点着色器传来的输入变量(名称相同、类型相同)

 

就是红色三角形的例子!

 

2. Uniform 数据发送方式

Uniform是一种从CPU中的应用向GPU中的着色器发送数据的方式,但uniform和顶点属性有些不同。

首先,uniform是全局的(Global)。第二,无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新。

 

为了实现例程中的效果,我使用了QObject自带的定时器事件,并使用Qt update()函数来更新绘图。

程序例子:

//使用uniform的片段着色器
static const char *fragmentShaderSourceUniform =
        "#version 330 core\n"
        "out vec4 FragColor;\n"
        "uniform vec4 ourColor;\n"                        // 在OpenGL程序代码中设定这个变量
        "void main(){\n"
        "   FragColor = ourColor;\n"
        "}\n\0";

paintGL中更新Uniform :

#ifdef COLORCHANGE
    // 更新uniform颜色
    float greenValue = sin(m_timeout) / 2.0f + 0.5f;
    int vertexColorLocation = m_core->glGetUniformLocation(m_shaderProgram, "ourColor");
    m_core->glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);
#elif MULTICOLOR


#endif

定时器更新计数:

void MyGLWidget::timerEvent(QTimerEvent *e)
{
    Q_UNUSED(e);


    if(m_timeout >= 1.0)
    {
        m_timeout = -1.0;
    }


    m_timeout = m_timeout + 0.05;


    update();
}

效果视频:

三角形颜色渐变:

矩形颜色渐变:

3. 顶点属性传递颜色

 GLfloat vertices[] = {
        // 位置              // 颜色
            0.5f, -0.5f, 0.0f,  1.0f, 0.0f, 0.0f,   // 右下
           -0.5f, -0.5f, 0.0f,  0.0f, 1.0f, 0.0f,   // 左下
            0.0f,  0.5f, 0.0f,  0.0f, 0.0f, 1.0f    // 顶部
};


m_core->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), nullptr);
m_core->glEnableVertexAttribArray(0);        //以顶点属性位置值作为参数,启用顶点属性;顶点属性默认是禁用的
m_core->glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)(3* sizeof(float)));
m_core->glEnableVertexAttribArray(1);        //以顶点属性位置值作为参数,启用顶点属性;顶点属性默认是禁用的

效果图:

二、 总结

1、 小结

原教程中主要介绍了着色器的语法,改变颜色的三种方式。不同着色器间的输入输出、全局变量Uniform的使用、在顶点属性中设置颜色等。

最后,如需完整工程可在公众号后台留言

学不可以已

海思3559A QT 5.12移植(带webengine 和 opengl es) 海思SDK版本:Hi3559AV100_SDK_V2.0.1.0 编译器版本:aarch64-himix100-linux-gcc 6.3.0(这个版本有点小问题,使用前需要先清除本地化设置) $ export LANG=C 编译器默认安装到了/opt/hisi-linux/x86-arm/aarch64-himix100-linu目录下。 首先,对编译器做一点小改动。 将... 阅读详情

相关推荐

Qt+OpenGL基础教程

基于Qt与OpenGL的UR3机械臂仿真与控制程序的先行文,介绍了如何画出一个可以变换视角的坐标系。

mai0026的博客 1万+

使用qt5.12中的opengl绘制一个三角形

使用qt5.12中的opengl绘制一个三角形

m0_60259116的博客 483

Qt Opengl :The shader uses varing xxx,but previous shader does not write to it. Out

1.版本介绍 (1)QT版本:QT5.12 +QT Creator 4.8 (2)编译器版本:windows msvc2017 32bit / 64bit 2.问题描述 QOpenGLShaderProgram::uniformLocation(model): shader program is not linked QOpenGLShaderProgram::uniformLocation(view): shader program is not linked QOpenGLShaderProgram::

dsn3S的博客 692

Qt中使用OpenGL的三种方式

3. 继承QOpenGLWidget 与QOpenGLExtraFunctions。2. 继承QOpenGLFunctions类可直接使用OPENGL函数。通过使用QOpenGLContext来操作OPENGL函数。1.继承QOpenGLWidget并重写基类如下函数。在OPENGL中使用Shader。直接使用OPENGL函数。

7360

QT5.12 Ui界面开发项目:QOpenGLShaderProgram::uniformLocation(model): shader program is not linked

1. 版本介绍: (1)QT版本:QT5.12 +QT Creator 4.8 (2)编译器版本:windows msvc2017 32bit / 64bit 2. 问题描述: QOpenGLShaderProgram::uniformLocation(model): shader program is not linked QOpenGLShaderProgram::uniformLocation(view): shader program is not linked QOpenGLShaderProgr

dsn3S的博客 2997

Qt+OpenGL实现交互式3D地球模型:从网格生成到纹理贴图实战

三维可视化是图形学中重要的应用方向,其中球体建模和纹理映射是基础且关键的技术。通过OpenGL和Qt的组合,可以高效构建桌面端的3D交互场景。其核心原理是将球体离散化为大量三角形网格,利用经纬度生成顶点数据,再通过纹理坐标将平面地图映射到球面,配合着色器完成渲染。该技术广泛应用于科学可视化、地理信息系统、教育演示等领域。本文以3D地球模型为例,详细讲解了基于Qt的QOpenGLWidget实现球体渲染、纹理贴图、鼠标旋转缩放等完整流程,帮助读者掌握现代OpenGL渲染管线的实际应用。

weixin_42548782的博客 150

基于Qt的OpenGL(一):OpenGL理论及QOpenGLWidget

框架:OpenGL3.3、Qt 5.12.3MinGW(3.2以前是传统模式(固定管线模式-已被丢弃),3.3是现在模式(可编程管线)) 优势:安装简单,Qt已经封装好了,如GLFW和GLAD。自己有支持OpenGL的窗口。 介绍:OpenGL是Open Graphics Library的缩写,它是由Khronos组织制定并维护的一个规范。OpenGL的核心库是用C语言编写,但同时也支持多种语言的派生。 核心模式:3.3以后版本新推出的模式,也叫现在模式或可编程模式。 GPU渲染是一个流水线:比如输入一大

认真努力,做一只会飞的毛毛虫。 9465

Qt+OpenGL实战:手写3D地球渲染与交互

在可视化大屏与地理信息系统中,3D地球仪展示设备分布已成为常见需求。OpenGL作为跨平台的底层图形接口,配合Qt框架的QOpenGLWidget组件,能够高效构建可交互的球体场景。本文从球体网格生成原理出发,讲解经纬度切割法构建UV球体、地球纹理映射、OpenGL着色器渲染管线,并实现鼠标拖拽旋转与滚轮缩放交互。同时,详细阐述设备点位经纬度到三维世界坐标的转换算法,以及批量绘制与性能优化策略。针对实际开发中遇到的OpenGL上下文冲突、纹理接缝、显卡兼容性等问题,给出了排查与解决方案。文章内容融合工程实践

weixin_29091837的博客 190

基于QOpenGLWidget自适应大小更新显示图片

一直想用OpenGL来显示图像或者做视频播放器的窗口,网上找了很久,都没有Qt这方面最新的靠谱的例子,大部分都是3D模型上贴图,要不就是各种报错,或者Qt的OpenGL版本不对,自己摸索了好久,终于搞定了,是在QT5.6.3MinGW下编译的,可自适应窗口大小 部分代码如下: -----MyGLWidget.h------ #ifndef MYGLWIDGET_H #define...

逆天の诸葛博客 1万+

离线安装 nvidia-docker2(nvidia-container-toolkit)

很多时候大家都有用docker使用gpu的需求,但是因为网络等原因不是那么好用,这里留了一个给ubuntu的安装包,网络好的话也提供了在线安装方式。

father_yingying的博客 1181

射频电路设计——射频器件基础

本文仅供自己复习使用,请勿转载! 射频电路制作方法 MCM工艺 CMOS工艺 趋肤效应、深度 频率越高趋肤效应越明显 高频器件 高频电阻 绕线的比贴片的多一个电感,是因为绕线的因为是线绕制的,只有有线就会有电感,所以绕线电阻等效模型会比贴片的多一个电感 多晶硅电阻模型 深线性区MOS电阻 高频电阻的频率响应 记忆的话就后面的频率特性有点像电容的 高频电容 作用 单层贴片式电容 多层贴片式电容 MIM电容 MOM电容 由于是并联的,所以总的电容值是单个的直接相加 PN结电容 M.

输出每日所学,供大家学习使用 7150

RK3588上Qt 5.15与OpenGL ES2实战:从编译到3D渲染

OpenGL ES2是嵌入式GPU渲染的核心API,通过EGL管理上下文,在ARM平台实现硬件加速。其技术价值在于低功耗高性能图形处理,广泛应用于HMI、游戏和视频叠加。在RK3588上,结合Qt框架可快速构建3D界面。本文分享板端编译Qt 5.15.0并配置OpenGL ES2的完整流程,涵盖环境准备、源码编译、3D立方体实现及常见问题排查,助你打通嵌入式图形渲染链路。

weixin_34033624的博客 231

避坑指南:Livox Mid-360双雷达SLAM配置中,那些官方文档没说的细节(IP设置、话题分离与时间同步)

本文详细解析了Livox Mid-360双雷达SLAM配置中的关键优化点,包括IP设置、话题分离与时间同步等官方文档未提及的细节。通过实战案例和代码示例,帮助开发者解决点云错位、IMU数据混乱等问题,提升SLAM系统的稳定性和精度。特别针对网络架构设计、驱动修改和时间同步机制提供了专业指导。

weixin_29745609的博客 426

Qt OpenGL 融合开发详解:核心原理、实战代码与性能优化

Qt 对 OpenGL 的封装并非简单的函数包装,而是提供了一整套符合 Qt 对象生命周期管理习惯的类。从 QOpenGLWidget 到 QOpenGLFunctions,再到 QOpenGLShaderProgram、QOpenGLBuffer、QOpenGLVertexArrayObject 和 QOpenGLTexture,开发者几乎不需要手动管理原生 OpenGL 资源的创建与销毁,也无需为不同平台书写平台相关的上下文初始化代码。这使得 Qt OpenGL 融合开发在保持灵活性的同时,显著降低了工

油墨香^-^的博客 418

Win11内核隔离无法打开的解决方案详解

内核隔离问题的解决需遵循"先硬件后软件"的排查原则,90%以上的案例可通过驱动清理或外设断开解决。对于必须禁用该功能的用户,建议定期使用Windows Defender进行全盘扫描,并保持系统更新至最新版本。技术决策需在安全性和兼容性之间取得平衡,本文提供的多维解决方案可帮助用户构建更稳定的Windows 11使用环境。

mmoo_python的博客 4829

医疗器械软件测试输出内容(1)

*单元测试(Unit Testing):**单元测试是软件测试的最底层,用于验证软件中最小的可测试单元——函数、方法或模块。系统测试是在集成测试之后进行的,它对整个系统进行测试,验证系统在不同部分集成在一起后是否满足需求和规格。: 集成测试是在单元测试之后进行的,它关注不同单元之间的交互和集成。对于不同安全级别的软件(IEC 62304 A类、B类、C类),在体系上要求输出的文件内容有所区别。**说明:**将集成测试和软件系统测试合并为一项单一的计划和一组活动是可接收的。

ct745363083的博客 1867

qt5编程入门源码_Qt5.12+OpenGL可编程管线之创建OpenGL窗口

今天正式进入Qt5.12 + OpenGL 3.x以上可编程管线的代码部分。程序主要是参考learnopengl,更多关于OpenGL的说明也可参考他们的文章。https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/由于顶点着色器与片段着色器程序需要我们自己去实现,反而创建窗体的程序就比较少了。.h部分...

weixin_39851809的博客 249

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2354

Qt5.12+OpenGL可编程管线之创建OpenGL窗口

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~ 今天正式进入Qt5.12 + OpenGL 3.x以上可编程管线的代码部分。 程序主要是参考learnopengl,更多关于OpenGL的说明也可参考他们的文章。 https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%...

Pou光明的博客 540

PLC为西门子的S7-1200,舵机为 DS3218,PLC控制舵机旋转程序实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 999

示波器核心参数选型指南:带宽、采样率与嵌入式调试实战

示波器是电子工程师进行信号观测与故障诊断的基础仪器,其性能由带宽、采样率、通道数、存储深度、触发系统和探头特性共同决定。带宽定义高频响应边界,需遵循5倍法则以保障数字信号上升沿测量精度;采样率则依据奈奎斯特定理并结合工程冗余(通常≥2.5×带宽)实现可靠时域重建。二者协同影响信号完整性评估能力,尤其在UART、I²C、SPI等嵌入式总线调试中至关重要。高存储深度支持长时捕获与毛刺定位,智能触发与硬件协议解码进一步将波形分析升维至语义级。本文围绕真实嵌入式场景,解析参数间的耦合关系与典型误用陷阱。

weixin_42588877的博客 91

5 分钟看懂磁学模拟数据 3D 可视化:Muview2 上手指南

Mumax 模拟跑完,你手里往往是一堆不好读的 OVF 文件。Muview2 读取 Mumax 或 OOMMF 输出的磁学模拟数据,把矢量场渲染成 3D 场景,让你沿时间轴逐帧回放演化过程。 ## Muview2 在磁学模拟数据可视化中的定位 Muview2 是一个兼容 OVF v1/v2 格式的 3D 查看器,面向需要检查 Mumax 或 OOMMF 这类磁学模拟软件结果的用户,覆盖的是工作

gitblog_00895的博客 193

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

探索OpenGL的魔力:3D曲面绘制开源项目深度解读

探索OpenGL的魔力:3D曲面绘制开源项目深度解读 去发现同类优质开源项目:https://gitcode.com/ 在数字图形的世界里,OpenGL一直扮演着至关重要的角色,而今天我们要向您推荐的正是一个利用OpenGL绘制3D曲面的绝佳学习工具——一个专为视觉探索者和编程爱好者设计的开源宝藏。 项目概览 此项目是一个精巧的代码库,旨在通过OpenGL的力量展现三维世界的奇妙曲线。它不仅是一扇...

gitblog_09811的博客 792

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

QT中使用自带的OpenGL模块开发

原文:http://nehe.gamedev.net/ 翻译:https://www.cnblogs.com/arxive/p/6238969.html

qing666888的专栏 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

QT绘图高级编程 openGL篇

OpenGL简介OpenGL简介OpenGL(Open Graphics Library)是一个跨语言、跨平台的应用程序编程接口(API),主要用于开发2D及3D图形应用程序。它被广泛应用于计算机游戏、科学可视化、虚拟现实等领域。OpenGL是一个开放标准,由Khronos Group负责维护。OpenGL的历史OpenGL的历史可以追溯到1992年,当时是由SGI(Silicon Graphics Inc.)公司开发的。

QT性能优化QT原理源码QT界面美化 4499

Qt 使用openGL 渲染NV12格式的视频

直接上代码 Nv12Render.h #ifndef NV12RENDER_H #define NV12RENDER_H #include <QOpenGLFunctions> #include <QOpenGLShaderProgram> #include <QOpenGLBuffer> class Nv12Render : public...

weixin_30527551的博客 1333
上一篇: Qt5.12 + OpenGL 创建第一个多边形Core版
下一篇: 工业相机网络通讯调试
Pou光明
博客等级 码龄12年 3701粉丝 398原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值