首页 文章 精选 留言 我的

精选列表

搜索[规则引擎],共10000篇文章
优秀的个人博客,低调大师

PixiJS+自定义Shader实现不规则图片扫光效果

本来打算用原生WebGL来实现,但是水平有限,关于WebGL能讲的干货并不多,而且繁琐的准备工作对没有了解过的小伙伴也过于枯燥乏味,于是干脆用已经封装好大部分底层细节的PixiJS来实现了。 相信很多前端在做一些活动页面的时候都碰到过扫光效果的需求,有很多dom+css的奇技淫巧可以做到,比如 ①直接用一个光照图片从原图上飞过,用加了overflow:hidden 的元素限制显示区域。 ②把一张已经渲染出光照的图片盖在原图上,通过css的clip方法来裁剪出光照区域。 ③简单粗暴地使用 序列帧/gif/视频 来完成动画。 ④使用css的filter滤镜来添加高光。 当然基于①、②、③的原理,在canvas2D上也能方便地实现个功能。 虽然,但是,精zuan益niu求jiao精jian的我肯定不能满足于这些小打小闹的实现方式,图像处理自然shader就可以排上用场了。 js相关逻辑很简单: const stats = new Stats() document.body.appendChild(stats.domElement) let pageWidth = 0 let pageHeight = 0 const $canvas = document.querySelector('canvas') const renderer = new PIXI.Renderer({ view: $canvas, width: pageWidth, height: pageHeight, transparent: true, autoDensity: true, antialias: true }) let uniforms = null const stage = new PIXI.Container() stage.name = 'stage' const sprite = new PIXI.Sprite() sprite.name = 'sprite' sprite.anchor.set(0.5, 0.5) sprite.position.set(0, 0) stage.addChild(sprite) let pauseAt = 0 const ticker = new PIXI.Ticker() const loop = function () { stats.begin() // 性能监控 // 移动光线 if (uniforms) { if (uniforms.offsetX >= 2.3) { uniforms.offsetX = 0 pauseAt = performance.now() } else if (!pauseAt || performance.now() - pauseAt > 1000) { uniforms.offsetX += 0.01 pauseAt = 0 } } renderer.render(stage) stats.end() } ticker.add(loop) const img = 'pyro.png' const loader = new PIXI.Loader() loader.add([img]) loader.onComplete.add(async () => { // 获取材质 sprite.texture = loader.resources[img].texture // 获取片元着色器代码 const res = await fetch('./fragmentShader.frag') const fragStr = await res.text() // 添加 uniforms 变量 uniforms = { offsetX: 0.0, size: [sprite.width, sprite.height] } // 使用默认顶点着色器来创建过滤器 const filter = new PIXI.Filter(null, fragStr, uniforms) sprite.filters = [filter] // 开始动画循环 ticker.start() }) loader.load() const onResize = (e) => { pageWidth = document.body.clientWidth pageHeight = document.body.clientHeight sprite.position.set(pageWidth * 0.5, pageHeight * 0.5) renderer.resize(pageWidth, pageHeight) } onResize() window.onresize = onResize 需要提到的几点: ① pauseAt是为了让两次扫光的周期间隔一段时间,我这里是1秒 ② 传入Filter的 uniforms.size 属性是为了获取争取的采样坐标。PixiJS在片元着色器中提供的内置varying变量vTextureCoord 使用的是 input coords,而不是 filter coords。即Filter的贴图尺寸是2的幂,比原贴图要大。 这里是默认顶点着色器的源码,可以看到它传递vTextureCoord前十如何计算出来的。 这是片元着色器的代码: varying vec2 vTextureCoord; uniform vec2 inputPixel; uniform sampler2D uSampler; uniform vec2 size; uniform float offsetX; // 光束偏移距离(归一化) void main(void) { vec2 uv = vTextureCoord.xy * inputPixel.xy / size.xy; vec4 color = texture2D(uSampler, vTextureCoord); float y = uv.y; float x = uv.x - offsetX; if (color.a >= 1.0) { // 一粗一细两束光线 if ((y < -x && y > -x - 0.1) || (y < -x - 0.2 && y > -x - 0.25)){ color = mix(color, vec4(1.0), 0.5); } } gl_FragColor = color; } ①vec2 normalizedCoords = vTextureCoord.xy * inputPixel.xy / size.xy; 用于把过滤器贴图缩放到原贴图的尺寸内; ② 这里画了一粗一细两束光线,分别是 y=-x 与 y=-x-0.1 两个函数图围起来的区域,和y=-x-0.3 与 y=-x-0.25 两个函数图围起来的区域; ③mix函数的原型是genType mix (genType x, genType y, genType a),结果会返回线性混合的x和y,即 x*(1−a)+y*a,我这里是以0.5的比例混合 最终效果如下: 完整代码戳这里 在线演示1、在线演示2

优秀的个人博客,低调大师

智能的IT 运营改变了混合多云管理的游戏规则

通过认知与自动化相结合的运营平台,实现企业混合多云架构智能运维的转型目标 数字化转型正在使企业面对一个动态的、多功能的、同时又复杂的混合多云环境。最近一项 IBM 市场开发与洞察 (MD&I) 研究发现,89% 的组织希望在未来两年内增加或保持云提供商的数量,而托管云服务的使用预计将增加两倍。但是,由于企业依赖更多平台来迁移和优化云中的工作负载,IT 运营会变得更加复杂。 企业需要更智能的IT 运营,其具有前瞻性、可预测性,并能够进行数据驱动决策,从而有助于建立新的、敏捷的业务模型,并支持创新计划,从而保持企业的领先地位。 传统IT 运营面临的挑战 IT 数据是碎片化和竖井式的,因此相互关联和分析的过程极其耗时; 如果不投资昂贵的数据科学技能,几乎不可能得出任何有意义的洞察或者根因分析; 确定正常基线行为和预测未来趋势的能力有限; 现在的工具和流程是被动的,根本没有能力预先解决可能发生的问题 CIO 们需要简单、直观和360°的IT 服务视图 一个集成的健康诊断系统,提供深层次的可执行的洞察; 挖掘如何更快地解决问题、优化基础设施环境和减少IT 支出的机会; 提供一个减少或消除数据转换、分析和展现中的人工成本的解决方案; 通过数据驱动的决策对项目和运营进行优先级排序,以增强业务服务体验 借助智能IT支持数据洞察 为了应对这一挑战,企业正转向通过提供端到端可见性和可操作的控制台跨混合多云环境进行自助服务管理。通过使用完全托管的IT 分析解决方案提供AIOps 即服务的交付模式,该方案可提取企业IT 运营数据,并采用预先构建的机器学习模型进行数据的统计、分析,提供深刻洞察及自动化服务。 AIOps 不仅意味着能够看到数据,而且能够在数据背后拥有一些智能操作,以便提供您自己看不见的洞察。它筛选数据以查找相关性、模式、趋势和风险,进行先发制人的管理。” 了解更多IBM混合多云战略,请访问:http://cloud.51cto.com/act/ibm202010/cloud#p3 【责任编辑: 张燕妮 TEL:(010)68476606】

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册