粒子系统(二):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等. 需要注意的是,与其他标签 ...
随机推荐
- conda创建py27虚拟环境安装theano(anaconda3)
现在python3已经成为主流的python环境,大部分的package都兼容python3,仍然有一小部分,或者说是某一领域的package需要使用python2.本人现在主要在利用python做机 ...
- OpenStack中的rabbitmq的配置方法
OpenStack中的rabbitmq的配置方法 author:headsen chen 2017-10-11 17:24:58 个人原创,允许转载,转载请注明作者,出处,否则依法追究法律责任 ...
- IPFS: BitSwap协议(数据块交换)
原创 2018-01-11 飞向未来 IPFS指南 BitSwap协议 IPFS节点之间是如何进行数据交换的?本文来讲一下这个问题. IPFS在BitTorrent的基础上实现了p2p数据交换协议:B ...
- poj 2503 查字典
Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...
- 简述Java三大特性
1.面向对象有三大特性,分别是:封装.继承和多态.2.封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,有些属性是不希望公开的,或者说被其他对象访问的,所以我们使用private ...
- 设计模式 --> (12)装饰模式
装饰模式 时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一 些功能,最简单的做法就是修改接口,添加函数, ...
- Tomcat服务器的常用配置
1.如何修改端口号, tomcat启动后经常会报端口冲突, 怎么办 如果部署在Linux环境下面, 首先使用netstat -apn命令检查是否是真的端口已经被占用了 如果真的被占用,进入tomcat ...
- 复习C#
(1)public共有访问.该修饰符可用于类和结构的成员,可用于命名空间下直接定义的类型,对于类和结构成员,如果声明为共有的,那么除自身的成员,外部成员也可以访问 (2)private限制为私有访问. ...
- 有关java中的hashCode问题
1. HashSet集合存储数据的结构(哈希表) 1.1 什么是哈希表? 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会 ...
- 在CentOS7.1上安装Gitlab碰到的问题及解决方法
一 前言 关于在CentOS7上安装Gitlab, 官方文档已经很详细了,步骤大家按照官方的安装文档一步一步安装即可, 这里就不在累述.官方安装文档地址: https://about.gitlab. ...