OpenGL —— 2.2、Shader之间数据传输、向Shder传输数据

Shader

     OpenGL着色器(shader)是一种用于编写图形渲染代码的编程语言。它们在图形处理单元(GPU)上运行,用于控制渲染管线的不同阶段。

     在OpenGL中,有两种主要类型的着色器:顶点着色器和片段着色器。
          顶点着色器(Vertex Shader)负责处理输入的顶点坐标,并对它们进行变换和变换相关的计算。它通常用于将3D模型从称为模型空间转换为屏幕空间。
          片段着色器(Fragment Shader)负责计算像素的最终颜色值。它通常用于对每个像素进行光照计算、纹理采样和其他图像处理操作。

     GLSL是一种强类型语言,所有的变量都必须事先声明,并且要给出变量的类型。

Shader之间数据传输

     如下图。vertexShader.glsl的vertexColors作为fragmentShader.glsl的vertexColors的输入。

在这里插入图片描述

向Shder传输数据

如下代码基于 OpenGL —— 2、绘制第一个三角形(附源码,glfw+glad)

在这里插入图片描述

     fragmentShader.glsl

#version 330 core

out vec4 FragColor;

uniform vec4 ourColor;	// 用C++传入

void main()
{
	FragColor = ourColor;
};


     main.c

void _Render()
{
	// 使用程序
	glUseProgram(shaderProgram);

	/***************************************************/	// 周期性更改三角形填充色
	float _time = glfwGetTime();
	float _green = sin(_time)*0.5f + 0.5f;
	// 获得指定shader程序中uniform变量的位置
	int _location = glGetUniformLocation(shaderProgram, "ourColor");
	// // 用于向当前活动的shader程序中的uniform变量设置四个浮点数值
	glUniform4f(_location, 0.0f, _green, 0.0f, 1.0f);
	/***************************************************/	

	// 绑定VAO
	glBindVertexArray(VAO);

	// 绘制三角形
	glDrawArrays(GL_TRIANGLES, 0, 3);

	// 关闭使用程序
	glUseProgram(0);
}

关注

Wx GZH:码农总动员

笔者 - jxd

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中大许少辉博士中国建筑出版传媒八一新书《乡村振兴战略下传统村落文化旅游设计》百度百科新闻

中大许少辉博士中国建筑出版传媒八一新书《乡村振兴战略下传统村落文化旅游设计》百度百科新闻: 乡村振兴战略下传统村落文化旅游设计 - 百度百科 https://baike.baidu.com/item/乡村振兴战略下传统村落文化旅游设计/62588677 概览 《乡村振兴战略下传统村落文化旅游…

宠物店小程序制作

随着移动互联网的快速发展,宠物店经营者们也纷纷意识到线上市场的潜力。通过开发一款宠物小程序,你可以将你的宠物店推向线上的新机遇! 【乔拓云】是一个专业的小程序开发平台,它提供了一套简单易用的工具,帮助你快速创…

js使用for of遍历map

//使用for of遍历map console.log("---") console.log(odata.studentDetails) let obj odata.studentDetails[0].answerSituation for(let [key,value] of Object.entries(obj)){console.log(value) }

解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

k8s集群生产环境的问题处理

2 k8s上的服务均无法访问 执行命令kubectl get pods -ALL,k8s集群中的服务均是running状态 1 kuboard 网页无法访问 kuboard无法通过浏览器访问,但是查看端口是被占用的

Hlang--用Python写个编程语言-变量的实现

文章目录 前言语法规则表示次幂实现变量实现优先级实现步骤解析关键字语法解析解释器总结前言 先前的话,我们终于是把我们整个架子搭起来了,这里重复一下我们的流程,那就是,首先,我们通过解析文本,然后呢遍历文本当中的我们定义的合法关键字,然后呢,把他们封装为一个T…

DataFrame.query()--Pandas

1. 函数功能 Pandas 中的一个函数,用于在 DataFrame 中执行查询操作。这个方法会返回一个新的 DataFrame,其中包含符合查询条件的数据行。请注意,query 方法只能用于筛选行,而不能用于筛选列。 2. 函数语法 DataFrame.query(ex…

星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速

目录 前言 一、思路 二、调整小蜜蜂的移速 三、限制活动范围 四、继续重构 总结 前言 前面我们已经让小蜜蜂左右移动起来了,而且是连续的左右移动,但是在使用的过程中,因为我使用的是笔记本电脑,所以屏幕比较小,设…

【数据库】表操作 习题总结

目录 关系建表 数据库sql的执行顺序 内外连接的写法 1.设计一张商品表 2.设计一张老师表 3.设计一张图书表 4.查询练习 5.查询练习 6.设计一个考勤系统 7.设计一个学校宿舍管理系统 8.设计一个车辆违章系统 9.设计一个学校食堂管理系统 10.有一张员工表emp&#xf…

OpenCV笔记之solvePnP函数和calibrateCamera函数对比

OpenCV笔记之solvePnP函数和calibrateCamera函数对比 文章目录 OpenCV笔记之solvePnP函数和calibrateCamera函数对比1.cv::solvePnP2.cv::solvePnP函数的用途和工作原理3.cv::solvePnP背后的数学方程式4.cv::SOLVEPNP_ITERATIVE、cv::SOLVEPNP_EPNP、cv::SOLVEPNP_P3P5.一个固定…

RNN模型简单理解和CNN区别

目录 神经网络:水平方向延伸,数据不具有关联性 ​ RNN:在神经网络的基础上加上了时间顺序,语义理解 ​RNN: 训练中采用梯度下降,反向传播 ​ 长短期记忆模型 ​输出关系:1 toN,N to N 单入…

python 各种疑难杂包安装方法与踩坑记录

常用招数: 网络问题:切换网络线路/开关科学、启用/不用国内镜像 包找不到:启用/不用国内镜像、尝试conda、pip、source等多种安装方式 gdal、rasterio 参考链接: python rasterio库安装具体流程 - 知乎 Python安装gdal,raster…

MySQL——基础——外连接

一、外连接查询语法:(实际开发中,左外连接的使用频率要高于右外连接) 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...; 相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN …

前端处理图片文件的方法

在项目开发过程中&#xff0c;有一个需求&#xff0c;需要前端对上传的图片进行处理&#xff0c;以字符串的形式传给后端&#xff0c;实现效果如下&#xff1a; 1.上传图片的组件 在该项目中&#xff0c;使用了element plus组件库 <el-uploadv-model:file-list"fileL…

函数式编程

函数式编程&#xff08;lambda&#xff09; 哈喽&#xff0c;大家好&#xff0c;又到了技术成长的一天。今天向大家分享一个编程利器-函数式编程之lambda。Lambda函数式编程在前端后端编程中使用非常广泛&#xff0c;我们现在就一起去深入了解一下它是什么&#xff0c;怎么用。…

飞天使-k8s基础组件分析-pod

文章目录 pod介绍pod 生命周期init 容器容器handlerpod中容器共享进程空间sidecar 容器共享 参考链接 pod介绍 最小的容器单元 为啥需要pod? 答: 多个进程丢一个容器里&#xff0c;会因为容器里个别进程出问题而出现蝴蝶效应&#xff0c;pod 是更高级的处理方式pod 如何共享相…

C语言学习系列-->【关于qsort函数的详解以及它的模拟实现】

文章目录 一、概述二、qsort函数参数介绍三、qsort实现排序3.1 qsort实现整型数组排序3.2 qsort实现结构体数组排序 四、模拟实现qsort函数 一、概述 对数组的元素进行排序 对数组中由 指向的元素进行排序&#xff0c;每个元素字节长&#xff0c;使用该函数确定顺序。 此函数使…

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

目录 一.拉取镜像 二.运行镜像生成容器实例 三.登录 环境&#xff1a;centos7 一.拉取镜像 使用docker pull命令来拉取MySQL和own cloud的镜像 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker images [rootlocalhost ~]# docker images REPOSITORY…

Vue Element upload组件和Iview upload 组件上传文件

今天要分享的是使用这俩个UI组件库的upload组件分别实现调用组件本身的上传方法实现和后台交互。接下来就是开车的时间&#xff0c;请坐稳扶好~ 一、element upload组件传送门 1、html文件 <el-upload ref"uploadRef" :action"uploadUrl" :data"…

【校招VIP】前端校招考点之行内/块级元素

考点介绍&#xff1a; 行内元素会在一条直线上排列&#xff08;默认宽度只与内容有关&#xff09;&#xff0c;都是同一行的&#xff0c;水平方向排列。块级元素各占据一行&#xff08;默认宽度是它本身父容器的100%&#xff08;和父元素的宽度一致&#xff09;&#xff0c;与内…