Qt5+OpenGL 实现彩色正方体显示、缩放、旋转和拖拽平移

随手记录Qt学习开发过程中遇到的问题和解决方法

环境:Qt5.12.9 QtCreator4.12.2 MinGW7.3.0

考虑采用OpenGL固定管线绘制图像效率低下,一直想学习采用OpenGL ES的方式进行图像绘制,网上这方面的可参考资料不够丰富, 自己OpenGL的基础又十分欠缺,完全是在一步步自己摸索着学习的。建议跟我一样对OpenGL本身基础就差的同志们,先到https://learnopengl-cn.github.io/这个网站上自学一下,尤其是从“入门→你好,三角形”这部分开始,讲得真的非常清楚,一定要耐心学习。

不废话了,下面就进入正题,把我实现彩色立方体的程序记录一下。

1、首先贴上glsl代码
先是顶点着色器的部分,后是片段着色器的部分。

const char *vshader_code =
        "uniform mat4 mvp_matrix;                 \n"
        "attribute vec4 vPosition;                \n"
        "attribute vec3 aColor;                   \n"
        "varying vec3 vColor;                     \n"
        "void main()                              \n"
        "{                                        \n"
        "    gl_Position = mvp_matrix * vPosition; \n"
        "    vColor = aColor;                     \n"
        "}                                        \n";

const char *fshader_code =
        "varying vec3 vColor;                     \n"
        "void main()                              \n"
        "{                                        \n"
        "    gl_FragColor = vec4(vColor,1.0f);    \n"
        "}   

因为这部分代码量太小了,所以没有单独存成glsl文件。这部分内容就不做详细介绍了,不清楚的浏览我上面写的网站进行学习。

2、彩色立方体定义部分代码

#include "cubegeometry.h"

CubeGeometry::CubeGeometry():QOpenGLFunctions()
    , indexBuf(QOpenGLBuffer::IndexBuffer)
{
   
    initializeOpenGLFunctions();
    this->arrayBuf.create();
    this->indexBuf.create();
    initCubeGeometry();
}

CubeGeometry::~CubeGeometry()
{
   
    this->arrayBuf.destroy();
    this->indexBuf.destroy();
}

void CubeGeometry::drawCubeGeometry(QOpenGLShaderProgram *program)
{
   
    this->arrayBuf.bind();
    this->indexBuf.bind();

    quintptr offset = 0;

    // Tell OpenGL programmable pipeline how to locate vertex position data
    int vPos = program->attributeLocation("vPosition");
    program->enableAttributeArray(vPos);
    program->setAttributeBuffer(vPos, GL_FLOAT, offset, 3, sizeof(VertexData));

    // Offset for texture coordinate
    offset += sizeof(QVector3D);

    // Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
    int aColor = program->attributeLocation("aColor");
    program->enableAttributeArray(aColor);
    program->setAttributeBuffer(aColor, GL_FLOAT, offset, 3, sizeof(VertexData));

    glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);
}

void CubeGeometry::initCubeGeometry()
{
   
    //一个正方体有八个顶点,分别对顶点位置和顶点颜色进行定义
    VertexData vertices[] = {
   
        {
   QVector3D( 1.0f,  1.0f,  1.0f), QVector3D(1.0f, 0.0f, 0.0f)},  // v0, a-red
        {
   QVector3D(-1.0f,  1.0f,  1.0f), QVector3D(1.0f, 0.5f, 0.0f)},  // v1, b-orange
        {
   QVector3D(-1.0f, -1.0f,  1.0f), QVector3D(1.0f, 1.0f, 0.0f)},  // v2, c-yellow
        {
   QVector3D( 1.0f, -1.0f,  1.0f), QVector3D(0.0f, 1.0f, 0.0f)},  // v3, d-green
        {
   QVector3D( 1.0f,  1.0f, -1.0f), QVector3D(0.0f, 1.0f, 1.0f)},  // v4, e-sky
        {
   QVector3D(-1.0f,  1.0f, -1.0f), QVector3D(0.0f, 0.0f, 1.0f)},  // v5, f-blue
        {
   QVector3D(-1.0f, -1.0f, -1.0f), QVector3D(0.5f, 0.0f, 1.0f)},  // v6, g-purple
        {
   QVector3D(<
  • 9
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
### 回答1: Qt 是一款跨平台应用程序开发框架,它提供了丰富的功能和工具来简化应用程序的开发。OpenGL 是一种图形渲染库,用于创建高性能的2D和3D图形效果。那么,QtOpenGL 的结合能够为开发者提供强大的图形处理能力和丰富的用户界面设计功能。 在学习使用 QtOpenGL 进行应用程序开发时,书籍是非常有帮助的资源。下面是一些关于 QtOpenGL 的书籍推荐: 1.《Qt5 权威指南》:这本书全面介绍了 Qt 的各个方面,包括 Qt 的基础知识、GUI 编程、网络编程、数据库编程等内容,对初学者来说非常友好。同时,书中还有一章专门介绍了如何在 Qt 中使用 OpenGL 进行图形绘制。 2.《Qt5OpenGL 高级编程指南》:这本书着重介绍了 Qt5OpenGL 的结合应用,涵盖了 OpenGL 基础知识、渲染管线、光照、纹理、阴影等高级图形技术。它适合有一定编程经验且对图形编程有兴趣的开发者。 3.《OpenGL编程指南(第九版)》:虽然这本书不是专门讲解 Qt,但是它是学习 OpenGL 必备的经典教材之一。它详细介绍了 OpenGL 的基础知识和相关概念,包括顶点缓冲对象、渲染缓冲区、着色器编程等内容。通过学习这本书,开发者可以更加深入地理解 OpenGL 的工作原理。 以上是一些关于 QtOpenGL 的书籍推荐,选择适合自己水平和需求的书籍进行学习,可以帮助我们更好地掌握 QtOpenGL 的开发技巧,进而开发出功能丰富且高性能的应用程序。 ### 回答2: Qt是一种跨平台的应用程序开发框架,它提供了丰富的GUI界面设计工具和功能强大的库,可以帮助开发者轻松地开发出高质量的图形界面应用程序。而OpenGL是一种专门用于图形渲染的API,可以实现高性能、高质量的图形渲染效果。 在Qt中使用OpenGL可以帮助开发者更好地利用硬件加速来实现图形渲染,提高程序的性能和效果。因此,学习QtOpenGL的结合使用对于想要开发高质量图形应用程序的开发者来说是非常有价值的。 关于QtOpenGL的书籍,市面上有很多优秀的选择。其中,一本非常经典的书籍是《Qt5OpenGL开发实战指南》。这本书适合有Qt基础并对OpenGL感兴趣的开发者。书中介绍了使用QtOpenGL进行图形编程的基本原理和技巧,并通过丰富的实例演示了如何使用QtOpenGL实现各种图形效果和交互特性。 除了这本书之外,还有一些其他的书籍也值得推荐。例如,《OpenGL编程指南》是一本经典的OpenGL入门书籍,可以帮助开发者深入理解OpenGL的基本原理和使用方法。《Qt5开发及实例精解》是一本全面介绍Qt开发的书籍,其中也包含了一些关于QtOpenGL结合使用的内容。 总之,选择适合自己的QtOpenGL书籍,可以帮助开发者更好地掌握QtOpenGL的基本知识和技术,从而开发出更加高效、高质量的图形应用程序。 ### 回答3: Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的图形界面和功能库,可以帮助开发者快速地构建高质量的应用程序。OpenGL则是一个用于图形渲染的开放标准,通过与Qt结合使用,可以实现更高级的图形效果和游戏开发。 对于想深入学习QtOpenGL的开发者来说,有一些经典的书籍可以提供帮助。首先推荐《Qt编程开发实战》一书,该书详细介绍了Qt的基本概念和常用功能,让读者能够快速入门。接下来,可以阅读《QtOpenGL开发指南》,该书介绍了如何使用QtOpenGL创建高级图形应用程序,并深入解析了底层原理和技术细节。此外,《OpenGL超级宝典》是一本非常经典的OpenGL入门书籍,其中包含了许多实用的代码示例和案例讲解,对于理解OpenGL的基本原理和使用方法非常有帮助。 除了这些书籍,互联网上也有许多免费的教程和博客可以供开发者参考,例如《Qt官方文档》和《OpenGL教程》等。此外,参加一些相关的培训课程或者在线教育平台提供的课程,也是学习QtOpenGL的有效途径。最重要的是,实践是学习的关键,通过动手实践一些小项目,可以帮助开发者更好地理解和应用所学知识。 总的来说,QtOpenGL是非常强大的开发工具,在学习过程中可以参考一些经典的书籍和在线资源,结合实践经验,迅速掌握它们的使用方法和技巧。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CathleenMouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值