QT中OpenGL学习笔记1

官方学习地址
Qt主要有两种主要的UI开发方法:QtQuick 和Qt Widgets,它们的存在是为了支持不同类型的用户界面,并建立在针对每种类型进行了优化的单独图形引擎之上,可将OpenGL图形API中编码与这两种用户界面类型相结合创造出渲染后的界面;
使用模块:需要直接或通过其他依赖项链接到模块库,一些构建工具对此提供了专门的支持,例如CMake和qmake:
**使用CMake构建:**使用以下命令在包中找到所需模块组件:find_package()Qt6

find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)

使用qmake构建:在工程中.pro文件中加入:

QT += opengl

现对QT示例中手动旋转带纹理的骰子进行分析:
展示了如何使用带有 Qt 的 OpenGL ES 2.0 手动旋转带有用户输入的纹理 3D 立方体。它展示了如何有效地处理多边形几何体,以及如何为可编程图形管道编写简单的顶点和片段着色器。此外,它还演示如何使用四元数来表示 3D 对象方向。

此示例是为 OpenGL ES 2.0 编写的,但它也适用于桌面 OpenGL,因为此示例足够简单,并且在大多数情况下,桌面 OpenGL API 是相同的。它也会在不支持 OpenGL 的情况下进行编译,但随后它只显示一个标签,说明需要 OpenGL 支持。

该示例由两个类组成:MainWidget扩展并包含OpenGL ES 2.0初始化和绘图以及鼠标和计时器事件处理;
GeometryEngine处理多边形几何图形,将多边形几何体传输到顶点缓冲区对象,并从顶点缓冲区对象绘制几何体;

QOpenGLShaderProgram program;//QOpenGLShaderProgram 是Qt中用于处理OpenGL着色器程序的类,它提供了一种方便的方式来编译、链接和使用顶点和片段着色器。使用这个类,开发者可以简化着色器的管理过程,避免直接处理底层的OpenGL调用。
void MainWidget::initShaders()
{
   
    // 编译顶点着色器
    if (!program.addShaderFromSourceFile(QOpenGLShader::Vertex, ":/vshader.glsl"))
        close();

    // 编译片段着色器
    if (!program.addShaderFromSourceFile(QOpenGLShader::Fragment, ":/fshader.glsl"))
        close();

    // 链接着色器管道
    if (!program.link())
        close();

    // 绑定着色器管道以供使用
    if (!program.bind())
        close();
}
QOpenGLTexture *texture;//实现将纹理加载到OpenGL纹理的方法
void MainWidget::initTextures()
{
   
    // 加载 cube.png 图片
    texture = new QOpenGLTexture(QImage(":/cube.png").mirrored()

你可能感兴趣的:(qt,c++,opengl,学习笔记)