
๐ Rust Code
use nannou::prelude::*;
use nannou::noise::{NoiseFn, Perlin, Seedable};
fn main() {
nannou::app(model).update(update).run();
}
struct Model {
time: f32,
noise: Perlin,
}
fn model(_app: &App) -> Model {
_app.new_window().size(800, 800).view(view).build().unwrap();
Model {
time: 0.0,
noise: Perlin::new().set_seed(0),
}
}
fn update(_app: &App, model: &mut Model, update: Update) {
model.time += update.since_last.as_secs_f32();
}
fn view(app: &App, model: &Model, frame: Frame) {
let draw = app.draw();
draw.background().color(BLACK);
let grid_size = 10.0;
let win_w = app.window_rect().w();
let win_h = app.window_rect().h();
let cols = ((win_w / grid_size).ceil() as usize) + 1;
let rows = ((win_h / grid_size).ceil() as usize) + 1;
for x in 0..cols {
for y in 0..rows {
let pos_x = x as f32 * grid_size - win_w / 2.0;
let pos_y = y as f32 * grid_size - win_h / 2.0;
let noise_val = model.noise.get([pos_x as f64 / 200.0, (pos_y as f64 + model.time as f64 * 10.0) / 200.0]) as f32;
let brightness = map_range(noise_val, -1.0, 1.0, 0.0, 1.0);
draw.rect()
.x_y(pos_x, pos_y)
.w_h(grid_size, grid_size)
.color(hsla(model.time * 0.1, 1.0, brightness, 1.0));
}
}
draw.to_frame(app, &frame).unwrap();
}