首页 文章 精选 留言 我的

精选列表

搜索[人设自定义],共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

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

jeecmsX1.3 发布,低代码自定义生成表格

用户不需要懂设计与编程,完全通过可视化拖拽的方式所见即所得的创建任何自己想要的表单,这是jeecmsX1.3 所追求的。 1、无需设计和编程,可视化拖拽式创建:可以根据不同的节日、场景及业务需要调整表单背景、页眉、字体大小、颜色、组件大小间距等属性,并且能实时预览所配置的效果,整个过程不需要设计师和开发人员参与,轻松创建想要的表单。 2、一次创建可同时应用到PC、手机和平板端:表单只需编辑一次,即可同时在PC、手机和平板端生效并且获得很好的现象效果。 3、反馈结果实时呈现,能够自由导出数据:在管理系统中可通过图表或表格的方式实时查看表单的反馈结果,支持反馈结果的管理和导出,支持对表单填写人员的来源及趋势跟踪统计。 反馈结果统计 来源以及趋势分析 后端技术 SpringBoot2 快速开发框架 SpringMVC 5.0 Spring5.0 SpringSecurity 安全组件 JPA(Hibernate实现) Spring-Data-JPA 持久层组件 QueryDSL 持久层扩展 Ehcache、Redis 缓存组件 Lucene7.4、Elasticsearch6.8 索引组件 Flowable6.4.2 工作流引擎 Hanlp1.7(中文分词组件) Quartz 2.3.0 定时任务 Druid1.1.6连接池 geoip2 2.12.0 IP库 Slf4j 日志 Kaptcha 2.3.2 验证码 FreeMarker 模板渲染 JWT 0.9 TOKEN组件 Fastjson 1.2.58 JSON组件 Easypoi 3.2.0 导出组件 Zxing 3.2.0 二维码组件 sharding-sphere 3.0 数据库中间件组件 spring-session-data-redis session redis支持 前端技术 脚手架 vue-cli 3 前端框架 vue 2.6.10 路由 vue-router 3.0.3 数据存储 vuex 3.0.1 国际化 vue-i18n 8.11.2 UI组件库 element-ui 2.11.1 HTTP请求 axios 0.18.0 源码下载地址:http://www.jeecms.com/download.htm 前台演示地址:http://demo.jeecms.com 后台体验地址:http://demo.jeecms.com/jeecms/index.html

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册