准备

  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绘制精美图案的更多相关文章

  1. canvas一周一练 -- canvas绘制马尾图案 (5)

    运行效果: <!DOCTYPE html> <html> <head> </head> <body> <canvas id=" ...

  2. canvas——绘制解锁图案

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. java-js知识库之二——canvas绘制炫彩气泡

    现在使用canvas绘制气泡,虽说很多人都已经实现过了,可能方法都大同小异,但自己写和看别人写完全是两码事,自己会写的才是自己的,话不多说,直接上代码. 先来一张效果图: 现在上代码,代码有详细的注释 ...

  4. 使用 HTML5 canvas 绘制精美的图形

    HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HT ...

  5. HTML5 canvas 绘制精美的图形

    HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HT ...

  6. 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)

    小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...

  7. canvas基础入门(二)绘制线条、三角形、七巧板

    复杂的内容都是有简单的线条结合而成的,想要绘制出复杂好看的内容先从画直线开始 canvas绘制直线先认识几个函数 beginPath():开始一条路径,或重置当前的路径 moveTo(x,y):用于规 ...

  8. 应用canvas绘制动态时钟--每秒自动动态更新时间

    使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一. ...

  9. 如何写成高性能的代码(一):巧用Canvas绘制电子表格

    一.什么是Canvas Canvas是HTML5的标签,是HTML5的一种新特性,又称画板.顾名思义,我们可以将其理解为一块画布,支持在上面绘制矩形.圆形等图形或logo等. 需要注意的是,与其他标签 ...

随机推荐

  1. python全栈开发-Day5 元组、字典

    python全栈开发-Day5  元组.字典 一.前言 首先,不管学习什么数据类型,我们都带着以下几个问题展开学习: #1:基本使用 1 .用途 2 .定义方式 3.常用操作+内置的方法 #2:该类型 ...

  2. maven项目与普通项目的区别

    maven项目 1:创建方式不同 (web项目举例) 第一种: 第二种: 2:目录结构  稍有不同 3:Pom文件 添加依赖信息,需要那个jar包的时候  加入哪个jar包的依赖,要不然无法使用这个j ...

  3. Quikapp快应用开发入门

    快应诞生背景 微信的小程序使得很多原来需要调动APP的场景不复存在,正式由于微信小程序的冲击,3月20日,华为联手九大手机厂商,共同举办了“快应用”标准启动发布会.“快应用”是几家手机厂商基于硬件平台 ...

  4. gulp和webpack之间的区别

    webpack 是一个打包工具 webpack 是用来把你的源文件打包成一个文件的,你做了一系列配置以后,可以用一句 webpack 实现打包的功能. webpack的作用是从若干个文件开始顺藤摸瓜, ...

  5. java错题集

    解析:java中,JavaDoc注释以 /** 开头(中间写内容)以*/结尾 解析:A对象是类的实例,不是集合,其余正确 解析:创建一个对象的语法为: 类名 对象名=new 类名();,因此正确答案为 ...

  6. java基础笔记(6)----面向对象的三大特性

    简介:面向对象的三大特性就是封装,继承,多态,是面向对象的核心. 封装 简介:封装是类的边界,可以对数据起到保护作用 特性:属性私有,提供公开的get/set方法 属性私有:private 数据类型 ...

  7. 去除input的自动填充色

    input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #ffffff inset !important; }

  8. 2018.3.29 DIV位置调整代码

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  9. beta冲刺3

    一,昨天的问题: 页面整理还没做 我的社团这边的后台数据库未完成,前端代码修改未完成. 二,今天已完成 页面整理基本完成,把登陆独立出来了,然后基本处理掉了多余页面(反正也没几个--) 我的社团这边试 ...

  10. Linux学习--线程控制

    关于线程控制,主要就是几个模块,我们一个一个消灭.消化: 一.线程创建: 1.先来看看在Linux环境下的线程创建函数: 分析:意思很明显: 1.函数名是 pthread_create  : 2.功能 ...