はじめに
- Nannouちょっと使ってみた
- イケてると思った理由は色々あるんだけど文章書くのがだるいので文献リンクとコードだけ残しておく
Nannou
参考になりそうなリンク集
- モダンな言語のクリエーティブコーディング環境 – Quil, nannou | 永松 歩 | Ayumu Nagamatsu
- Nannou で始める Rust / Creative-Coding - Zenn
- nannou: An open-source creative-coding framework for Rust - WebGPU プログラミング
- Nannouで図形を描画して動かしてみる - Qiita
作品例
描くもの迷ったときはとりあえずハート書いとけの精神. GIFで録画した際,30FPSに落ちてしまったけど実際はかなり速い.
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();
}