粒子系统(二):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等. 需要注意的是,与其他标签 ...
随机推荐
- 微信小程序基于腾讯云对象存储的图片上传
在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...
- Linux环境下安装weblogic10.3.2
附件:weblogic10.3.2版本zip包和部署war包提取地址: weblogic.zip:https://pan.baidu.com/s/1Y1tmAhlXsO5Q4zPvOKGG5g 提取 ...
- 简单docker镜像修改方式
• 创建Dockerfile,文件内容如下: FROM nps:v1.0.1 ENTRYPOINT ["/usr/bin/init.sh"] • 启动基础镜像:docker run ...
- 不root手机的情况下查看Android数据库
最近写Android的时候发现想要读取数据库很不方便,使用adb工具的方法需要root手机,而华为手机root十分麻烦,需要解除密码,一些品牌手机即使root了也没有sqlite3命令,总之十分麻烦. ...
- 使用Mifare卡加密数据 笔记
Mifare 是最常用的射频卡,具体介绍网上太多,我就不说了.,很多城市的最早的地铁公交卡都是用这种卡,后来被破解后都换成智能卡了. 但是由于技术成熟,使用方便,成本低,现在很多小区门禁卡,停车卡,食 ...
- Spark单机版集群
一.创建用户 # useradd spark # passwd spark 二.下载软件 JDK,Scala,SBT,Maven 版本信息如下: JDK jdk-7u79-linux-x64.gz S ...
- 【Python】 zabbixAPI的包装pyzabbix
pyzabbix pyzabbix是zabbixAPI的第三方python包装.从网上莫名其妙地搞到了一份源码,看了一下之后发现实现方法还蛮巧妙的,感觉挺好的就记下来了.那些个源码本身其实也是一个个单 ...
- Algorithm --> 小于N的正整数含有1的个数
//https://leetcode.com/problems/number-of-digit-one/ Given an integer n, count the total number of d ...
- JWT 简介
JWT是一种用于双方之间传递安全信息的简洁的.URL安全的表述性声明规范.JWT作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息 ...
- [poj2002]Squares_hash
Squares poj-2002 题目大意:在笛卡尔坐标系中给出n个点,求这些点可以构成多少个正方形. 注释:$1\le n\le 10^3$,$-2\cdot 10^3\le x , y\le 2\ ...