恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

OpenGL

  • 首页
  • 资讯中心
  • /
  • OpenGL

相关资讯

基于SpringBoot的林业产品在线商城系统[包括源码+文档+免费] 2026/8/21 6:40:01
超声导波损伤监测:四步定位材料损伤 2026/8/21 6:40:01
Sima 1.0:基于多智能体框架的AI纪录片创作平台 2026/8/21 6:40:01

最新资讯

高效刷题方法论:3月21日算法训练与面试突破
单片机毕业设计-基于 STM32 单片机的户外环境感知与阈值预警系统设计 基于 STM32 的雨水粉尘风速综合环境检测终端开发(010604)
腾讯设计妙境Miora实战:多智能体协同如何实现AI视觉资产批量生成
单片机毕业设计-基于 STM32 单片机的环境感知与自动化设备控制系统设计 基于 STM32 的多传感器环境监测与阈值联动控制系统设计(010504)
单片机毕业设计-基于 STM32 单片机的环境参数采集与远程智能通风装置设计 基于 STM32 的室内环境监测、阈值报警与蓝牙移动端控制系统设计(010304)
HubPort vs Node-RED:同样是可视化编排,有什么不同

今日推荐

OpenCode AI编程助手:从核心原理到本地部署的完整实践指南
基于SpringBoot与Vue的企业资产与采购管理系统设计与实现(程序+文档+讲解)
Linux命令-uucico(UUCP传输程序)

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

OpenGL

发布时间:2026/8/21 6:45:01
OpenGL 1. QOpenGLShaderProgram 着色器程序管理类头文件 #include QOpenGLShaderProgram1. 创建QOPenGLShaderProgram 对象2. 添加着色器源码 addShaderFromSourceCode / addShaderFromSourceFile3. 链接程序 link()4. 绑定启用bind()5. 绘制完成释放release()设置数据格式 setUniformValue(ourTexture, 0); // 设置着色器使用的纹理单元02. QOpenGLBuffer qt对OpenGL Buffer Object 的缓冲区#include QOpenGLBuffer创建 bool create();绑定 bool bind(); 将vbo绑定到GL_ARRAY_BUFFER解绑 bool release();分配显存空间 bool allocate(const void *data, int count);局部跟新缓冲区数据 void write(int offset, const void *data, int count); // 要写入的数据的首地址设置数据使用模式 void setUsagePattern(UsagePattern usage);enum UsagePattern {StreamDraw,StreamRead,StreamCopy,StaticDraw, // 静态数据一次上传多次绘制顶点坐标常用StaticRead,StaticCopy,DynamicDraw, // 动态数据CPU频繁修改GPU绘制粒子、动画顶点 DynamicRead,DynamicCopy};glBindBuffer(targer, 0); 0 解绑3. QOpenGLVertexArrayObject 存储顶点属性配置的容器bool create(); 创建void bind(); 绑定void release(); 解绑4. QOpenGLTexture OpenGL 纹理对象头文件 #include QOpenGLTexturesetMinificationFilter(QOpenGLTexture::LinearMipMapLinear); 缩小过滤图片的尺寸大于屏幕setMagnificationFilter(QOpenGLTexture::Linear); 放大过滤图片的尺寸小于屏幕QOpenGLTexture 枚举:Nearest 最近点像素风锯齿明显Linear 线性插值 线性平滑模糊抗锯齿LinearMipMapLinear 三线性 3D 场景远距离最优setWrapMode(QOpenGLTexture::DirectionS, QOpenGLTexture::Repeat); 设置纹理包裹模式纹理坐标超出0~1 如何处理Repeat 重复平铺ClampToEdge拉伸边缘像素ClampToBorder: 填充自定义边框色bool bind(int a) 绑定纹理单元abool release() 解绑纹理单元5. 设置位置属性glVertexAtrribPointer(0, 2, GL_FLOAT, GL_FALSE, 4* sizeof(float), (void*)0);void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer );6. 启用设置好的位置属性glEnableVertexAttribArray(int location); 启用location顶点属性7. glDrawArrays 绘制调用函数 绘制顶点Qt / 现代 OpenGL 核心模式下最基础的绘制调用函数按照已经配置好的 VAO 顶点属性连续读取顶点并进行图元组装、光栅化、着色。void glDrawArrays(GLenum mode, GLint first, GLsizei count);GLenum 图元绘制类型GLint first 起始顶点索引偏移 一般填0 从头读取VBO中的顶点GLsizei count 一共读取多少个顶点代码 initializeGL()void Widget::initializeGL() { initializeOpenGlFunctions(); // 动态初始化openGL glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // 设置清屏颜色 // 加载图片并创建纹理 QImage img(); if(img.empty(){ qDebug() image初始化失败; return; } img img.converToFormat(QImage::Format_RGBA888); //垂直翻转因为OpenGL在原点左下 m_texture new QOpenGLTexture(QImage.mirrored()); // 设置纹理过滤和纹理包裹 m_texture-setMinitialficationFilter(QOpenGLTexture::Linear); m_texture-setMagnitialficationFilter(QOpenGLTexture::Linear); m_texture-setWrapMode(QOpenGLTexture::ClampToEdge); // 修改纹理数据 // 顶点数据: 位置 (x,y) 纹理坐标 (u,v) // 对应一个矩形 (两个三角形) float vertices[] { // 位置 // 纹理坐标 -1.0f, -1.0f, 0.0f, 0.0f, // 左下 1.0f, -1.0f, 1.0f, 0.0f, // 右下 1.0f, 1.0f, 1.0f, 1.0f, // 右上 -1.0f, -1.0f, 0.0f, 0.0f, // 左下重复 1.0f, 1.0f, 1.0f, 1.0f, // 右上 -1.0f, 1.0f, 0.0f, 1.0f // 左上 }; // 创建VAO VBO QOpenGLVertexArrayObject* m_vao new QOpenGLVertexArrayObject(this); m_vao-create(); m_vao-bind(); QOpenGLBuffer *m_vbo new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); m_vbo-create(); m_vbo-bind(); m_vbo-setUsagePattern(QOpenGLBuffer::StaticDraw); m-vbo-allocate(vertices, sizeof(vertices)); // 位置属性 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); // 纹理坐标属性 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float), (void*)(2 * sizeof(float))); m_vao.release(); m_vbo.release(); // 加载并编译着色器 program.addShaderFormSourceFile(QOpenGLShader::Vertex, xxxxx); // 顶点着色器 program.addShaderFormSourceFile(QOpenGLShader::Fragment, xxxxx);// 片段着色器 if(!program.link()){ qDebug() Shader link failed: program.log(); } }顶点着色器 transform.vert#version 330 core layout(location 0) int ver2 aPos; layout(location 1) int vec2 aTexCord; out vec2 TextCord; void main(){ gl_Position vec4(aPos, 0.0, 1.0); TextCord aTextCord; }片段着色器 transform.frag#version 330 core out vec4 FragColor; in vec4 TexCord; uniform sampler2D outTexture; void main(){ FragColor texture(outTexture, TextCord); }paintGL 绘制void Widget::paintGL() { // 1. 设置清屏颜色 glClear(GL_COLOR_BUFFER_BIT); // 2. 着色器程序绑定 program.bind(); // 3. 纹理绑定 告诉着色器使用纹理单元0 m_texture-bind(0); program.setUniformValue(outTexture, 0); // 4. vao绑定 绘制两个三角形 解绑 m_vao.bind(); glDrawArrays(GL_TRANGLES, 0, 6); m_vao.release(); // 5. 纹理解绑 小程序解绑 m_texture-release(); program.release(); }widget.h#ifndef MYGLWIDGET_H #define MYGLWIDGET_H #include QOpenGLWidget #include QOpenGLFunctions #include QOpenGLVertexArrayObject #include QOpenGLBuffer #include QOpenGLShaderProgram #include QOpenGLTexture class Widget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: explicit Widget(QWidget *parent nullptr); ~Widget(); protected: // 必须重写的三个核心函数 void initializeGL() override; void resizeGL(int w, int h) override; void paintGL() override; private: QOpenGLShaderProgram program; QOpenGLBuffer *m_vbo nullptr; QOpenGLVertexArrayObject *m_vao nullptr; QOpenGLTexture *m_texture nullptr; // 新增纹理对象 }; #endif // MYGLWIDGET_H

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号