粒子系统(二):Canvas绘制精美图案
准备
IDE:Visual Studio Code
Language:JavaScript / ECMAScript 6+
GitHub:Natural2D.JS
本文主要讲述 Particles - Walker 示例的实现步骤,不涉及具体的代码细节。
第一节 粒子概述
粒子是粒子系统最基本的组成元素。
粒子有哪些属性
颜色(Color):渲染颜色
位置(Location):渲染位置
年龄(Age):当前存活帧数
大小(Size):当前渲染直径
最大年龄(MaxAge):粒子的最大存活帧数
最大大小(MaxSize):粒子的最大渲染直径
属性如何变化?它们之间有什么关系
年龄逐帧增大
位置定向移动
大小与年龄成正比关系:Size = MaxSize * (Age / MaxAge)
粒子什么时候死亡?死亡后如何处理
当年龄超过最大年龄时认为它已经死亡
死亡后的一种处理方法是立即回收占用的资源
另一种是重置粒子的状态,即当作一个新的粒子
如何保留历史移动轨迹
在每帧绘制前蒙一层颜色不透明的矩形
若矩形的颜色随机渐变,会产生更好看的动态变化效果

图1-1 定向移动
第二节 力学运动
经典力学描述了物体的宏观运动形式。
需要扩展哪些属性
密度(Density):粒子的密度(可选的)
质量(Mass):粒子的质量
速度(Velocity):当前速度
加速度(Acceleration):当前加速度
速度上限(VelocityUpon):最大运动速度
属性之间的关系
2D物体质量与面积成正比,即 Mass = Density * (Size / 2) * (Size / 2) * PI
3D物体质量与体积成正比,即 Mass = Density * (Size / 2) * (Size / 2) * (Size / 2) *(4 / 3) * PI
若要简化计算,可以不考虑常量值,有时候我们无需和现实世界保持一致
粒子的牛顿万有引力运动
物体加速度的大小跟作用力成正比,跟物体的质量成反比,即 Acceleration = Force / Mass
引力大小与它们质量的乘积成正比与它们距离的平方成反比,即 Force = G * Mass1 * Mass2 / (Distance * Distance)

图2-1 引力运动
第三节 直线连线
粒子的渲染方式不是一成不变的。
有哪些简单的渲染方式?
绘制空心、实体圆形
绘制空心、实体矩形
绘制贴图
绘制连线 (下图的方式)

图3-1 粒子连线
第四节 树形拓扑
树形是自然界中常见的一种拓扑结构。
如何以父子层次结构组织粒子
子节点继承父节点的颜色
子节点初始位置相对父节点偏移适当距离
子节点只承受与父节点之间的牛顿万有引力 
图4-1 树形拓扑
第五节 中心旋转
一个图形绕着一个定点旋转一定的角度得到另一个图形的变化叫做旋转。
如何实现好看的旋转效果
设置画布中心点为旋转中心,然后旋转画布
若每帧的旋转角度随机渐变,可产生不同的动态效果
下方示例图片的随机效果
画布背景颜色随机渐变
画布旋转角度随机渐变
粒子父子节点相对位置的旋转角度渐变
粒子父子节点相对位置的距离系数渐变

图5-1 效果图一

图5-2 效果图二

图5-3 效果图三
附录
Demo:Particles - Walker
GitHub:Natural2D.JS
上一篇:粒子系统(一):从零开始画一棵树
粒子系统(二):Canvas绘制精美图案的更多相关文章
- canvas一周一练 -- canvas绘制马尾图案 (5)
运行效果: <!DOCTYPE html> <html> <head> </head> <body> <canvas id=" ...
- canvas——绘制解锁图案
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- java-js知识库之二——canvas绘制炫彩气泡
现在使用canvas绘制气泡,虽说很多人都已经实现过了,可能方法都大同小异,但自己写和看别人写完全是两码事,自己会写的才是自己的,话不多说,直接上代码. 先来一张效果图: 现在上代码,代码有详细的注释 ...
- 使用 HTML5 canvas 绘制精美的图形
HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HT ...
- HTML5 canvas 绘制精美的图形
HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HT ...
- 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)
小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...
- canvas基础入门(二)绘制线条、三角形、七巧板
复杂的内容都是有简单的线条结合而成的,想要绘制出复杂好看的内容先从画直线开始 canvas绘制直线先认识几个函数 beginPath():开始一条路径,或重置当前的路径 moveTo(x,y):用于规 ...
- 应用canvas绘制动态时钟--每秒自动动态更新时间
使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一. ...
- 如何写成高性能的代码(一):巧用Canvas绘制电子表格
一.什么是Canvas Canvas是HTML5的标签,是HTML5的一种新特性,又称画板.顾名思义,我们可以将其理解为一块画布,支持在上面绘制矩形.圆形等图形或logo等. 需要注意的是,与其他标签 ...
随机推荐
- js实现最长子串算法
var arr=["weeweadbshow","jhsaasrbgddbshow","ccbshow"]; function Longes ...
- Problem : 1013 ( Digital Roots )
tips:分析不够仔细,白费了许多功夫.输入数据的范围,平时几乎很少考虑的,这个以后得注意.代码检查不够仔细啊,以后得注意了 #include<iostream> using namesp ...
- 永久开启完整版Google Play
中国内地使用Play商店只能看见两个项目,即应用和游戏,但实际上有六个,见图.解决方法,第一,通过fqrouter2进入Play商店,见图,第二,通过google wallet. 参考网址:http: ...
- IE浏览器清除缓存没用
再想买更新JS和css文件之后, 使用 internet 里面的删除选项 发现样式和事件还是没用变 最终发现 需要 按 f12 找到这个清缓存才正常解决问题
- window.open打开文件乱码
问题:刚开始使用window.open在IE兼容模式下打开文件下载出现乱码. 一开始以为是文件名是中文导致的.然后使用a标签的download属性更改文件名解决. <a class=" ...
- Python : Module
在Python中,一个.py文件代表一个Module.在Module中可以是任何的符合Python文件格式的Python脚本.了解Module导入机制大有用处. 1 Module 组成 1.1 Mod ...
- Vue解析一之挂载全局变量与方法
1.在mian.js里面进行Vue对象的原型连的挂载Vue.prototype.$ajax = Ajax; 2.使用Mixin: VuVue.mixin({ data(){ return { Host ...
- oracle相同SID对外提供多个service_names
为数据库设置多个服务名(通过SCOPE=both设置,同时修改参数文件) SQL> show parameter service_names; NAME TYPE VALUE --------- ...
- Linux chown命令
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...
- Docker学习笔记(一)
什么是Docker? 1.基于Go语言开发的云开源项目,Docker的主要目标是通过对应用组件的 封装,分发,部署,运行等生命周期的管理,达到应用组件级别的 一次封装,到处运行. 2.可以将Docke ...