QT OPENGL 入门教程 基于QOpenGLWidget 使用缓存绘制多边形

QT与OpenGL之绘图 在之前说道过VS2010中配合OpenGL绘图的问题,这回是想要说说在QT中使用OpenGL,其实两者并无太大区别,因为都是基于C++语言的。 主要是想简要介绍下OpenGL在QT中的使用方法跟一些错误。 glwidget.h  //继承自QGLWidget,用来实现OpenGL相关的操作以及绘图操作 #ifndef GLWIDGET_H #define GLWIDGET_H #inc 阅读详情

QT OPENGL 入门教程 基于 QOpenGLWidget 使用缓存绘制多边形

//myopenglwidget.h
#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H
 
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLBuffer>
 
class QOpenGLShaderProgram;
 
class MyOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT
 
public:
    explicit MyOpenGLWidget(QWidget *parent = 0);
 
protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);
 
private:
    QOpenGLShaderProgram *program;
    QOpenGLBuffer vbo;
};
 
#endif // MYOPENGLWIDGET_H
 
//myopenglwidget.cpp
#include "myopenglwidget.h"
#include <QOpenGLShaderProgram>
 
MyOpenGLWidget::MyOpenGLWidget(QWidget *parent)
    : QOpenGLWidget(parent)
{
}
 
void MyOpenGLWidget::initializeGL()
{
    // 为当前环境初始化OpenGL函数
    initializeOpenGLFunctions();
 
    // 创建顶点着色器
    QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
    const char *vsrc =
            "in vec4 vPosition;                        \n"
            "void main() {                             \n"
            "   gl_Position = vPosition;               \n"
            "}                                         \n";
    vshader->compileSourceCode(vsrc);
    // 创建片段着色器
    QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this);
    const char *fsrc =
            "void main() {                              \n"
            "   gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n"
            "}                                          \n";
    fshader->compileSourceCode(fsrc);
 
    // 创建着色器程序
    program = new QOpenGLShaderProgram;
    program->addShader(vshader);
    program->addShader(fshader);
 
    program->link();
    program->bind();
}
 
void MyOpenGLWidget::resizeGL(int , int )
{  
}
 
void MyOpenGLWidget::paintGL()
{
    int w = width();
    int h = height();
    int side = qMin(w, h);
    glViewport((w - side) / 2, (h - side) / 2, side, side);
 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
    // 顶点位置
    GLfloat vertices[] = {
        -0.8f, 0.8f,
        -0.8f, -0.8f,
        0.8f, -0.8f,
        0.8f, 0.8f
    };
 
    vbo.create();
    vbo.bind();
    vbo.allocate(vertices, 8*sizeof(GLfloat));
 
    GLuint vPosition = program->attributeLocation("vPosition");
    //为着色器中的位置设定顶点缓存
    program->setAttributeBuffer(vPosition, GL_FLOAT, 0, 2, 0);
    //启用定点数组
    glEnableVertexAttribArray(vPosition);
 
    // 绘制
    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}
 
 
 
//main.cpp
#include <QApplication>
#include "myopenglwidget.h"
 
int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    MyOpenGLWidget w;
    w.resize(400, 300);
    w.show();
    return app.exec();
}

转载自:
QT OPENGL 入门教程之三 基于QOPENGLWIDGET 使用缓存绘制多边形
hhttps://blog.youkuaiyun.com/p942005405/article/details/103739823

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

相关推荐

从原理到像素:我是如何用C++和Qt从头实现一个可交互的CIE1931色度图绘制引擎的

本文详细介绍了如何使用C++和Qt框架从头实现一个可交互的CIE1931色度图绘制引擎。从核心数学原理到工程实践,涵盖了色品坐标转换、色域边界处理、颜色插值优化以及Qt渲染管线深度优化等关键技术点,最终实现了一个轻量级、高性能的跨平台解决方案。

weixin_30239339的博客 651

QOpenGLWidget类讲解

QOpenGLWidget类detailed description QOpenGLWidget类是用于渲染OpenGL图形。 除了可以选择使用QPainter和标准的OpenGL渲染图形,QOpenGLWidget类提供了在Qt应用程序中显示OpenGL图形的功能。它使用起来非常简单:新建类继承于QOpenGLWidget,使用方法就像继承于QWidget类子类一样。 QOpenGLWid...

苦茶Fighting的博客 3万+

C++与OpenGL构建2D瓦片地图引擎:从原理到高性能渲染实战

瓦片地图技术是现代地理信息系统和游戏开发中处理大规模空间数据的核心方案,其原理是将地图按不同缩放级别切割成标准尺寸的图片单元进行组织与调度。通过坐标投影与层级索引机制,系统能动态计算视口范围所需的瓦片,实现地图的快速加载与无缝浏览。在工程实践中,采用C++与OpenGL的组合能充分发挥底层硬件性能,利用GPU并行计算与显存直接操作的优势,构建高效渲染管线。结合QT框架的异步网络模块与跨平台能力,可搭建包含多级缓存、请求队列和纹理管理的完整数据流水线。本文聚焦于瓦片地图引擎的架构设计,详解如何通过OpenGL

csdndownload11123的博客 398

QT QOpenGLWidget使用说明(一)OpenGL 类的添加

QT QOpenGLWidget使用说明(一)OpenGL 类的添加

qq_30150579的博客 5139

QT实现股票趋势图

QT实现股票趋势图

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3533

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 392

Qt OPenGL 入门教程之三 基于QOpenGLWidget 使用缓存绘制多边形

上一教程我们应用glVertexAttribPointer绘制多边形,这一节,我们通过使用缓存 基础知识: 和上一节的区别, //myopenglwidget.h #ifndef MYOPENGLWIDGET_H #define MYOPENGLWIDGET_H #include <QOpenGLWidget> #include <QOpenGLFunctions&gt...

学之知之的博客 2844

【2026-Spark实验一-Windows中安装Spark环境】

本文详细介绍了在Windows系统中配置Spark 3.5.8开发环境的完整流程。主要内容包括:安装JDK 8并配置环境变量,下载并解压Spark 3.5.8预编译版,设置SPARK_HOME系统变量,配置Hadoop的winutils工具解决Windows兼容性问题。通过spark-shell和SparkPi示例程序验证环境配置成功,确保Spark能够正常运行分布式计算任务。文中特别强调了路径命名规范、环境变量设置顺序等关键细节,提供了完整的配置截图和验证方法,帮助开发者快速搭建稳定的Spark学习环境。

pblh123的专栏 1588

OpenGL(十)——Qt OpenGL绘制多边形

上篇文章介绍了如何创建一个Qt下的第一个OpenGL程序,代码只是实现了几个重载的函数,但是并未绘制任何东西,这边文章介绍绘制多边形。本文原创作者冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。在很早之前的文章,使用VS2010工具也编写过,使用OpenGL创建多边形。在Qt下同样的也是使用这样的代码进行绘制。看一下,运行的效果。.........

ifeng12358的博客 4114

MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息

App Designer 中的文本区域TextArea组件,一般可以用来作为matlab app设计中的信息显示。 app.TextArea.Value = 'Hello Matlab'; Value可以是字符向量、字符向量元胞数组、字符串数组或一维分类数组。这样直接给TextArea赋值,每次赋值都会消除先前的信息,然后显示新的信息。如果想要在app实现保留原有信息、多行信息的输出,在MathWorks官方帮助中心给出了一种方法: cellArrayText{1} = sprintf('%s\n

我是麻瓜喔的博客 1万+

vhr 微人事系统安装与部署教程(SpringBoot + Vue 项目实战)

vhr(微人事)是一个开源的人力资源管理系统项目。系统采用前后端分离架构,主要技术栈包括:后端:MyBatis前端:VueElement UIAxios数据库:MySQL系统通常包含以下模块:员工管理部门管理职位管理薪资管理权限管理系统管理整体功能已经接近企业级后台系统。vhr(微人事)是一个非常经典的开源人力资源管理系统项目,基于SpringBoot + Vue 前后端分离架构。系统包含:员工管理部门管理权限管理薪资管理。

m0_69484557的博客 487

OpenGL(九)——Qt OpenGL创建一个OpenGL的窗口

这个函数的作用是重新设置OpenGL场景的大小,而不管窗口的大小是否已经改变(假定您没有使用全屏模式)。,上一篇介绍了在Qt的OpenGL实现一个旋转的多边形,是以前学习Qt下OpenGL,参考的NeHe的教程实现的,所以,接下来还是把之前学习的NeHe教程也一起贴出来吧,与小伙伴们一起分享、交流。*如果您对OpenGL已经有所了解的话,您可以在glLoadIdentity()调用之后,函数返回之前,试着添加一些OpenGL代码来创建基本的形。以后的每个教程中我都会在例程的此处增加新的代码。........

ifeng12358的博客 1925

智能座舱SoC平台横评:SA8155P、SA8255P、SA8295P、MT8678、MT8628 谁是下代车机首选?

高通SA8295P以PC级架构、强悍AI算力,代表安卓阵营迈向“本地大模型+空间计算”阶段;联发科MT8678则凭借低功耗 + 高带宽,成为副驾多媒体/副屏智能化的性价比之王。在座舱设计中,SoC平台决定了你能给用户什么样的交互方式,选型时切忌只看跑分,而要回归“体验-热设计-平台生态”的三角平衡。

weixin_43199439的博客 3358

OPenGL笔记--多边形旋转

Qt是一个跨平台的C++应用程序开发框架,提供了丰富的GUI和应用程序开发工具。Qt的OpenGL模块可以让开发者在Qt应用程序中轻松地使用OpenGL进行硬件加速的图形渲染。Qt的OpenGL模块提供了一组类和函数,用于管理OpenGL上下文、渲染OpenGL图形、处理OpenGL事件等。其中最重要的类是QOpenGLWidget,它是一个Qt小部件,可以在Qt应用程序中嵌入OpenGL场景。

hw5230的博客 1056

从0到1:用Claude 3.7十日拿下教育部课题申报书(附可修改LaTeX模板)

🟣"作为教育部人文社科项目评审专家,请根据近三年立项数据分析,为[您的学科方向]领域推荐5个具有创新性且符合'十四五'规划的重点选题,要求选题体现交叉学科特征,并标注潜在理论突破点"🟣"根据前期研究基础,创建包含4个研究模块、12个关键节点的三维技术路线图,要求体现实验仿真-实证研究-理论建模的螺旋递进关系,并标注每个节点的预期成果形态"🟣"现在切换至教育部学科评审组组长模式,从选题价值、创新程度、研究可行性三个维度对本申报书进行盲审,生成包含9个扣分风险点的诊断报告及修改优先级排序"

智能AI让学术科研更容易 545

046篇:数据统计:分组、求和、平均值、最大最小值

本文介绍了在RPA中实现数据分组统计的方法。通过字典+循环组合,可以完成按单字段或多字段的分组聚合操作,包括求和、计数、求平均值及最大/最小值等。文章详细讲解了分组统计的原理,并提供了单级分组、多级分组的具体实现步骤,最后通过销售数据按月分组的实战案例,演示了如何从原始数据到生成汇总报表的完整流程。这些方法可以灵活应用于各类数据统计分析场景。

weixin_59649563的博客 214

QT QOpenGL详细简介和案例

编译过程可能出现类似这样的错误:opengltest.obj:-1: error: LNK2019: 无法解析的外部符号 __imp__glBegin@4,该符号在函数 "protected: virtual void __thiscall OpenglTest::paintGL(void)" (?OpenGL 是windows自带的一个库,包含了一系列可以操作图形、图像的函数。用于开始绘制图形的一个函数,它标志着图形的顶点数据的开始。:一个按位的组合,指定要清除的缓存区。设置当前绘制颜色的函数。

ITOfDragon的博客 1148

华南理工大学-大学物理实验-不良导体热导率测量

不良导体热导率测量 引言 导热系数(又叫热导率)是反映材料热性能的重要物理量。热传导是热交换的三种(热传导、对流和辐射)基本形式之一,是工程热物理、材料科学、固体物理及能源、环保等各个研究领域的课题。材料的导热机理在很大程度上取决于它的微观结构,热量的传递依靠原子、分子围绕平衡位置的振动以及自由电子的迁移。在金属中电子流起支配作用,在绝缘体和大部分半导体中则以晶格振动起主导作用。因此,某种材料的导热系数不仅与构成材料的物质种类密切相关,而且还与材料的微观结构、温度、压力及杂质含量相联系。在科学实验和工程设计

mohen_777的博客 873

OpenGL学习笔记四(多边形)

QT中的OpenGL之多变形 QT中的OpenGL OpenGL点线绘制 OpenGL多边形绘制 在QT中的OpenGL模块中,使用OpenGL是比较简单的,只需要在你创建的项目中添加 QOpenGLWidget 和QOpenGLFunctions就可以使用OpenGL基本上所有的功能。 #include &lt;QOpenGLWidget&gt; #include &lt;QOpe...

Love柒的博客 678

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Qt + OpenGL 教程(五):立方体

与多边形同理。 我的这个代码加入了旋转的代码,旋转的几种方法在下一节解释。 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <GL/gl.h> #include <GL/glu.h> #include <QGLWidget>//这个...

heibaigezi的博客 1450

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

学习QT opengl 多边形

环境 解释 代码 运行结果 环境 qt creator 5.6 解释 代码 pro #------------------------------------------------- # # Project created by QtCreator 2018-06-08T08:01:36 # #---------------------------------...

sun 620

Qt创建一个OpenGL窗口

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多同志~ 一直以来想结合Qt学习OpenGL,但是自己查了一些资料后还是比较困惑,最近在网上找到了两个资料链接,一个是NeHe的教程,相对来讲旧一些;另一个是https://learnopengl.com/。我的目的是在Qt开发过程中,如果需要用到OpenGL相关的三维模型开发,可以快速上手,所以我选择的是用Q...

Pou光明的博客 1420

opengl 矩阵投影代码 shade_Qt创建一个OpenGL窗口

如果对你有帮助,请点个赞! 如需完整工程,请关注: Pou光明一直以来想结合Qt学习OpenGL,但是自己查了一些资料后还是比较困惑,最近在网上找到了两个资料链接,一个是NeHe的教程,相对来讲旧一些;另一个是https://learnopengl.com/。我的目的是在Qt开发过程中,如果需要用到OpenGL相关的三维模型开发,可以快速上手,所以我选择的是用Qt比较新的版本自己做一遍。至于内...

weixin_39640849的博客 217

3D绘图

本篇主要讲解在Qt应用程序中进行3D绘图的一些最基本应用,并不会有很深入的探讨。一、使用OpenGL绘制图形介绍QOpenGLWidget类是一个用来渲染OpenGL图形的部件,它提供了在Qt应用程序中显示OpenGL图形的功能。这个类需要通过继承来进行使用,方法和使用其他QWidget部件一样来使用它即可。(PS:OpenGL是一个跨平台的用来渲染3d图形的标准API,以我的理解来看就是QtWi...

Joecey_lv的博客 649

Qt QPainter 完全指南:从画线到绘制复杂图形

本文介绍了Qt中QPainter的核心原理与应用实践。QPainter作为Qt的2D绘图引擎,采用画家模型设计,通过状态机管理绘制属性,支持坐标变换、裁剪、混合模式等高级功能。文章详细解析了QPainter的绘制流程、坐标系统、基本图形绘制方法(线条、矩形、文本等),以及QPainterPath、Transform等高级特性。同时深入剖析了Qt绘图系统的三层架构(QPainter-QPaintDevice-QPaintEngine)和双缓冲机制。最后通过一个完整的仪表盘控件示例,展示了如何利用QPainte

红军不怕远征难,万水千山只等闲 658

Qt下的OpenGL 编程(6)混合、雾、抗锯齿

一、提要 混合:对颜色进行混合,实现像“半透明”一样的效果。 抗锯齿:使直线和多边形的锯齿状边缘变得平滑。 雾:创建具有大气效果的场景。 二、混合 混合的最终效果是使场景看上去像是半透明的。 一个通俗的方式来解释混合的话,例如透过绿色的玻璃观察一个物体,我们看到的颜色部分来自于玻璃的绿色,部分来自于 物体的颜色。这两种颜色所占

时间在哪 成就就在哪 1788
上一篇: windows 使用 VS2017 msvc 命令行编译qt程序
下一篇: C++ 使用 STL 库判断是文件夹还是文件并实现文件复制
EchoCoder
博客等级 码龄16年 25粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值