June 8, 2021

Nannou:Rust製クリエイティブコーディングフレームワーク

未来の覇権フレームワーク

はじめに

  • Nannouちょっと使ってみた
  • イケてると思った理由は色々あるんだけど文章書くのがだるいので文献リンクとコードだけ残しておく

Nannou

参考になりそうなリンク集

作品例

描くもの迷ったときはとりあえずハート書いとけの精神. GIFで録画した際,30FPSに落ちてしまったけど実際はかなり速い.

img

use nannou::prelude::*;

const N_POINTS: i32 = 100;

fn main() {
    nannou::app(model).run();
}

struct Model {
    clicked_time: f32
}

fn model(app: &App) -> Model {
    app.new_window()
        .size(800, 800)
        .event(event)
        .view(view)
        .build()
        .unwrap();

    Model {
        clicked_time: 0.0
    }
}

fn event(app: &App, model: &mut Model, event: WindowEvent) {
    match event {
        MousePressed(_button) => {
            model.clicked_time = app.time;
        }
        _other => {}
    }
}

fn view(app: &App, model: &Model, frame: Frame) {
    let draw = app.draw();

    draw.background().color(srgb8(220, 220, 220));

    let t = app.time - model.clicked_time;
    let draw = draw
        .scale_x((-t).exp() * (t * 20.0).sin() * 0.2 + 1.0)
        .scale_y((-t).exp() * (t * 20.0).cos() * 0.2 + 1.0);

    let points = (0..N_POINTS).map(|k| {
        let t = 2.0 * PI * k as f32 / N_POINTS as f32;
        let x = 16.0 * t.sin().powi(3);
        let y = 13.0 * t.cos() - 5.0 * (2.0*t).cos() - 2.0 * (3.0*t).cos() - (4.0*t).cos();
        let point = pt2(x, y) * 12.0;
        (point, srgb8(248, 24, 24))
    });

    draw.polygon()
        .points_colored(points);

    // Write to the window frame.
    draw.to_frame(app, &frame).unwrap();
}

© eqs 2021