PlayImage的OpenGL实现

基础架构

图片1

类继承

  • 继承QOpenGLWidget和QOpenGLFunctions_3_3
  • 新版本OpenGL(>2.0)从固定管线转向可编程管线

缓冲区概念

  • VBO:保存单个顶点数据(数据集)
  • VAO:保存如何使用这些VBO的数据(使用说明)

资源管理

  • 添加资源文件:通过Qt的resource系统
  • GLSL文件需要添加到资源系统中

OpenGL渲染流程类比

整个流程类似于布置电影院:

  1. 摆放设备
  2. 调整投影仪滤镜(着色器)
  3. 准备海报并裁剪(texture)
  4. 播放时绑定海报(texture.bind())
  5. 执行播放
    图片1
    图片1

着色器工作原理

着色器特点

  • 每份着色器代码只是单个像素的绘制蓝图
  • GPU中多个工作单元并行处理
  • 每个工作单元负责一个像素的绘制
  • 着色器是工作单元的执行指南

着色器类型

  1. 顶点着色器:确定位置
  2. 片段着色器(像素着色器):绘制颜色

工作流程

  1. 顶点着色器执行(仅执行顶点次数)
  2. 图元装配(组合成三角形/线段)
  3. 光栅化(填充像素块)
  4. 片段着色器处理每个fragment(执行像素数量次)
    图片1
    图片1
    图片1

实现注意事项

OpenGL封装选择

  • 放弃Qt封装的OpenGL
  • 直接使用原生句柄操作VAO/VBO

位置管理

  • m_pos使用QPoint类型
    图片1