Uniform的理解

news2024/11/24 14:57:38

Uniform:一种从Cpu的应用,向Gpu中的着色器发送数据的方式,它是全局的,可以被任意着色器程序在任意阶段访问。
若声明了一个Uniform却没用过,编译器会默认移除这个变量,导致编译出的版本并不包含它,可能会导致非常大的问题!!!
着色器frag程序:

	#version 330 core
	out vec4 FragColor;
	uniform vec4 ourColor;
	void main(){
    	FragColor = ourColor;
	}

initializeGL()函数:

	initializeOpenGLFunctions();
	//创建VBO和VAO对象,并赋予ID
	glGenVertexArrays(1, &VAO);
	glGenBuffers(1, &VBO);
	//绑定VBO和VAO对象
	glBindVertexArray(VAO);
	glBindBuffer(GL_ARRAY_BUFFER, VBO);
	//为当前绑定到target的缓冲区对象创建一个新的数据存储。
	//如果data不是NULL,则使用来自此指针的数据初始化数据存储
	glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
	//告知显卡如何解析缓冲里的属性值
	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
	//开启VAO管理的第一个属性值
	glEnableVertexAttribArray(0);
	glBindBuffer(GL_ARRAY_BUFFER, 0);
	bool success;
	shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex, "shaders/shapes.vert");
shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment, "shaders/shapes.frag");
	success = shaderProgram.link();
	if (!success)
		qDebug() << "ERR:" << shaderProgram.log();
	// glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	glGenBuffers(1, &EBO);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
	glBindVertexArray(0);

paintGL()函数:

glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
	glClear(GL_COLOR_BUFFER_BIT);
	shaderProgram.bind();
	glBindVertexArray(VAO);
	glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, NULL);

定时器on_timeout()函数

	makeCurrent();
	int timeValue = QTime::currentTime().second();
	float blueValue = (sin(timeValue) / 2.0f)+0.5 ;
	float greenValue = (sin(timeValue) / 2.0f) + 0.5;
	//float redValue = (sin(timeValue) / 2.0f) + 0.5;
	shaderProgram.setUniformValue("ourColor", blueValue, greenValue, 1.0f, 1.0f);
	doneCurrent();
	update();

动态效果图如下:
在这里插入图片描述

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

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

相关文章

配置本地的application-dev.yml读取nacos上面的配置

我想配置本地的application-dev.yml读取nacos上面的配置&#xff0c;我应该在配置文件里怎么写&#xff1f;并且在nacos里怎么建立 在本地的application-dev.yml文件中&#xff0c;您可以使用Spring Cloud Nacos来读取Nacos上的配置。以下是在配置文件和Nacos中设置的步骤&…

servlet+JSP与SpringBoot+Vue项目交互——servlet访问Vue页面

问题 servletJSP与SpringBootVue项目交互——servlet访问Vue页面 详细问题 笔者前一段时间开发一个项目&#xff0c;使用的技术框架是servletJSP&#xff0c;现阶段开发的项目技术框架为SpringBootVue&#xff0c;笔者现在需要输入servletJSP的路由地址&#xff08;登录页面…

3DTiles Next研究

3DTiles Next是Cesium发布的下一代3DTiles规范。 元数据 在这一代规范中&#xff0c;更重视元数据&#xff08;metadata&#xff0c;如建筑物ID或者类型等&#xff09;&#xff0c;通过这些元数据可以对3dtiles进行样式调整或者过滤显示。 关于详细的元数据规范介绍看这里。 …

Spark SQL生产优化经验--任务参数配置模版

大表扫描 特殊case说明&#xff1a;当任务存在扫event_log表时需注意&#xff0c;若对event_log表进行了过滤&#xff0c;且过滤比很高&#xff0c;如下图的case&#xff0c;input为74T&#xff0c;但shuffle write仅为3.5G&#xff0c;那么建议提高单partition的读取数据量&a…

Redis数据库高可用之RDB和AOF持久化

Redis数据库高可用、RDB和AOF持久化、性能管理 一、Redis 高可用二、Redis 持久化Ⅰ、持久化的功能Ⅱ、两种持久化方式Ⅲ、RDB 和 AOF 的区别 三、RDB 持久化Ⅰ、触发条件Ⅱ、执行流程 四、AOF持久化Ⅰ、开启AOFⅡ、执行流程 五、RDB 和 AOF 的优缺点Ⅰ、RDB 持久化Ⅱ、AOF 持久…

金鹰优化算法,附MATLAB代码,直接复制

金鹰优化算法&#xff08;golden eagle optimizer, GEO&#xff09;是于2020年提出的新型智能优化算法&#xff0c;该算法建立于金鹰个体 捕食过程中的巡航和攻击行为之上&#xff0c;通过平衡两者关系&#xff0c;帮助函数寻找最优值&#xff0c;已经在许多方面得到了应用。 关…

Google 将为高端 Chromebook 推出独立品牌

说起 Chromebook&#xff0c;一般大家的第一印象就是价格便宜、配置不高、做工普通&#xff0c;所选的材料也都是以塑料为主&#xff0c;产品主打的市场也是学生和教育群体。在不少人看来&#xff0c;Chromebook 就是一个配备了功能齐全的浏览器&#xff0c;外加一定的文件管理…

GOLANG进阶:Viper,Mysql,Swagger

GOLANG从浅入深必须学习的一些工具包 1.Viper&#xff1a; Viper 是一个完整的 Go 应用程序配置解决方案&#xff0c;优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下&#xff1a; 支持 JSON/TOML/YAML/HCL/envfile/Java proper…

数据结构--栈在函数递归中的调用

数据结构–栈在函数递归中的调用 void func2(int x) {int n, m;//... }void func1(int a, int b) {int x;//...func2(x);x 5201314;//... }int main() {int a, b, c;//...func1(a, b);//... }函数调用的特点:最后被调用的函数最先执行结束(LIFO) 函数调用时&#xff0c;需要用…

【人工智能与机器学习】基于卷积神经网络CNN的猫狗识别

文章目录 1 引言2 卷积神经网络概述2.1 卷积神经网络的背景介绍2.2 CNN的网络结构2.2.1 卷积层2.2.2 激活函数2.2.3 池化层2.2.4 全连接层 2.3 CNN的训练过程图解2.4 CNN的基本特征2.4.1 局部感知&#xff08;Local Connectivity&#xff09;2.4.2 参数共享(Parameter Sharing)…

顶点数据加入颜色数据

顶点着色器代码&#xff1a; #version 330 core layout(location 0) in vec3 aPos; layout(location 1) in vec3 aColor; out vec3 ourColor; void main(){gl_Position vec4(aPos.x, aPos.y, aPos.z, 1.0f);ourColoraColor; }片段着色器代码&#xff1a; #version 330 cor…

11-切片有什么用?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 11-切片有什么用&#xff1f;

学习 vue3版本

文章目录 创建各种函数setup注意点 ref函数总结 reactive总结 响应式vue2vue3总结 ref与reactive的比较计算属性监视watch的value的问题 watchEffect函数生命周期Hooks函数总结 toRef总结 其他CompositionApishallowReactive与shallowRefreadonly与shallowReadonlytoRaw与markR…

React Antd Form.List 组件嵌套多级动态增减表单 + 表单联动复制实现

Antd Form.List 组件嵌套多级动态增减表单 表单联动复制实现 一、业务需求 有一个页面的组件&#xff0c;其中一部分需要用到动态的增减 复制表单&#xff0c;然后就想起 了使用 Antd 的 Form.List 去完成这个功能。 这个功能的要求是&#xff1a; 首先是一个动态的表单&…

事后多重比较案例分析

一、案例介绍 由单因素方差分析案例中&#xff0c;为研究郁金对低张性缺氧小鼠存活时间的影响&#xff0c;将36只小鼠随机生成A、B以及 C 三组&#xff0c;每组12个&#xff0c;雌雄各半&#xff0c;分别以10g/kg、20g/kg、40g/kg三种不同剂量的郁金灌胃&#xff0c;各组小鼠均…

08-C++学习笔记-类与对象

&#x1f51f;&#x1f512; 08-C学习笔记-类与对象 在本篇学习笔记中&#xff0c;我们将详细讲解C中的类与对象的概念和相关知识。类是C中一种重要的数据类型&#xff0c;它允许我们自定义数据结构和相应的操作。 &#x1f4da; C类与对象详细讲解 ✨类的概念 类是一种用户…

黑客(网络安全)自学

前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答 .4.遇到实在搞不懂的,可以先放放,以后…

3dmax导出cad

3dmax2022 导出cad 导入arcmap 10.2 导出版本为AutoCAD 2007 DWG

玩转Matplotlib的10个高级技巧

Matplotlib是Python中流行的数据可视化库&#xff0c;仅使用简单的几行代码就可以生成图表。但是默认的方法是生成的图表很简单&#xff0c;如果想增强数据演示的影响和清晰度&#xff0c;可以试试本文总结的10个高级技巧&#xff0c;这些技巧可以将可视化提升到一个新的水平: …

Hyperledger Fabric网络快速启动

目录 1、网络服务配置 2、关联的docker-compose-base.yaml 各Peer节点容器设置如下信息。 3、被关联的Peer-base.yaml 4、启动网络 2、完成通道的创建 2.1将节点加入应用通道 更新锚节点 2.为什么要创建节点并将其加入应用通道中&#xff1f; 1、网络服务配置 由于要启动…