Quartz Composerにどっぷり!
キュービック天気予報

今回のテーマ

今回のテーマは、立方体に天気予報を表示するアニメーションを作るというものです。

推奨環境 この解説は、以下の環境を前提に作成し、動作確認等を行っています。ご確認ください。 改版履歴 アウトライン
Cubeに画像を貼付ける

今回のサンプルの完成予想図をまずは見ていただきましょう。名付けて「 キュービック天気予報 」。立方体の6面にいろんな天気予報の画像をインターネットからダウンロードしてきて貼付けてぐるぐる回すというものです。まさに、スクリーンセーバにはぴったり?ですね(^_^)。

Quartz Composerには、Cubeという直方体を表示するパッチが用意されています。それぞれの面には、色と画像の指定ができるようになっていますので、天気予報のサイトから画像をダウンロードしてきて、Cubeに流し込めば終わりです。

画像のダウンロードを行うのは、Image Downloaderというパッチです。ダウンロードする画像のURLをInspectorで入力して、Cubeの6つの「 xxx Image」の入力ポートに繋ぎます。URLは画像であればどこでも構いませんが、このサンプルではヤン坊マー坊天気予報のサイトを使わせていただいています。

スクリーンセーバにするのであれば、このURLの部分をPublishして、ユーザが設定可能にするとよいでしょう。

補足:Image Downloader パッチは、インターネット上の画像 ( http:// ) でもローカルのファイル ( file:// ) でも読み込むことが出来ます。Image Importer は、固定の画像データしか持てないので、途中で表示する画像を帰る時などは、Image Downloader の方が便利です。ただし、Image Downloader は、URL が指定されてから読み込みを行いますので、タイミングがシビアな場合は制御がちょっと難しくなります。

ぐるぐる回せ

後は、ぐるぐる回すだけです。LFO でも回すことが出来ますが、今回は、Interpolation パッチを使います。このパッチは、指定した 2 つの値の間を生成するものです。開始値を 0、終了値を 360 にしておけば、この間の値を順に生成してくれます。これで、ぐるぐる回すことが出来ます。

回転するには、Cube の [ X, Y, Z ] Rotation に Interpolation の Result を繋ぎます。3 つの Interpolation を作ることで、回転が単調にならないようにしています。先ほど書いたように、Start Value を 0、End Value を 360 にします。Duration で、この値の変化を何秒で行うかを指定します。大きくすればゆっくり変化します。Repeat Mode で、None = 1 回のみ、Loop = 同じ方向に繰り返し、 Mirrored Loop = 行ったり来たりを繰り返し、Mirrored Loop Once = 行ったり来たりを1回のみのどれかを選べます。Interpolation では、開始値と終了値までをどのように値を変化させていくかを指定できます。Linear だと時間変化に対して値の変化が一定です。Inspector の Settings を見ると視覚的に確認できます。下の図は、「 Quadratic In-Out 」です。スロースタートで途中速くなり、またゆっくりと変化して終了値に辿り着きます。この画面の「 Customized Interpolation Curve 」のラジオボタンをオンにすることで、このカーブを自分で自由に定義することもできます。

サンプル
Quartz Composerのファイル
読み込み中画像

アニメーションがスタートしてから画像のダウンロードが完了するまでの間、真っ白いキューブが表示されるのでちょっとかっこわるいですよね。そこで、「 COMING SOON? 」画像をダウンロード完了するまで表示させてみることにします。

本当は6面全部に同じ処理をするべきですが、ごちゃごちゃするので Front Image のみに COMING SOON? を表示しています。回転がゆっくりなので、他の面が見えるようになるまでに画像のダウンロードは終わることが多いでしょう(^_^;。COING SOON? の画像は Image Importer で読み込みます。

Image Importer と Image Downloader の両方の画像を Multiplexer というパッチに入れています。Multiplexer パッチは、複数の入力のうち、どれか1つを Output ポートに出力します。どれを出力するかは、Souce Index ポートの数字によって決まります。0が入力されている場合は、 Source #0 が出力される訳です。この図では、Source は2つしかありませんが、Inspector の Settings で Source の数を増やすことが出来ます。

ということで、画像がダウンロード完了するまでの間 Souce Index に 0 を入力し、完了したら 1 を入力するようにすればよいのです。そのために、Counter パッチを使います。この Counter パッチは、Increasing Signal に True が入力されたらカウンター自身の値が1つ増え、Decreasing Signal に True が入力されたら値が1つ減るというものです。カウンターの値の初期値は0です。

Image Downloader パッチは、ダウンロード完了時に Done Signal から True が出力されますので、これを Counter パッチに入力しておけば、ダウンロード完了とともに Image Downloader の Image が Front Image に流れるようになります。

サンプル
Quartz Composerのファイル
クイックリファレンス
Linear
Sinusodial InSinusodial OutSinusodial In-Out
Quadratic InQuadratic OutQuadratic In-Out
Cubic InCubic OutCubic In-Out
Exponential InExponential OutExponential In-Out