Processingを用いたプロジェクションマッピング

以前にもブログで紹介しているルービックキューブへのプロジェクションマッピングについて、またまたですが異なるアプローチで試してみました。

今回は Processing を利用しました。(実は今までの中で最もシンプル)

プロジェクションマッピングでの課題はキャリブレーション(マッピングのための調整)ですが、Processing には「keystone」という射影変換を実現するライブラリが公開されているとのことで、こちらを最大限に活用させていただきました。

ライブラリの追加方法です。
1. メニューから次の項目を選択する。 Sketch > Import Library > Add Library
2. 「keystone」を選択してインストールする

先に作成したデモ映像を載せておきます。

投影環境はこんな感じです。
IMG_1201

コードについては、簡易な説明にしておきます。
「keystone」ライブラリに関する主要なインスタンスは以下になります。

projectionMappingCube.pde

Keystone ks;	// Keystone本体(画面全体を指す)

 

SurfaceBase.pde

class SurfaceBase 
{
  CornerPinSurface surface;	// 射影平面
  PGraphics offscreen;	// 射影平面内部のグラフィックス

  SurfaceBase() {
    
    surface = ks.createCornerPinSurface(600, 600, 60);
    offscreen = createGraphics(600, 600, P3D);
    
    // 略
  }

  // 略
}

 

あらかじめ割り当てたキーを押下することで、投影の表示を切り替えを行うのに加え、キャリブレーションに関する処理についても行っています。

projectionMappingCube.pde

// 起動時に呼ばれる
void setup() {
  // 略
}

// 描画更新時に呼ばれる
void draw() {
  // 略
}

// キー押下時に呼ばれる
void keyPressed() {
  switch(key) {
  case '0':
  case '1':
  case '2':

    // 略

    break;

  case 'c':
    // キャリブレーション(CornerPinSurface の各頂点をマウスで設定できる)
    ks.toggleCalibration();
    break;

  case 'l':
    // 前回保存したキャリブレーション情報をロード
    ks.load();
    break;

  case 's':
    // キャリブレーション結果を保存
    ks.save();
    break;
  }
}

 

キャリブレーションする前は、実行した画面の左上に接した正方形が表示されることになりますが、キー'c'を押下することで形状を調整できるようになります。調整が完了したら、再度キー'c'を押下することでキャリブレーション状態から抜けることができます。
キー's'を押下すると、同一ディレクトリに「keystone.xml」が作成され、調整した状態が保存されます。これで、次回起動したときに、キー'l'を押下することで前回調整した状態に復元されます。

デモ映像の抜粋版のコードを Github にアップしました。
https://github.com/JunichiMinamino/projectionMappingCube

今回は比較的負荷が少ない処理の内容にとどめたので、Processing で作成するのに適しているかと思います。より負荷の高い処理を行いたい場合は openFrameworks を利用する方が良いかと思います。
今回はキャリブレーションについてもがんばってみたこともあり、少しコツがわかってきた感じがします。またの機会に再度oFでも試してみようと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です