Processingでプロジェクションする時の便利コード書いた
概要
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();
}
}
タイトルバーにテキストを表示するサンプル
実行画面ウィンドウのタイトルバーにテキストを表示するサンプルを付けました。
サンプルでは実行画面上で適当なキーを押すたびに"Normal Mode"と"Debug Mode"が切り替わります。
これを利用すれば現在のステータスや変数の値などを確認することができます。
PC+モニター1枚とプロジェクターというディスプレイ2面体制であれば、モニターにProcessingの実行ウィンドウを表示しておいてそちらでタイトルバーを観測することができます。
テストパターン
外枠の赤線で表示領域の確認・十字線でマッピングの中心の確認・中央の正円と正方形で歪みの確認ができるようにしました。
コード
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
- Processing から Syphon を使って MadMapper に実行結果を送信する - Qiita
- ProcessingとResolumeを連携させて、映像作ってみた時の話 - Qiita
- Processing3.0でSyphonを使用 | office606
- Processing 1.0 - Processing Discourse - Detecting platform / OS?
- Java 実行している OS を取得する方法 | ホームページ制作のサカエン(墨田区)
- JavaのプログラムでMacかWindowsかを見分ける
- 実行結果ウィンドウのアイコン・タイトルを変更するには(3.X用) | 自己啓発。人生について考える
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");
}
- Processing から Syphon を使って MadMapper に実行結果を送信する - Qiita
- ProcessingとResolumeを連携させて、映像作ってみた時の話 - Qiita
- Processing3.0でSyphonを使用 | office606
- Processing 1.0 - Processing Discourse - Detecting platform / OS?
- Java 実行している OS を取得する方法 | ホームページ制作のサカエン(墨田区)
- JavaのプログラムでMacかWindowsかを見分ける
- 実行結果ウィンドウのアイコン・タイトルを変更するには(3.X用) | 自己啓発。人生について考える
Author And Source
この問題について(Processingでプロジェクションする時の便利コード書いた), 我々は、より多くの情報をここで見つけました https://qiita.com/reona396/items/337f1eda23d2e98c4b7e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .