::BASIC_25_Text_Animation_1

BamgasiJM·2025년 10월 23일

Nannou <BASIC>

목록 보기
35/41
post-thumbnail

📝 Rust Code

use nannou::prelude::*;
use std::fs;

struct Model {
    font: text::Font,
    start_time: f32,
}

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

fn model(app: &App) -> Model {
    // 윈도우 설정
    app.new_window().size(1000, 800).title("Text Animation").view(view).build().unwrap();

    // 폰트 파일을 바이너리로 읽어서 로드
    let assets = app.assets_path().unwrap();
    let font_path = assets.join("fonts").join("NotoSans-ExtraBold.ttf");
    let font_data = fs::read(font_path).expect("폰트 파일을 읽을 수 없습니다.");
    let font = text::Font::from_bytes(font_data).expect("폰트를 불러올 수 없습니다.");

    Model {
        font,
        start_time: app.time as f32,
    }
}

fn update(_app: &App, _model: &mut Model, _update: Update) {}

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

    let frame_no = frame.nth();
    if frame_no == 0 {
        draw.background().color(hsla(0.0, 0.0, 0.01, 1.0));
    } else {
        draw.rect().w_h(1000.0, 800.0).color(hsla(0.0, 0.0, 0.01, 0.02));
    }

    let t = (app.time as f32) - model.start_time;
    let x_wave = (t * 0.5).sin();
    let y_wave = (t * 1.0).cos();

    // 텍스트를 직접 지정
    let text_str = "Bamgasi";

    draw.text(text_str)
        .font(model.font.clone())
        .font_size(200)
        .no_line_wrap()
        .x(x_wave * 150.0)
        .y(y_wave * 50.0)
        .color(rgba(0.9, 0.4, 0.6, 0.9));

    draw.to_frame(app, &frame).unwrap();
}
profile
Coding Art with Blender / oF / Processing / p5.js / nannou

0개의 댓글