# 粒子初始化器
粒子初始化器(Initializer)负责粒子初始化粒子属性。目前提供了粒子位置、半径、尺寸、颜色、角度等属性的初始化器。此外,除了内置的初始化器,开发者可以根据实际需求扩展初始化器。
# 粒子角度初始化器
粒子角度初始化器(AngleInitializer)负责初始化粒子旋转角度。
import { AngleInitializer } from '@tx3d/particlesystem';
// 为发射器添加角度初始化器
emitter.addInitializer( new AngleInitializer( {
min: 0.0, // 最小旋转角度(单位:弧度)
max: Math.PI * 0.5 // 最大旋转角度(单位:弧度)
} ) );
2
3
4
5
6
7
8
9
提示
AngleInitializer初始化参数,详见SpanParameters。
AngleInitializer用于初始化Point和Sprite类型粒子的旋转角度,会随机生成一个旋转量。
# 粒子颜色初始化器
粒子颜色初始化器(ColorInitializer)负责初始化粒子颜色。
import { ColorInitializer } from '@tx3d/particlesystem';
// 为发射器添加粒子颜色初始化器
emitter.addInitializer( new ColorInitializer( {
color: '#32de87', // 基础颜色
spreadColor: '#783425' // 扩展颜色
} ) );
2
3
4
5
6
7
8
9
提示
ColorInitializer初始化参数,详见ColorInitializerParameters。
# 粒子寿命初始化器
粒子寿命初始化器(LifeInitializer)负责初始化粒子寿命。
import { LifeInitializer } from '@tx3d/particlesystem';
// 为发射器添加粒子寿命初始化器
emitter.addInitializer( new LifeInitializer( {
min: 2.0, // 最小寿命(单位:秒)
max: 5.0 // 最大寿命(单位:秒)
} ) );
2
3
4
5
6
7
8
9
提示
LifeInitializer初始化参数,详见SpanParameters。
# 粒子质量初始化器
粒子质量初始化器(MassInitializer)负责初始化粒子质量。
import { MassInitializer } from '@tx3d/particlesystem';
// 为发射器添加粒子质量初始化器
emitter.addInitializer( new MassInitializer( {
min: 10.0, // 最小质量
max: 50.0 // 最大质量
} ) );
2
3
4
5
6
7
8
9
提示
MassInitializer初始化参数,详见SpanParameters。
# 粒子位置初始化器
粒子位置初始化器(PositionInitializer)负责初始化粒子位置,位置初始化器需要配合位置初始区域(Zone)使用。目前提供以下几种类型位置初始区域:
# BoxZone
BoxZone 立方体初始区域,在一个立方体范围内随机初始化粒子位置。
import { BoxZone, PositionInitializer } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new BoxZone( {
size: [ 1000, 10, 1000 ]
} ) );
// 为发射器添加位置初始化器
emitter.addInitializer( positionInitializer );
2
3
4
5
6
7
8
9
10
11
提示
BoxZone初始化参数,详见BoxZoneParameters。
# CircleZone
CircleZone 圆形初始区域,在一个圆范围内随机初始化粒子位置。
import { CircleZone, PositionInitializer } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new CircleZone( {
radius: 10.0,
emitFromShell: true
} ) );
// 为发射器添加位置初始化器
emitter.addInitializer( positionInitializer );
2
3
4
5
6
7
8
9
10
11
12
提示
CircleZone初始化参数,详见CircleZoneParameters。
# HemisphereZone
HemisphereZone 半球初始区域,在一个半球范围内随机初始化粒子位置。
import { HemisphereZone, PositionInitializer } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new HemisphereZone( {
radius: 10.0,
emitFromShell: true
} ) );
// 为发射器添加位置初始化器
emitter.addInitializer( positionInitializer );
2
3
4
5
6
7
8
9
10
11
12
提示
HemisphereZone初始化参数,详见CircleZoneParameters。
# LineZone
LineZone 直线初始区域,在一条直线上随机初始化粒子位置。
import { LineZone, PositionInitializer } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new LineZone( {
start: [ -50.0, 0.0, 0.0 ],
end: [ 50.0, 0.0, 0.0 ]
} ) );
// 为发射器添加位置初始化器
emitter.addInitializer( positionInitializer );
2
3
4
5
6
7
8
9
10
11
12
提示
LineZone初始化参数,详见LineZoneParameters。
# RingZone
RingZone 环形初始区域,在一个圆环内随机初始化粒子位置。
import { PositionInitializer, RingZone } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new RingZone( {
innerRadius: 1.0,
outerRadius: 3.0
} ) );
2
3
4
5
6
7
8
9
提示
RingZone初始化参数,详见RingZoneParameters。
# RouteZone
RouteZone 路线初始区域,在一条路线上随机初始化粒子位置。
import { PositionInitializer, RouteZone } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new RouteZone( [
[ 0.0, 0.0, 0.0 ],
[ 10.0, 0.0, 0.0 ],
[ 10.0, 5.0, 3.0 ],
[ -10.0, 0.0, -2.0 ]
] ) );
// 为发射器添加位置初始化器
emitter.addInitializer( positionInitializer );
2
3
4
5
6
7
8
9
10
11
12
13
14
# ScreenZone
ScreenZone 屏幕初始区域,在整个屏幕范围内随机初始化粒子位置。
import { PositionInitializer, ScreenZone } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new ScreenZone() );
// 为发射器添加位置初始化器
emitter.addInitializer( positionInitializer );
2
3
4
5
6
7
# SphereZone
SphereZone 球形初始区域,在一个球范围内随机初始化粒子位置。
import { PositionInitializer, SphereZone } from '@tx3d/particlesystem';
// 创建位置初始化器
const positionInitializer = new PositionInitializer( new SphereZone( {
radius: 10.0,
emitFromShell: true
} ) );
// 为发射器添加位置初始化器
emitter.addInitializer( positionInitializer );
2
3
4
5
6
7
8
9
10
11
12
提示
SphereZone初始化参数,详见CircleZoneParameters。
此外,除了内置的初始区域,开发者还可以根据实际需求扩展初始区域。
# 粒子半径初始化器
粒子半径初始化器(RadiusInitializer)负责初始化粒子半径。
import { RadiusInitializer } from '@tx3d/particlesystem';
// 为发射器添加半径初始化器
emitter.addInitializer( new RadiusInitializer( {
min: 9.0, // 粒子最小半径
max: 10.5 // 粒子最大半径
} ) );
2
3
4
5
6
7
8
9
提示
RadiusInitializer初始化参数,详见SpanParameters。
# 粒子旋转量初始化器
粒子旋转量初始化器(RotationInitializer)负责初始化粒子的旋转量。
import { RotationInitializer } from '@tx3d/particlesystem';
// 为发射器添加旋转量初始化器
emitter.addInitializer( new RotationInitializer( {
min: 0.0, // 最小旋转角度(单位:弧度)
max: Math.PI * 0.5 // 最大旋转角度(单位:弧度)
} ) );
2
3
4
5
6
7
8
9
提示
RotationInitializer初始化参数,详见SpanParameters。
RotationInitializer用于初始化Mesh类型粒子,会随机生成x、y、z三个方向的旋转量。
# 粒子尺寸初始器
粒子尺寸初始器(SizeInitializer)负责初始化粒子尺寸(长、宽、高)。
import { SizeInitializer } from '@tx3d/particlesystem';
// 为发射器添加尺寸初始化器
emitter.addInitializer( new SizeInitializer( {
size: [ 5.0, 10.0 ], // 基础尺寸
spreadSize: [ 2.0, 5.0 ] // 扩展尺寸
} ) );
2
3
4
5
6
7
8
9
# 粒子速度初始化器
粒子速度初始化器(VelocityInitializer)负责初始化粒子速度。
import { VelocityInitializer } from '@tx3d/particlesystem';
// 为发射器添加速度初始化器
emitter.addInitializer( new VelocityInitializer( {
velocity: [ 0, 15, 0 ], // 基础速度
spreadVelocity: [ 4, 5, 6 ] // 扩展速度
} ) );
2
3
4
5
6
7
8
9
# 粒子向量速度初始化器
粒子向量速度初始化器(VectorVelocityInitializer)负责初始化粒子速度。
import { VectorVelocityInitializer } from '@tx3d/particlesystem';
// 为发射器添加向量速度初始化器
emitter.addInitializer( new VectorVelocityInitializer( {
velocity: [ 0, 15, 0 ],
theta: Math.PI
} ) );
2
3
4
5
6
7
8
9
提示
VectorVelocityInitializer初始化参数,详见VectorVelocityInitializerParameters。
速度计算过程如下图示所示:
- 计算基础速度(velocity)的法向量(normal)
- 计算基础速度(velocity)绕法向量旋转 theta * Math.random() 后的向量v'
- 计算向量 v' 绕基础速度方向(velocity.normalize())旋转 2 * Math.PI * Math.random() 后的向量v''
- v'' 即粒子速度