Processinglue : Virtual Display

Processingはインタラクティブなシステムのプロトタイピングやメディアアートの制作に良く使われるJavaベースのプログラミング環境です.公式サイトでもProcessingを使った作品がたくさん紹介されています

Processingを使って作品を作るといっても,Processingが動いているパソコンをそのままポンと置くことはほとんどないと思います.カメラやセンサやモータを使ったり,プロジェクタや大きなディスプレイを使うことがほとんどです.そうした時に,コンピュータで何度も試行錯誤してから実際に展示してみると,思った通りには動かなかったり,映像の大きさや動くスピードから感じるものが画面の時とは違う…(それが良い方向に転ぶ場合ももちろんあります)という事が結構あるものです.

そこで,作品が空間に置かれた様子をシミュレーションしながらプログラミングを進められるような環境である”CityCompiler”というライブラリをこれまで作ってきました.
jMonkeyEngineというゲームエンジンの中で動く仮想のディスプレイやプロジェクタ,仮想のカメラやセンサを使って,Processingが動く様子をシミュレーションできるというものです.CityCompilerの使い方や使った例などはこちらへ.
 CityCompilerワークショップ「空間をプログラミングしよう!」向け資料
 CityCompiler Examples on vimeo

CityCompilerを使ってProcessingのシミュレーションをするにはjMonkeyEngineをちょっと理解しないといけないので,それが少しハードルになっていました.

Processing2.0がOpenGLを全面的に取り入れたこともあり,CityCompilerと同じような仮想カメラと仮想ディスプレイをProcessingで実装したのがProcessinglueです.
Glueは糊のことですが,ProcessingをProcessingにくっ付ける糊,というイメージで名前を付けました.これでProcessingをシミュレーションするのにProcessingの知識があればOKになりました.

FlatDisplay Test0 from Yasuto Nakanishi on Vimeo.

このムービーではProcessingのExamplesにあるDistance2DというPAppletを仮想ディスプレイに表示して,それをお姉さんが見ている様子をシミュレーションしています.シミュレーションを始めると,「ディスプレイを回してみるとどうかな?」「回るディスプレイにどんなProcessingを表示するとオモシロいかな?」「横長と縦長だったらどう違うかな?」なんて事を考え始めるようになります.Processinglueを使えば色々なアイデアをシミュレーションしながら発展させることができます.

仮想ディスプレイを実装するにあたってキーになるのはPAppletの
public void registerMethod(String methodName, Object target)
というメソッドです.

PAppletの中でdraw()メソッドが初めて実行される時や実行された直後,スケッチが停止したり再開した時,mouseEventやkeEvent,touchEventが起きた直後などに,呼んでもらいたいオリジナルのメソッドをPAppletに登録することが出来ます.

仮想ディスプレイは,表示するアプレットのdrawメソッドが呼ばれた直後に,いま描かれたホヤホヤのpilxels[]の中身をコピーしたPImageを作る,ということをします.
表示するアプレットが描画をする度にPImageを作り直し,そのPImageをP3Dの中にテクスチャとして表示することで,Processingが動く様子をP3Dの中で見ることができます.

テクスチャの貼り方を変えるだけで円柱型ディスプレイや曲面ディスプレイも簡単に作れます.なのでこれらは平面の仮想ディスプレイのサブクラスとして作りました.

BezierDisplaysScape

CylinderDisplays Test

マウスによるインタラクションがあるPAppletは別ウィンドウを作って表示するオプションをtrueにして,普通のPAppletと同じようにそのウィンドウをアクティブにしてマウスを動かします.
マウスの動きに応じて作り替えられたpixels[]が毎フレーム毎にコピーされてテクスチャとして貼り直されるので,マウスの動きがシミュレーションにも反映されます.↑の円柱ディスプレイのサンプルがそうした例になっています.

Processingの開発環境であるPDEは一つのフォルダにPAppletが一つだけあるという前提を置いているので,PAppletを複数使うProcessinglueはPDEでは実行できません.そのためEclipseを使って開発を行います.ソースコードを含んだプロジェクトをGitHubに上げてありますので,ぜひ一度試してみてください.

https://github.com/yasutonakanishi/Processinglue
https://github.com/yasutonakanishi/Processinglue/archive/master.zip

仮想カメラについては次のエントリーで紹介したいと思います.

カテゴリー: programming パーマリンク