webgl-attribute、uniform、varying三者的区别

news2024/11/27 22:32:37

通用js:

let canvas = document.getElementById('webgl')

canvas.width = window.innerWidth

canvas.height = window.innerHeight

let ctx = canvas.getContext('webgl')

attribute:

范围: 只适用于vertexShader,将js代码中的数据传递给vertexShader。

使用方式:声明一个变量a_Position

let vertexSource = `

attribute vec2 a_Position;

void main() {

  gl_Position = vec4(a_Position, 0.0, 1.0);

  gl_PointSize = 10.0;

}

`

//获取变量内存位置

let aPosition = ctx.getAttribLocation(ctx.program, "a_Position")

//以为就是1f,二维就是2f,三维就是3f...,给变量内存位置设置赋值

ctx.vertexAttrib2f(aPosition, x, y)

uniform

范围:适用于vertexShader或fragmentShader,将js代码中的数据传递给vertexShader或fragmentShader

注意:在使用uniform时必须在前一行添加precision mediump float;确定精度

使用方式:声明一个变量u_color

let fragmentSource = `

precision mediump float;

uniform vec3 u_color;

void main (){

  gl_FragColor = vec4(u_color, 1.0);

}

`

    //设置颜色

    let color = ctx.getUniformLocation(ctx.program, "u_color")

    ctx.uniform3f(color, 1.0, 0.0, 0.0)

varying

范围:是将vertexShader中的数据传给fragmentShader,而无法直接通过js进行数据传递

注意:使用时需要两边同时varying声明一个相同变量名称的变量,用于数据传递

使用方式:

//创建顶点资源和像素资源(颜色)

let vertexSource = `

attribute vec2 a_Position;

attribute vec3 a_color;

varying vec3 u_color;

void main() {

  u_color = a_color;

  gl_Position = vec4(a_Position, 0.0, 1.0);

  gl_PointSize = 10.0;

}

`

let fragmentSource = `

precision mediump float;

varying vec3 u_color;

void main (){

  gl_FragColor = vec4(u_color, 1.0);

}

`

    let a_color = ctx.getAttribLocation(ctx.program, "a_color")

    ctx.vertexAttrib3f(a_color, 1.0, 0.0, 0.0)

流程:

 

 

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

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

相关文章

知识图谱扩充|蜕变测试|蜕变关系

目录 前言:概念定义 什么是蜕变测试? 那么,怎么进行蜕变测试呢? 1. 生成蜕变关系 a 等价关系 b 混排关系 c 交集关系 d 并集关系 2. 生成蜕变用例 3. 执行蜕变用例 4. 校验蜕变关系 学术报告 一、蜕变测试MT 二、蜕变…

【id:32】【20分】B. Date(类与构造)

题目描述 下面是一个日期类的定义,请在类外实现其所有的方法,并在主函数中生成对象测试之。 注意,在判断明天日期时,要加入跨月、跨年、闰年的判断 例如9.月30日的明天是10月1日,12月31日的明天是第二年的1月1日 2月…

vue2路由(下)

编程式路由导航 通过点击按钮实现push和replace俩种模式的跳转 实现:就是通过$router原型里面的方法 也能实现路由的跳转和后退,分别采用的是$router里面的black和forward方法 感觉就是BOM对象中的history对象里面的方法 正是前进,后是后…

快鲸scrm | 三个步骤,快速打造企业长效私域营销阵地

快鲸scrm对企业微信私域流量玩法进行系统梳理,把企业微信用户运营拆解为“获客”、“转化”和“服务”这三个关键步骤,从点到面,为企业私域运营提供可行性的解决方案。 一、构建私域流量管理机制 用户是企业发展的基础,用户增长对…

三电技术之电控技术

三电技术之电控技术 1 基本功能 整车控制系统能够实现对汽车动力、舒适度、安全性以及能耗等多方面进行调整优化,配合大数据让电动汽车拥有更好的操作性和可靠性,具体来讲整车控制器对电动汽车主要有以下功能: 数据交互管理:整…

mybatis-plus-join MPJ连表查询 这样写太香了!

mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接,你还是得老老实实的打开xml文件,手写上一大段…

【unity实战】用对象池设计制作Dash冲锋残影的效果

什么是对象池? 在Unity中,对象池是一种重复使用游戏对象的技术。使用对象池的好处是可以减少游戏对象的创建和销毁,从而提高游戏的性能。如果不使用对象池,每次需要创建游戏对象时,都需要调用Unity的Instantiate函数,这会导致内存分配和垃圾回收的开销。而使用对象池,可…

李宏毅 深度学习【持续更新】

目录pytorch快速入门csdn快速入门OS包PIL包Opencv包Dataset类Tensorboard的使用torchvision.transforms 的使用torchvision中数据集的使用DataLoader的使用(torch.utils.data)神经网络的搭建nn.Module深度学习 李宏毅Chatgpt1 研究方向2 Chatgpt学习的步骤3 Fine tune vs. Prom…

【Linux内网穿透】使用SFTP工具快速实现内网穿透

文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术,可以使得内网服务可以被外网访问。以下是内网穿透的一些应用: 远程控制:通过内…

九【springboot】

Springboot一 Spring Boot是什么二 SpringBoot的特点1.独立运行的spring项目三 配置开发环境四 配置开发环境五 创建 Spring Boot 项目1.在 IntelliJ IDEA 欢迎页面左侧选择 Project ,然后在右侧选择 New Project,如下图2.在新建工程界面左侧&#xff0c…

深入理解PyTorch中的train()、eval()和no_grad()

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

【数据结构】栈的实现

😛作者:日出等日落 📘 专栏:数据结构 🌹 如果说,读书是在奠定人生的基石,在梳理人生的羽毛,那么,实践,就是在构建人生的厅堂,历练人生的翅膀。是不…

阿里P7晒工资条,看完好扎心了……

前几天,有位老粉私信我,说看到某95后学弟晒出阿里P7的工资单,他是真酸了…想狠补下技术,努力冲一把大厂。 为了帮到他,也为了大家能在最短的时间内做面试复习,我把软件测试面试系列都汇总在这一篇文章了。 …

自然语言处理: 知识图谱的十年

动动发财的小手,点个赞吧! NLP 中结合结构化和非结构化知识的研究概况 自 2012 年谷歌推出知识图谱 (KG) 以来,知识图谱 (KGs) 在学术界和工业界都引起了广泛关注 (Singhal, 2012)。作为实体之间语义关系的表示,知识图谱已被证明与…

ECharts 横向柱状图自动滚动

核心代码 const seriesList [120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 120, 200]; const xAxisList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; const dataZoomEndValue 6; // 数据窗口范围的结束数值(一次性展示几个) dataZoom: [{show: false, // 是否显示滑动…

Java面向对象高级【类加载器】

目录 Java程序是怎样被运行的 类加载器的作用 加载类文件 链接类 定位类 类加载器间的委派 实现类的隔离 类加载器的类型 启动类加载器(Bootstrap Class Loader) 扩展类加载器(Extension Class Loader) 应用程序类加载器…

数据结构和算法学习记录——二叉树的非递归遍历(中序遍历、先序遍历、后序遍历)

目录 中序遍历 代码实现 思路图解 先序遍历 代码实现 后序遍历 思路图解 二叉树的非递归遍历运用到堆栈 中序遍历 循环的思路是 遇到一个节点,就把它压栈,并去遍历它的左子树。当左子树遍历结束之后,从栈顶弹出这个节点并访问…

MybatisPlus主键策略

Mybatis默认主键策略是TableId(type IdType.ASSIGN_ID) 这是默认策略雪花算法 此时主键类型可以是String 数据表字段类型可以是bigint int varchar 无需数据表主键自增 TableId(type IdType.ASSIGN_AUTO) 是主键自增策略:该策略为跟随数据库表的主键递增策略&…

大数据挖掘建模平台产品功能特点

大数据挖掘建模平台是面向大数据挖掘教学实训的工具。在“泰迪杯”数据挖掘挑战赛中大多学生都有使用到该工具,平台采用可视化操作方式,通过丰富内置算法,帮助用户快速、一站式的进行数据分析及挖掘建模。可应用于处理海量数据、高复杂性的数…

C语言判断素数的实现及数学原理

本篇博客会讲解如何使用C语言来判断一个整数是不是素数。 实现方法 如何判断一个数是不是素数呢?如果这个数只能被1或者它自己整除,那么它就是一个素数。 如何写代码来判断呢?假设要判断一个数num是不是素数,就让2~(num-1)的数…