Qt之OpenGL使用Qt封装好的着色器和编译器

代码

#include "sunopengl.h"sunOpengl::sunOpengl(QWidget *parent) {}unsigned int VBO,VAO;
float vertices[]={0.5f,0.5f,0.0f,0.5f,-0.5f,0.0f,-0.5f,-0.5f,0.0f,-0.5f,0.5f,0.0f
};unsigned int indices[]={0,1,3,1,2,3,
};
unsigned int EBO;
sunOpengl::~sunOpengl()
{makeCurrent();glDeleteVertexArrays(1,&VAO);glDeleteBuffers(1,&VBO);glDeleteBuffers(1,&EBO);//glDeleteProgram(shaderProgram);doneCurrent();
}
void sunOpengl::initializeGL()
{this->initializeOpenGLFunctions();glGenVertexArrays(1,&VAO);glGenBuffers(1,&VBO);glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER,VBO);//将数据传入显存glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//显卡解析参数glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(GLvoid*)0);//开始VOA属性glEnableVertexAttribArray(0);//EBOglGenBuffers(1,&EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW);shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,":/shades/shapes.vert");shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,":/shades/shapes.frag");bool success=shaderProgram.link();if(!success){qDebug()<<shaderProgram.log();}glBindVertexArray(0);glBindBuffer(GL_ARRAY_BUFFER,0);
}void sunOpengl::resizeGL(int w, int h)
{}void sunOpengl::paintGL()
{shaderProgram.bind();//glUseProgram(shaderProgram);glClearColor(0.2f,0.3f,0.3f,1.0f);glClear(GL_COLOR_BUFFER_BIT);if(!isDraw)return;glBindVertexArray(VAO);// glDrawArrays(GL_TRIANGLES,0,6);glDrawElements(ShapeType,6,GL_UNSIGNED_INT,0);glBindVertexArray(0);}void sunOpengl::drawrectangle()
{ShapeType=GL_TRIANGLES;isDraw=true;update();
}void sunOpengl::setPloygonMode(bool isWire)
{makeCurrent();if(isWire){glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);}else{glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);}doneCurrent();update();
}void sunOpengl::clear()
{isDraw=false;update();
}
//定点着色器-》几何着色-》图元装配-》光栅化-》片段着色器-》测试与混合
#ifndef SUNOPENGL_H
#define SUNOPENGL_H#include <QOpenGLWidget>
#include<QOpenGLFunctions_3_3_Core>//unction_>
#include<QOpenGLShaderProgram>
class sunOpengl : public QOpenGLWidget,QOpenGLFunctions_3_3_Core
{
public:explicit sunOpengl(QWidget* parent = nullptr);~sunOpengl();virtual void initializeGL();virtual void resizeGL(int w, int h);virtual void paintGL();void drawrectangle();void clear();void setPloygonMode(bool isWire);bool isDraw;int ShapeType;QOpenGLShaderProgram shaderProgram;
};#endif // SUNOPENGL_H

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP-17 BGP基础2

HCIP-17 BGP基础2 一、bgp的路由黑洞问题 1.bgp的同步功能 ipv4-family unicast IPV4的地址簇 undo synchronization 关闭BGP同步功能 bgp的同步功能原理 当边界路由器从ibgp邻居收到一条路由后&#xff0c;会使用该路由和igp路由表进行比较。 如果在igp路由表中存在…

leetcode_15. 三数之和_java

15. 三数之和https://leetcode.cn/problems/3sum/ 1、题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。…

Open Interpreter:重新定义人机交互的开源革命

引言 在人工智能技术蓬勃发展的今天&#xff0c;人机交互的方式正经历着前所未有的变革。Open Interpreter&#xff0c;作为一个开源项目&#xff0c;正在重新定义我们与计算机的互动方式。它允许大型语言模型&#xff08;LLMs&#xff09;在本地运行代码&#xff0c;通过自然…

【JavaScript】错误处理与调试

个人主页&#xff1a;Guiat 归属专栏&#xff1a;HTML CSS JavaScript 文章目录 1. JavaScript 错误处理基础1.1 错误类型1.2 try...catch 语句 2. 错误抛出与自定义错误2.1 throw 语句2.2 自定义错误类型 3. 异步错误处理3.1 Promise 错误处理3.2 async/await 错误处理 4. 调试…

算法基础模板

高精度加法 #include <bits/stdc.h> using namespace std; const int N10005; int A[N],B[N],C[N],al,bl,cl; void add(int A[],int B[],int C[]) {for(int icl-1;~i;i--){C[cl]A[i]B[i];C[cl1]C[cl]/10;C[cl]%10;}if(C[cl])cl; } int main() {string a,b;cin>>a&…

自行搭建一个Git仓库托管平台

1.安装Git sudo apt install git 2.Git本地仓库创建&#xff08;自己选择一个文件夹&#xff09; git init 这里我在 /home/test 下面初始化了代码仓库 1. 首先在仓库中新建一个txt文件&#xff0c;并输入一些内容 2. 将文件添加到仓库 git add test.txt 执行之后没有任何输…

[MySQL]数据库与表创建

欢迎来到啾啾的博客&#x1f431;。 这是一个致力于构建完善 Java 程序员知识体系的博客&#x1f4da;。 它记录学习点滴&#xff0c;分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 本篇简单记录…

相机回调函数为静态函数原因

在注册相机SDK的回调函数时&#xff0c;是否需要设置为静态函数取决于具体SDK的设计要求&#xff0c;但通常需要遵循以下原则&#xff1a; 1. 必须使用静态函数的情况 当相机SDK是C语言接口或要求普通函数指针时&#xff0c;回调必须声明为静态成员函数或全局函数&#xff1a;…

《Vue Router实战教程》4.路由的匹配语法

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 路由的匹配语法 大多数应用都会使用 /about 这样的静态路由和 /users/:userId 这样的动态路由&#xff0c;就像我们刚才在动态路由匹配中看到的那样&#xff0c;但是 Vue Router 可以提供更多的方式&#…

Debezium报错处理系列之第128篇:增量快照报错java.lang.OutOfMemoryError: Java heap space

Debezium报错处理系列之第128篇:增量快照报错java.lang.OutOfMemoryError: Java heap space 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezium技…

通过MCP+数据库实现AI检索和分析

通过 MCP&#xff08;Multi-Agent Collaboration Platform&#xff0c;多智能体协作平台&#xff09; 数据库&#xff0c;实现一个AI检索和分析系统。 一、系统目标 实现通过 AI 多智能体对结构化&#xff08;数据库&#xff09;和非结构化&#xff08;文档、文本&#xff09…

【教学类-102-08】剪纸图案全套代码08——Python点状虚线优化版本02(有空隙)+制作1图2图6图24图

背景需求 代码实现了点状虚线的全套流程,但是图片中主体图案和虚线与左右两边粘连。 【教学类-102-07】剪纸图案全套代码07——Python点状虚线优化版本01(无空隙)+制作1图2图6图24图-CSDN博客文章浏览阅读665次,点赞11次,收藏11次。【教学类-102-07】剪纸图案全套代码07…

循环神经网络 - 长短期记忆网络

在之前的博文中&#xff0c;我们介绍了循环神经网络的长程依赖问题及改进方案&#xff0c;可以参考&#xff1a;循环神经网络 - 长程依赖问题及改进方案-CSDN博客 但是改进方案只是可以缓解梯度消失&#xff0c;并不能彻底解决梯度爆炸问题和记忆容量(Memory Capacity)问题。 …

LLM应用开发(七)--记忆

1.LangChain记忆模块 底层原理&#xff1a;在最新一次问题时&#xff0c;带上前面的人机对话历史内容 1.1.具体方式 缓冲记忆 缓冲窗口记忆&#xff08;限定存储会话信息次数&#xff09; 令牌缓冲记忆 摘要总结记忆 摘要缓冲混合记忆 向量存储库记忆

Unity VideoPlayer 播放无声音

增加一个videoPlayer下挂&#xff0c;audiorSource脚本 this.videoPlayer.EnableAudioTrack(0, true); this.videoPlayer.audioOutputMode VideoAudioOutputMode.AudioSource; this.videoPlayer.SetTargetAudioSource(0, this.videoPlayer.GetComponent<AudioSource>()…

AGI|AutoGen入门食用手册,搭建你的智能体流水线

目录 1. AutoGen简介 主要特点 2.快速安装 3. 相关概念 Agent Roles and Conversations 4.多代理对话 4.1 Agents 例子: 两个对话代理 4.2 支持多样化的对话模式 1. AutoGen简介 AutoGen 是一个开源编程框架&#xff0c;用于构建AI代理并促进多个代理之间的合作以解…

基于ImGui+FFmpeg实现播放器

基于ImGuiFFmpeg实现播放器 演示&#xff1a; ImGui播放器 继续研究FFmpeg&#xff0c;之前做了一个SDL的播放器&#xff0c;发现SDL的可视化UI界面的功能稍微差了点&#xff0c;所以今天我们换了一个新的工具&#xff0c;也就是ImGui。 ImGui官方文档&#xff1a;https://g…

ES6变量声明:let、var、const全面解析

一、引言 ECMAScript 6&#xff08;简称 ES6&#xff09;的发布为 JavaScript 带来了许多革命性的变化&#xff0c;其中变量声明方式的更新尤为重要。let、var和const成为开发者日常编码中频繁使用的关键字。 本文将深入解析这三种声明方式的核心特性、区别及最佳实践&#xff…

Java基础 - 反射(2)

文章目录 示例5. 通过反射获得类的private、 protected、 默认访问修饰符的属性值。6. 通过反射获得类的private方法。7. 通过反射实现一个工具BeanUtils&#xff0c; 可以将一个对象属性相同的值赋值给另一个对象 接上篇&#xff1a; 示例 5. 通过反射获得类的private、 pro…

FCOS目标检测

一、模型框架 FCOS采用的网络架构和RetinaNet一样&#xff0c;都是采用FPN架构&#xff0c;如图2所示&#xff0c;每个特征图后是检测器&#xff0c;检测器包含3个分支&#xff1a;classification&#xff0c;regression和center-ness。 对于特征图Fi∈RHWC&#xff0c;其相对…