【Processing】画面内を3Dと2Dのエリアに分割して使いたい
【状況】3D表示をしつつ,文字情報は右半分の2Dで表示したい.3D空間に文字を置いてもいいけど,文字に3Dの設定が及ばないようにするとか面倒なので,完全に独立させたかった(なんだか使ったことがないProcessingをやることになってしまった).(Processing 4.3)
【対処】createGraphicsで3D, 2D用の画面を個別に作って親画面内に配置するのが一番簡単みたい,のメモ.
もちろん,3Dと3D, 2Dと2Dも可です.
各表示画面を作って配置
マルチウィンドウに~みたいな記事はいろいろありましたが,画面は一つで画面内で分割して,みたいなのが見つからず.余計な計算が必要になるので座標系が独立になる方法を探索.ここでは,メインのキャンバスを作り,createGraphicsで各画面を作成し,imageで配置しました.3Dの箱はクルクル回っています.
PGraphics pg2D;
PGraphics pg3D;
void setup() {
size(800, 400, P2D); // メインのキャンバス
// 2DのPGraphicsオブジェクトを作成
pg2D = createGraphics(400, 400, P2D);
// 3DのPGraphicsオブジェクトを作成
pg3D = createGraphics(400, 400, P3D);
}
void draw() {
// 3D画面に箱を描画
pg3D.beginDraw();
pg3D.background(0);
pg3D.lights();
pg3D.fill(0, 0, 255);
pg3D.translate(pg3D.width / 2, pg3D.height / 2); // 画面中央
pg3D.rotateX(frameCount * 0.01); // x軸回り回転量
pg3D.rotateY(frameCount * 0.01); // y軸回り回転量
pg3D.box(50);
pg3D.endDraw();
// 2D画面に文字を描画
pg2D.beginDraw();
pg2D.background(200);
pg2D.fill(0); // テキストの色
pg2D.textAlign(CENTER, CENTER);
pg2D.text("Hello, Processing!", pg2D.width / 2, pg2D.height / 2); // 画面中央
pg2D.endDraw();
// 各PGraphicsオブジェクトを画面に表示(左側に2D,右側に400ずらして2D)
image(pg3D, 0, 0);
image(pg2D, 400, 0);
}
位置関係を変えたければ,imageの座標をいじるだけ.
image(pg3D, 400, 0);
image(pg2D, 0, 0);
もっと画面数を増やしたければ,メインキャンパスを大きくして,キャンパスを追加して再配置するだけでできますね.
日本語を表示するにはフォント設定が必要
日本語を入れたら何も出ず.なるほど,デフォルトではASCII文字しか表示できないのね.日本語フォントを設定する必要がありました.
PGraphics pg2D;
PGraphics pg3D;
PFont japaneseFont; // 日本語フォント
pg2D.textAlign(CENTER, CENTER);
pg2D.textFont(japaneseFont); // 日本語フォントを設定
pg2D.text("どすこい,Processing!", pg2D.width / 2, pg2D.height / 2); // 画面中央
pg2D.endDraw();
単純な表示以外は試していないので,いろいろやろうとすると問題が起きるかも?
とりあえず基本形はできたから,よし♪
この記事が気に入ったらサポートをしてみませんか?