# 粒子初始化器

粒子初始化器(Initializer)负责粒子初始化粒子属性。目前提供了粒子位置、半径、尺寸、颜色、角度等属性的初始化器。此外,除了内置的初始化器,开发者可以根据实际需求扩展初始化器。

# 粒子角度初始化器

粒子角度初始化器(AngleInitializer)负责初始化粒子旋转角度。

import { AngleInitializer } from '@tx3d/particlesystem';

// 为发射器添加角度初始化器
emitter.addInitializer( new AngleInitializer( {

    min: 0.0,           // 最小旋转角度(单位:弧度)
    max: Math.PI * 0.5  // 最大旋转角度(单位:弧度)

} ) );
1
2
3
4
5
6
7
8
9

提示

AngleInitializer初始化参数,详见SpanParameters
AngleInitializer用于初始化PointSprite类型粒子的旋转角度,会随机生成一个旋转量。

# 粒子颜色初始化器

粒子颜色初始化器(ColorInitializer)负责初始化粒子颜色。

import { ColorInitializer } from '@tx3d/particlesystem';

// 为发射器添加粒子颜色初始化器
emitter.addInitializer( new ColorInitializer( {

    color: '#32de87',       // 基础颜色
    spreadColor: '#783425'  // 扩展颜色

} ) );
1
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  // 最大寿命(单位:秒)

} ) );
1
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  // 最大质量

} ) );
1
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 );
1
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 );
1
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 );
1
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 );
1
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

} ) );
1
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 );
1
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 );
1
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 );
1
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   // 粒子最大半径  

} ) );
1
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  // 最大旋转角度(单位:弧度)

} ) );
1
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 ]    // 扩展尺寸

} ) );
1
2
3
4
5
6
7
8
9

提示

SizeInitializer初始化参数,详见SizeInitializerParameters

尺寸计算公式:

size=baseSize+spreadSize(0.5Math.random())size = baseSize + spreadSize * ( 0.5 - Math.random() )

# 粒子速度初始化器

粒子速度初始化器(VelocityInitializer)负责初始化粒子速度。

import { VelocityInitializer } from '@tx3d/particlesystem';

// 为发射器添加速度初始化器
emitter.addInitializer( new VelocityInitializer( {

    velocity: [ 0, 15, 0 ],        // 基础速度
    spreadVelocity: [ 4, 5, 6 ]    // 扩展速度

} ) );
1
2
3
4
5
6
7
8
9

提示

VelocityInitializer初始化参数,详见VelocityInitializerParameters

速度计算公式:

velocity=baseVelocity+spreadVelocity(0.5Math.random())velocity = baseVelocity + spreadVelocity * ( 0.5 - Math.random() )

# 粒子向量速度初始化器

粒子向量速度初始化器(VectorVelocityInitializer)负责初始化粒子速度。

import { VectorVelocityInitializer } from '@tx3d/particlesystem';

// 为发射器添加向量速度初始化器
emitter.addInitializer( new VectorVelocityInitializer( {

    velocity: [ 0, 15, 0 ],
    theta: Math.PI

} ) );
1
2
3
4
5
6
7
8
9

提示

VectorVelocityInitializer初始化参数,详见VectorVelocityInitializerParameters

速度计算过程如下图示所示: avatar

  1. 计算基础速度(velocity)的法向量(normal
  2. 计算基础速度(velocity)绕法向量旋转 theta * Math.random() 后的向量v'
  3. 计算向量 v' 绕基础速度方向(velocity.normalize())旋转 2 * Math.PI * Math.random() 后的向量v''
  4. v'' 即粒子速度
Last Updated: 6/16/2023, 4:26:47 PM