7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Processingでプロジェクションする時の便利コード書いた

Posted at

概要

Processingでプロジェクション(マッピング)をする際、必要な機能や便利な機能をひとつのコードにまとめました。
VJなどProcessingから映像出力したい時全般に使えると思います。

動作検証環境

  • Processing 3.5.3
  • MadMapper 3.6.1
  • Mac OS High Sierra
  • Windows 10

使い方

コードを保存後、Processingを起動して スケッチ > ライブラリをインポート から「Spout」「Syphon」をダウンロードしてください。
その後、Processingの実行ボタンを押してMadMapperへの出力を確認してください。

特徴

Windows / Mac 両対応の映像出力

映像出力ライブラリとしてWindowsではSpout、MacではSyphonを利用しています。
OSを自動判別して適切なライブラリを通して映像を出力するため、OSが異なるマシン間でのコードの書き換えの手間が省けます。

draw関数末尾に映像送信用コードを書いているので、これより上に描画処理を記述してください。

void draw() {
  // ここに描画処理を記述
  // ...
  // ...

  // 映像を送信
  if (myOS == OS_LIST.MAC) {
    server.sendScreen();
  } else if (myOS == OS_LIST.WIN) {
    spout.sendTexture();
  }
}

タイトルバーにテキストを表示するサンプル

スクリーンショット 2019-10-16 16.11.21.png スクリーンショット 2019-10-16 16.12.42.png 実行画面ウィンドウのタイトルバーにテキストを表示するサンプルを付けました。 サンプルでは実行画面上で適当なキーを押すたびに"Normal Mode"と"Debug Mode"が切り替わります。 これを利用すれば現在のステータスや変数の値などを確認することができます。 PC+モニター1枚とプロジェクターというディスプレイ2面体制であれば、モニターにProcessingの実行ウィンドウを表示しておいてそちらでタイトルバーを観測することができます。

テストパターン

スクリーンショット 2019-10-16 16.32.28.png 外枠の赤線で表示領域の確認・十字線でマッピングの中心の確認・中央の正円と正方形で歪みの確認ができるようにしました。

コード

import spout.*;
Spout spout;
import codeanticode.syphon.*;
SyphonServer server;

String OS_NAME = "";
enum OS_LIST {
  WIN, MAC, OTHER
};
OS_LIST myOS;

// タイトルバーのパラメータ表示サンプル
boolean isDebugMode = false;
String normalMessage = "Normal Mode";
String debugMessage = "Debug Mode";

void settings() {
  size(800, 600, P3D);
  PJOGL.profile=1;
}

void setup() {
  // OSの判定
  OS_NAME = System.getProperty("os.name").toLowerCase();
  if (isMac()) {
    myOS = OS_LIST.MAC;
  } else if (isWindows()) {
    myOS = OS_LIST.WIN;
  } else {
    // 判定できないOSを使用していた場合は起動させない
    println("OS判定エラー");
    exit();
  }

  // 映像送信用ライブラリのインスタンス化
  if (myOS == OS_LIST.MAC) {
    server = new SyphonServer(this, "Processing Syphon");
  } else if (myOS == OS_LIST.WIN) {
    spout = new Spout(this);
    spout.createSender("Processing Spout");
  }

  // タイトルバーの文字セット
  if (isDebugMode) {
    surface.setTitle(debugMessage);
  } else {
    surface.setTitle(normalMessage);
  }
}

void draw() {
  background(230);

  // テストパターン
  noFill();
  stroke(0);
  strokeWeight(5);
  line(width/2, 0, width/2, height);
  line(0, height/2, width, height/2);
  ellipse(width/2, height/2, height*0.5, height*0.5);
  rectMode(CENTER);
  rect(width/2, height/2, height*0.75, height*0.75);
  stroke(255, 0, 0);
  strokeWeight(10);
  rect(width/2, height/2, width, height);

  // 映像を送信
  if (myOS == OS_LIST.MAC) {
    server.sendScreen();
  } else if (myOS == OS_LIST.WIN) {
    spout.sendTexture();
  }
}

// キーを押すごとにモードを切り替えてタイトルバーの文字を更新
void keyPressed() {
  isDebugMode = !isDebugMode;

  if (isDebugMode) {
    surface.setTitle(debugMessage);
  } else {
    surface.setTitle(normalMessage);
  }
}

boolean isMac() {
  return OS_NAME.startsWith("mac");
}

boolean isWindows() {
  return OS_NAME.startsWith("windows");
}

参考URL

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?