Nannouフレームワークに入門してみた
目次
クリエイティブコーディングフレームワークNannou Rust のクリエイティブコーディングフレームワークであるNannouに入門してみました! Rust 初心者 && 記事投稿は初めてなので,温かい目で見てください… Rust の環境構築が終わっていない方は,下記を参考にしてください. クリエイティブコーディングを簡単に説明すると, プログラミングを活用して, アート作品・アニメーション・イラスト・音楽・実体を持つ 作品などを作ってみよう!! という活動(ジャンル)のことです. https://nannou.cc/ Nannou はオープンソースの下に開発されており, シンプルで高速かつ信頼性の高いコードで, アーティストが自分自身を表現する事を容易にすることを目的としたライブラリであり, アート・アニメーション・音楽等を作成する為の沢山の機能が揃っています. 特にクリエイティブコーディングにおいては,グラフィック描画などの, 計算量が多いため,このメリットはとても大きいです. 筆者は WSL2 を使用しているため,VcXsrv を使用して,GUI を表示しています. 場合により,VcXsrv が使用するポートのファイアウォールを 開放する必要があります. VcXsrv の設定 とりあえずNannouGuideを見ながら, コーディングしていきます. まずは,Cargo で Project を作成し,Nannou を導入し, ガイドに則って空のウィンドウを作成します. [依存関係の追加] コードを見てみると,ソフトウェア設計パターンの一つである, MVC(Model-View-Controller)のような設計がされていますね このコードを実行してみると… 空のウィンドウが表示されましたね. 新しい Nannou プロジェクトを作成する場合,プログラムを開始するには 2 つのオプションがあり,それが nannou::sketch と nannou::app です. app ではセットアップするための関数や構造体が, sketch に比べて多いですが,結局のところ大きな違いはなく, 両者の切り替えも簡単にできるので,あまり気にしなくても大丈夫です. これ以降の記事では,基本は nannou::app を使用します. Nannou では,他のクリエイティブコーディングライブラリに比べて, 座標の指定が少し特殊であり, p5.js 等ではウィンドウ座標の原点が左上から始まりますが, nannou ではウィンドウの中心が原点に設定されています. これは nannou がデカルト座標を使用して,Window を記述しているためです.. x 値は右に向かう程増加し,左に向かう程減少 下記はウィンドウの中心に正方形を表示する例です. nannou では,通常,ウィンドウ空間内の位置を Pixel ではなく,Point で記述します. Nannou では静止画だけでなく,アニメーションを作成する事も可能です. 下記は大きさが変化しながら画面内を移動する正円のアニメーション例です. まずプロジェクトのルートに assets ディレクトリを作成し,画像ファイルを配置します. 筆者の環境では,WSL2 を使用しておりサウンドデバイスの設定が困難なので, Nannou を使用する際は,Windows/Mac で実行するのがおすすめです. どうしても WSL2 で実行したい場合は,下記の記事を参考にすると解決できると思います. WSL2 でホスト OS の SoundDevice を使用する方法 window の端に衝突した際にボールの色と方向を反転させて, 波紋を発生させるクリエイティブコーディングを使用した作品を作ってみました! 初めてNannouフレームワークにチャレンジしてみましたが, Rust の勉強にもなりますし,Rust を使用したクリエイティブコーディングに興味がある方は, 是非ともやってみてほしいです! Nannou 自体は,とても使いやすかったのですが,まだまだ情報が少ないので,もっとこのフレームワークを使って作品を作る方が増えると嬉しいです! 今度はNannou_Audioを使用した,音楽作成にも挑戦してみたいですね! はじめに
対象としている読者
そもそもクリエイティブコーディングとは?
nannou フレームワークの概要
なぜ Rust を使用するのか?
Rust を使用することで,下記のメリットが得られます.
筆者の環境
早速コードを書いてみる.
[]
= "0.19.0"
// Nannouのアイテムを一括インポート.
use *;
/// アプリケーションのメインモデルを表します.
/// モデルを初期化します.
///
/// # Arguments
///
/// * `_app` - `App` 構造体への参照.
///
/// # Returns
///
/// 初期化された `Model` 構造体.
/// イベントがトリガーされたときにモデルを更新します.(イベントハンドラ)
///
/// # Arguments
///
/// * `_app` - `App` 構造体への参照.
/// * `_model` - `Model` 構造体への参照.
/// * `_event` - トリガーされたイベント.
/// アプリケーションの描画処理を行います.
///
/// # Arguments
///
/// * `_app` - `App` 構造体への参照.
/// * `_model` - `Model` 構造体への参照.
/// * `_frame` - ビューをレンダリングするフレーム.
Sketch と App の違い
sketch app シンプル 複雑 簡単な創作に向いている 本格的な創作に向いている 座標系
y 値は上方向に向かう程増加し,下方向に向かう程減少
アニメーション
画像描画(テクスチャ)
use *;
サウンドアート 実際に作品を作ってみる!
Source
まとめ