Shader 渐变屏幕

渐变

前置工作,创建缓冲,对顶点着色器传递顶点数据

function main() {var canvas = document.getElementById('webgl');var gl = getWebGLContext(canvas);if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) returnvar n = initVertexBuffers(gl);
}function initVertexBuffers(gl) {var vertices = new Float32Array([-1, 1, -1, -1, 1, -1, 1, 1]);var n = 4;var a_Position = gl.getAttribLocation(gl.program, 'a_Position');var vertexBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);gl.enableVertexAttribArray(a_Position);return n;
}

顶点着色

var VSHADER_SOURCE ='attribute vec4 a_Position;\n' +'void main() {\n' +'  gl_Position = a_Position;\n' +'}\n';

思考,最终操作改变每个片元的颜色,就是根据uv坐标的不同逐片元计算,使用cos控制周期性效果

uv坐标:二维空间每个像素绝对位置(0,0 ~ 宽高) gl_FragCoord.xy  /  设备分辨率

cos周期变化:delta时间,每帧间隔为主键

对片元着色传递这些控制变量

  let time = Date.now();let iTime = 0;let iResolutionAddr = gl.getUniformLocation(gl.program, "iResolution");let iTimeAddr = gl.getUniformLocation(gl.program, "iTime");gl.clear(gl.COLOR_BUFFER_BIT);let loop = () => {let nowTime = Date.now();let dt = (nowTime - time) * 0.002;iTime += dt;time = nowTime;gl.uniform2f(iResolutionAddr, 1536, 865); // 传递分辨率gl.uniform1f(iTimeAddr, iTime); // 传递时间gl.clearColor(0, 0, 0, 0);gl.drawArrays(gl.TRIANGLE_FAN, 0, n);requestAnimationFrame(loop);};loop();

片元着色

var FSHADER_SOURCE ='#ifdef GL_ES\n' +'precision mediump float;\n' +'#endif\n' +'uniform vec2 iResolution;\n' + // 屏幕分辨率'uniform float iTime;\n' +'void main() {\n' +'vec2 uv = gl_FragCoord.xy / iResolution;' +  // 计算uv 0~1// cos 分别计算 v.x, v.y, v.z 的余弦值,返回 vec3(-1~1, -1~1, -1~1)'vec3 c = 0.5 + 0.5 * cos(iTime + uv.xyx + vec3(0, 2, 4));' +  // vec3 0~1 'gl_FragColor = vec4(c, 1.0);\n' +'}\n';

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

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

相关文章

HBM 发展史与前景(持续更新)

主页: 元存储博客 文章目录 前言1. JEDEC 规范2. HBM 发展历程3. HBM 应用场景4. HBM 市场前景5. 发展挑战 翻译自: https://namu.wiki/w/HBM 前言 NVIDIA H2 上的 HBM100e。 1. JEDEC 规范 2. HBM 发展历程 HBM技术曾被视为一种噱头,因为它…

PSAvatar:一种基于点的可变形形状模型,用于3D高斯溅射的实时头部化身创建

PSAvatar: A Point-based Morphable Shape Model for Real-Time Head Avatar Creation with 3D Gaussian Splatting PSAvatar:一种基于点的可变形形状模型,用于3D高斯溅射的实时头部化身创建 Zhongyuan Zhao1,2, Zhenyu Bao1,2, Qing Li1, Guoping Qiu3,…

工时管理软件全攻略,8大关键因素一网打尽!

工时管理往往与项目管理与人力资源结合起来,考察每位员工的绩效指标。可以说,工时管理软件至关重要。什么叫工时管理?考虑到工时管理软件的八个关键要素包含:功能、使用体验、集成能力、扩展性、成本效率、安全隐私、技术支持、用…

javaWeb项目-智慧餐厅点餐管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JavaScript Java…

【漏洞复现】泛微e-cology ProcessOverRequestByXml接口存在任意文件读取漏洞

漏洞描述 泛微e-cology依托全新的设计理念,全新的管理思想。 为中大型组织创建全新的高效协同办公环境。 智能语音办公,简化软件操作界面。 身份认证、电子签名、电子签章、数据存证让合同全程数字化。泛微e-cology ProcessOverRequestByXml接口存在任意文件读取漏洞 免责声…

虚拟机磁盘剩余空间不足

VMware 弹出提示: 对文件“E:\Virtual Machine\CentOS 7 1810 的克隆 (2)\CentOS 7 1810-cl1.vmdk”的操作失败。 如果该文件位于远程文件系统上,请确保网络连接以及该磁盘所在的服务器正常工作。如果该文件位于可移动介质中,请重新连接该介…

从零自制docker-11-【pivotRoot切换实现文件系统隔离】

文章目录 busyboxdocker run -d busybox topcontainerId(docker ps --filter "ancestorbusybox:latest"|grep -v IMAGE|awk {print $1})docker export -o busybox.tar $containerId or sudo docker export 09bbf421d93f > ./busybox.tar tar -xvf busybox.tar -C …

nvm下载的node没有npm

nvm下载的node没有npm 相信大家最近可能发现自己使用的nvm下载nodejs没有npm了。 会出现这种情况: C:\Users\89121>nvm install 15 Downloading node.js version 15.14.0 (64-bit)... Complete Downloading npm version 7.7.6... Download failed. Rolling Bac…

如何查找一篇英文文献的源代码?(论文中没有源代码链接时)如何查找一篇论文的实现代码从而复现论文?

有两个网址,从这两个网址里面能找到论文相关代码,但不确定是不是人家论文里的源代码,但是根据论文实在找不到的情况下,只能试试这两个网址了 1. https://paperswithcode.com/ 2. https://www.catalyzex.com/

【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本)

往期回顾 【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍-CSDN博客 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客【QT进阶】Qt Web混合编程之VS2019 C…

Geoserver的RESTful接口使用

概述 GeoServer提供了一个RESTful接口,客户端可以通过该接口获取有关实例的信息并进行配置更改。REST接口使用简单的HTTP调用,通过客户端就可以配置GeoServer,而无需使用Web管理接口。 Geoserver中的关系 工作区、数据源、图层、图层组以及…

随身WiFi真实测评推荐!格行vs新讯随身wifi对比,公认最好的随身WiFi格行随身wifi有什么优势?

在当前移动网络高度发达的时代,随身 WiFi 已成为人们出差、旅行等场景中不可或缺的工具。格行和新讯是目前比较受欢迎的无线随身wifi。本次评测将对比分析这两款产品的区别,做为随身WiFi推荐第一名的格行随身wifi到底有什么优势呢? 品牌对比&…

手写Java设计模式之工厂模式,附源码解读

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 工厂模式属于创建型…

网络流问题详解

1. 网络最大流 1.1 容量网络和网络最大流 1.1.1 容量网络 设 G(V, E)是一个有向网络,在 V 中指定了一个顶点,称为源点(记为 Vs),以及另一个顶点,称为汇点(记为 Vt);对…

基于java+springboot+vue实现的校园一卡通系统(文末源码+Lw+ppt)23-26

摘 要 近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,校园一卡通利用计算机网络实现信息化管理,使整个校园一卡通管理的发展和服务水平有显著提升。 本文拟采用java技…

Aws Nat Gateway

要点 NAT网关要能访问外网,所以需要部署在有互联网网关的Public子网中。 关键: NAT网关创建是选择子网,一定要选择公有子网(有互联网网关子网) 特别注意: 新建nat网关的时候,选择的子网一定…

【C++】哈希结构

目录 一,哈希结构的认识 1-1,哈希思想 1-2,哈希函数 1-3,哈希冲突 1-3-1,闭散列 1-3-2,开散列 二,哈希结构的封装实现 2-1,闭散列封装实现 ​编辑 2-2,开散列封…

genetic algorithm

genetic algorithm 遗传算法

C++入门5.内联函数,auto关键字,基于范围的for循环(C++11),指针空值nullptr(C++11)

本篇是C过度C初始的最后一篇,快快对入门须知的知识有个印象后,就可以顺顺利利的学习C的类了。 目录 内联函数: 内联函数的特性: auto关键字(C11): auto简介: 使用细则: auto不能推导的场…

基于java+springboot+vue实现的物业管理系统(文末源码+Lw+ppt)23-23

摘 要 快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,通过线上物业管理系统也就相继涌现。与此同时,人们开始接受方…