Skip to main content

particles/
particles.rs

1//! CPU billboards: `cargo run --features 3d --example particles`.
2use ponko::*;
3
4// ANCHOR: particles
5fn setup(ctx: &mut Ctx) {
6    ctx.camera3d.position = vec3(0.0, 2.0, 7.0);
7    ctx.camera3d.look_at(vec3(0.0, 1.0, 0.0));
8    ctx.sky.atmosphere = false;
9    let emitter = ParticleEmitter3D::new(ParticleSettings3D {
10        rate: 120.0,
11        burst: 40,
12        lifetime: (0.7, 1.4),
13        speed: (2.0, 4.0),
14        shape: ParticleShape3D::Cone { angle: 0.45 },
15        gravity: vec3(0.0, -3.0, 0.0),
16        drag: 0.2,
17        size: (0.05, 0.13),
18        rotation: (0.0, std::f32::consts::TAU),
19        size_over_life: ParticleCurve::new(vec![(0.0, 0.5), (0.2, 1.0), (1.0, 0.0)]),
20        color_over_life: ParticleGradient::new(vec![
21            (0.0, Color::rgba(1.0, 0.7, 0.2, 1.0)),
22            (1.0, Color::rgba(1.0, 0.1, 0.0, 0.0)),
23        ]),
24        blend: ParticleBlend3D::Additive,
25        max_particles: 512,
26        seed: 42,
27        ..Default::default()
28    });
29    ctx.world.spawn((Transform3D::default(), emitter));
30}
31// ANCHOR_END: particles
32
33fn main() {
34    Game::new("Particles", 960, 640).run(setup);
35}