kaleido.jpg


万華鏡

 Olive+ R13で追加した「万華鏡フィルタ」を使って、万華鏡を覗いた時の様な動画を作成してみます。
 ご存知の通り万華鏡と言うのは、正三角形の3つの辺に鏡を置き、中に入れたカラフルなビーズなどの小片がコロコロ転がって、毎回異なった綺麗な映像を楽しむことのできるものですね。正三角形に配置された鏡の相互反射によって、点対象の図形が見えるのが特徴です。
 Olive R13で追加した「万華鏡フィルタ」は、鏡による相互反射をグラフィック画面上でエミュレートするフィルタです。適切な画像を用意して、ダイアログで正三角形の鏡を置く位置とその大きさを指定すれば、鏡の相互反射を計算して、万華鏡を覗いた時の様な画像に変換することができます。以下図の様に、正三角形の中心座標(cx,cy)、正三角形の大きさR、正三角形の頂点が正午の位置となす角度deg°で指定します。正三角形については、外接する円の中心座標と半径を使って、位置と大きさを指定します。

triangle.png

 こんな感じ↓です。

sample.png

 適切な画像に万華鏡フィルタをかけると、思いもしない画像に変換されて、ちょっと楽しいです。ただ、静止画で見ていると、すぐ飽きちゃいますね。やっぱり、くるくる回してみて色々な図形が見えるのが万華鏡の醍醐味!?と、いう事で、動かしてみます。

アニメーションを作成する

 「フィルタ」メニューから選択できる「万華鏡」フィルタだけではなく、Olive+に搭載されているスクリプト言語MODELAにも、万華鏡フィルタの命令を追加してあります。

  filter kaleido, <cx>,<cy>, <rad>,<deg>;

 中心座標(<cx>,<cy>)、半径<rad>、回転角度<deg>°は、先ほど図で説明したのと同じパラメータです。適切な変数でループを回して、中心座標、半径(今回は、固定にしました)、回転角度を計算して、filter命令にパラメータとして渡し、画像を計算したら、save命令でAVIファイルに書き出しています。

  rad=fhei*0.12;
  idx=0;
  while (idx<fn_all)
  {
    progress "万華鏡...",idx*100/fn_all;
    cx=fwid*(1/8*(fn_all - idx) + 1/2*idx)/fn_all;
    cy=fhei*(1/8*(fn_all - idx) + 1/2*idx)/fn_all;
    deg=2*360*idx/fn_all;

    filter scroll, fwid/2 - cx,fhei/2 - cy;
    filter kaleido, fwid/2,fhei/2,rad,deg;
    save $(fnamo);
    window close,0;
    window close,0;

    idx=idx + 1;
  }

 実際、アニメーションを作成して見てみると分かりますが、万華鏡の中心座標を中心にぐるぐる回るので、中心座標を動かしてしまうと、中心から遠い場所の移動量が大きくなって、ゆっくり見ていられません。そこで、万華鏡(正三角形)の中心座標は画像の中央に固定しておいて、逆に、対象画像の方をfilter命令のscrollを使って動かしています。


完成動画

 完成したデータと動画です。

  Olive+スクリプト:kaleidoscope.olv

 実行すると、元の画像を指定するためのダイアログが開きますので、適切な画像を指定してください。スクリプト最初のフレーム数(アニメーションの時間)、中心座標の移動ルートなどを適切に変更してお試しください。



 動画の頭の方にお見せしている静止画の左上辺りから、中央に向けて、万華鏡(正三角形)の中心座標を動かしています。最初の方は緑色の葉っぱの部分が見えていますが、最後の方に来ると黄色い実の部分が画面全体を覆います。見方によってはグロテスクですが、「自然界の造形」と理解して色合いを楽しむことができれば、結構綺麗じゃありませんか?


home

download

gallery