Qt之opengl定点数据添加更多属性

将颜色数据加入到定点数据中去

shader中代码

api中的代码

#include "sunopengl.h"#include <QTime>sunOpengl::sunOpengl(QWidget *parent)
{
}
unsigned int VBO,VAO;
float vertices[]={0.5f, 0.5f,  0.0f, 1.0f, 0.0f, 0.0f,0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,-0.5f,-0.5f, 0.0f, 0.0f, 0.0f, 1.0f,-0.5f,0.5f, 0.0f,  0.5f, 0.5f, 0.5f,
};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();shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,":/shades/shapes.vert");shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,":/shades/shapes.frag");bool success=shaderProgram.link();if(!success){qDebug()<<shaderProgram.log();}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,6*sizeof(float),(GLvoid*)0);glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,6*sizeof(float),(GLvoid* )(3*sizeof(float)));//开始VOA属性glEnableVertexAttribArray(0);glEnableVertexAttribArray(1);//EBOglGenBuffers(1,&EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW);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();
}
//定点着色器-》几何着色-》图元装配-》光栅化-》片段着色器-》测试与混合

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

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

相关文章

【Flink运行时架构】作业提交流程

本文介绍在单作业模式下Flink提交作业的具体流程&#xff0c;如下图所示。 客户端将作业提交给YARN的RM&#xff1b;YARN的RM启动Flink JobManager&#xff0c;并将作业提交给JobMaster&#xff1b;JobMaster向Flink内置的RM请求slots&#xff1b;Flink内置的RM向YARN RM请求…

AI大模型技术之RAG、模型微调、知识蒸馏

AI大模型技术之RAG、模型微调、知识蒸馏 检索增强生成&#xff08;RAG&#xff09;技术原理垂直领域应用场景使用的局限性 模型微调&#xff08;Fine-tuning&#xff09;技术原理垂直领域应用场景使用的局限性 知识蒸馏&#xff08;Distillation&#xff09;技术原理垂直领域应…

深入浅出:信号灯与系统V信号灯的实现与应用

深入浅出&#xff1a;信号灯与系统V信号灯的实现与应用 信号灯&#xff08;Semaphore&#xff09;是一种同步机制&#xff0c;用于控制对共享资源的访问。在多线程或多进程环境下&#xff0c;信号灯能够帮助协调多个执行单元对共享资源的访问&#xff0c;确保数据一致性与程序…

消防设施操作员岗位注意事项有哪些?

消防设施操作员主要负责消防设施的操作、维护和管理等工作&#xff0c;其岗位注意事项涉及操作规范、设备维护、应急处理等多个关键领域&#xff0c;以下是具体内容&#xff1a; 操作规范方面 熟悉设备原理&#xff1a;要全面了解各类消防设施的工作原理、性能参数和操作方法…

SQL:Relationship(关系)

目录 &#x1f517; 什么是 Relationship&#xff1f; 三种基本关系类型&#xff08;基于实体间的关系&#xff09;&#xff1a; 1. 一对一&#xff08;One-to-One&#xff09; 2. 一对多&#xff08;One-to-Many&#xff09; 3. 多对多&#xff08;Many-to-Many&#xf…

php伪协议

PHP 伪协议&#xff08;PHP Stream Wrapper&#xff09; PHP 的伪协议&#xff08;Protocol Wrapper&#xff09;是一种机制&#xff0c;允许开发者通过统一的文件访问函数&#xff08;如 file_get_contents、fopen、include 等&#xff09;访问不同类型的数据源&#xff0c;包…

当DRAM邂逅SSD:新型“DRAM+”存储技术来了!

在当今快速发展的科技领域&#xff0c;数据存储的需求日益增长&#xff0c;对存储设备的性能和可靠性提出了更高的要求。传统DRAM以其高速度著称&#xff0c;但其易失性限制了应用范围&#xff1b;而固态硬盘SSD虽然提供非易失性存储&#xff0c;但在速度上远不及DRAM。 为了解…

org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow...

Spark异常&#xff1a;Kryo serialization failed: Buffer overflow. 1、问题描述 SparkSQL任务报错如下&#xff1a; org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: xxx. To avoid this, increase spark.kryoseri…

编译原理 实验二 词法分析程序自动生成工具实验

文章目录 实验环境的准备实验实验预备知识分析案例所要做的任务实战 实验环境的准备 安装flex 安装MinGW MinGW Installation Manager页面 apply changes 下载比较耗时 只看到了一个文件&#xff0c;复制过去 配置环境变量 使用gcc -v检验是否安装完成 实验 实验预备知识…

BERT - 直接调用transformers.BertModel, BertTokenizerAPI不进行任何微调

本节代码将使用 transformers 库加载预训练的BERT模型和分词器&#xff08;Tokenizer&#xff09;&#xff0c;并处理文本输入。 1. 加载预训练模型和分词器 from transformers import BertTokenizer, BertModelmodel_path "/Users/azen/Desktop/llm/models/bert-base-…

Python 质数筛选:从入门到优化的 5 种方法

质数&#xff08;Prime Number&#xff09;是指只能被 1 和自身整除的自然数&#xff0c;如 2、3、5、7 等。在算法题、密码学或数学计算中&#xff0c;高效生成质数至关重要。 Python 提供了多种方法来实现质数筛选&#xff0c;但不同方法的效率差异巨大。本文从 最基础的方法…

C#MQTT协议服务器与客户端通讯实现(客户端包含断开重连模块)

C#MQTT协议服务器与客户端通讯实现 1 DLL版本2 服务器3 客户端 1 DLL版本 MQTTnet.DLL版本-2.7.5.0 基于比较老的项目中应用的DLL&#xff0c;其他更高版本变化可能较大&#xff0c;谨慎参考。 2 服务器 开启服务器 关闭服务器 绑定事件【客户端连接服务器事件】 绑定事件【客户…

【连载3】基础智能体的进展与挑战综述

基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 2. 认知 人类认知是一种复杂的信息处理系统&#xff0c;它通过多个专门的神经回路协调运行…

Python语言介绍

Python 是一种高级、通用、解释型的编程语言&#xff0c;由 Guido van Rossum 于 1991 年首次发布。其设计哲学强调代码的可读性和简洁性。 Python通过简洁的语法和强大的生态系统&#xff0c;成为当今最受欢迎的编程语言之一。 一、核心特点 Python 是一种解释型、面向对象、…

什么是回表?哪些数据库存在回表?

目录 一、什么是回表1. 回表的核心流程2. 示例说明3. 回表的性能问题4. 总结 二、哪些数据库会有回表1. MySQL&#xff08;InnoDB&#xff09;2. Oracle3. 其他数据库&#xff08;如 SQL Server、PostgreSQL&#xff09;4. 总结 三、非聚集索引与聚集索引的区别及产生原因1. 聚…

ssh 免密登录服务器(vscode +ssh 免密登录)

每次打开vscode连接服务器都需要输入密码&#xff0c;特别繁琐。 然后自己在网上翻阅了一下教程&#xff0c;发现说的内容比较啰嗦&#xff0c;而且个人感觉非常有误导性倾向。 因此自己直接干脆写一个简便易懂的教程算了。 &#xff08;以经过本人亲测&#xff0c;真实可靠&am…

基于低空经济的无人机操控与维护实训室解决方案

一、低空经济时代下的无人机人才需求 1.1 低空经济发展趋势与政策机遇 在当前经济与科技飞速发展的大背景下&#xff0c;低空经济作为国家战略性新兴产业&#xff0c;正以迅猛之势崛起&#xff0c;展现出无限的潜力与活力。其应用场景极为广泛&#xff0c;涵盖了物流、安防、…

PyTorch实现二维卷积与边缘检测:从原理到实战

本文通过PyTorch实现二维互相关运算、自定义卷积层&#xff0c;并演示如何通过卷积核检测图像边缘。同时&#xff0c;我们将训练一个卷积核参数&#xff0c;使其能够从数据中学习边缘特征。 1. 二维互相关运算的实现 互相关运算&#xff08;Cross-Correlation&#xff09;是卷…

数字政府网络架构建设方案

数字政府网络架构建设方案 一、引言 随着信息技术的快速发展&#xff0c;数字政府建设已成为提升政府治理能力和服务水平的关键。网络架构作为数字政府的核心基础设施&#xff0c;对于保障数据安全、提高服务效率、促进信息共享具有重要意义。本方案旨在为数字政府网络架构建…

Python map函数介绍

在 Python 里&#xff0c;map() 是一个内置函数&#xff0c;其用途是将指定的函数应用于可迭代对象&#xff08;像列表、元组等&#xff09;的每个元素&#xff0c;最终返回一个新的迭代器。此迭代器所包含的元素是原可迭代对象中每个元素经过指定函数处理后的结果。map() 函数…