Processing クリエイティブ・コーディング入門 - コードが生み出す創造表現という書籍(第2刷)のp.192の下記コードが動作しません。
エラーはありませんが、黒い画面のまま線が描画されません。
解決方法をご存知でしたら教えてください。
Processing
1import processing.video.*; // ビデオライブラリのインポート 2Capture cam; // カメラのインプット 3float scale = 1.0; // 変化の全体スケール 4 5public void setup(){ 6 size(800, 500, P3D); 7 frameRate(60); 8 blendMode(ADD); 9 noFill(); 10 // ビデオキャプチャを初期化する 11 cam = new Capture(this, width, height); 12 cam.start(); 13} 14 15public void draw(){ 16 background(0); 17 strokeWeight(2.0); 18 // ビデオ解析の粒度を設定する 19 float hStep = 4.0; 20 float wStep = 4.0; 21 // 映像を解析する 22 for(float j = 0; j < height; j += hStep){ 23 beginShape(); // 線の描画を開始する 24 for(float i = 0; i < width; i += wStep){ 25 color col = cam.get(int(i), int(j)); // 色を取得する 26 float br = brightness(col); // 明度を計算する 27 stroke(col); // 線の色を設定する 28 // 明るさから高さを決定して頂点を追加 29 vertex(i, j, br * scale); 30 } 31 endShape(); // 線の描画を終了する 32 } 33} 34------ 35// カメラのフレームが更新されたらイベントを実行する 36void captureEvent(Capture c){ 37 cam.read(); 38}
OS:Windows8.1
Processing:4.0b8
ProcessingのP3Dモードで実行画面が出ない場合の対応方法の3.の方法を試してみましたが変化ありませんでした。
同じ書籍のp.136の3Dコードは問題なく動作しました。(P3D、translate()とellipse()で描画)
TN8001さんに提示いただいた下記コードの結果を追記します。
Processing
1void setup() { 2size(400, 400, P3D); 3beginShape(); 4vertex(120, 80, -200); 5vertex(340, 80, -200); 6vertex(340, 300, -200); 7vertex(120, 300, -200); 8endShape(); 9noLoop(); 10} 11void draw() { 12}
手元にカメラがないので確認できないのですが、
* 普通にカメラ画像を出すことはできるのでしょうか?
* 例えば↓としたときは縞々が出るでしょうか?
color col = 255; // cam.get(int(i), int(j)); // 色を取得する
> * 普通にカメラ画像を出すことはできるのでしょうか?
出来ます。
下記コードは正常に動作します。(カメラ画像をリアルタイムに映すだけ)
************************************
import processing.video.*; // ビデオライブラリのインポート
Capture cam; // カメラの定義
void setup(){
// 画面初期設定
size(853, 480);
frameRate(60);
noStroke();
cam = new Capture(this); // カメラを初期化する
cam.start(); // キャプチャを開始する
}
void draw(){
background(0);
image(cam, 0, 0, width, height); // カメラの画像を描画する
}
// カメラのフレームが更新されたらイベント実行
void captureEvent(Capture c){
cam.read();
}
************************************
画像から色情報を取得して円を描いたり等も出来ます。また2次元でのvertex描画も出来ます。
P3Dのときにvertexがおかしいという話で、「おそらくカメラは無関係だろう」ということですね?
size(400, 400, P3D);
beginShape();
vertex(120, 80, -200);
vertex(340, 80, -200);
vertex(340, 300, -200);
vertex(120, 300, -200);
endShape();
こんなのも何も出ない。と
「パフォーマンスが悪い」とか「ちょっと変じゃないか」みたいなものはありますが、何も出ないというのはちょっと聞いたことがないですね...
boxやsphere等vertexを使わないP3Dは普通に動くんですよね?
> 「おそらくカメラは無関係だろう」ということですね?
すみませんが、書籍(Processing クリエイティブ・コーディング入門)に従って初めてProcessingを触っているため、この書籍で説明されていることしか分からない状態です。
> boxやsphere等vertexを使わないP3Dは普通に動くんですよね?
同書籍に掲載の下記コードが動作することは確認しています。
*********************************************
void setup(){
size(800, 600, P3D); // 画面を設定する
}
void draw(){
background(0);
lights(); // ライティングをONにする
translate(width / 2, height / 2, 0); // 画面の中心を原点にする
rotateX(millis() / 1000 * 1.0); // X軸を中心に回転する
rotateY(millis() / 1000 * 1.5); // Y軸を中心に回転する
fill(255); // 白い立方体を描画する
noStroke();
box(200);
}
*********************************************
※使用しているProcessingがbeta版のため何らかの不具合があるのかもしれませんが私が調べたところでは情報は得られませんでした。
>> 「おそらくカメラは無関係だろう」ということですね?
> すみませんが、書籍(Processing クリエイティブ・コーディング入門)に従って初めてProcessingを触っているため、この書籍で説明されていることしか分からない状態です。
原因を絞り込むために、関係がないと思われるコードをできるだけ外したいのです。
>> こんなのも何も出ない。と
staticモードと言ってsetupやdrawなしでそのまま書けるのです。
意味としては↓と同じです(白い四角が出ます)
void setup() {
size(400, 400, P3D);
beginShape();
vertex(120, 80, -200);
vertex(340, 80, -200);
vertex(340, 300, -200);
vertex(120, 300, -200);
endShape();
noLoop();
}
void draw() {
}
とは言っても私は原因について、特に心当たりがあるわけではないのですが。。。^^;
> staticモードと言ってsetupやdrawなしでそのまま書けるのです。
> 意味としては↓と同じです(白い四角が出ます)
提示いただいたコードを実行しました。結果はTN8001さんが想定したものと同じでしょうか?
> 結果はTN8001さんが想定したものと同じでしょうか?
はい。となるとvertex自体は関係ないのかもしれません。
>> * 例えば↓としたときは縞々が出るでしょうか?
>> color col = 255; // cam.get(int(i), int(j)); // 色を取得する
これがどうなのかが気になります。
25行目ですか。ここを
// color col = cam.get(int(i), int(j)); // 色を取得する
color col = 255;
こう書き換えたとき(カメラ画像を真っ白扱いにする)に縞々が出るんだったら、
* カメラ画像が暗すぎる
* うまく画像をとれていない
どちらかということになるかと思います。
> こう書き換えたとき(カメラ画像を真っ白扱いにする)に縞々が出るんだったら、
白い線が表示されました。
> * カメラ画像が暗すぎる
> * うまく画像をとれていない
上記を調べてみます。色々アドバイスいただき助かります。
> 白い線が表示されました。
そうですか。だいぶ絞れましたね。
> 上記を調べてみます。色々アドバイスいただき助かります。
いえいえ適切なアドバイスができず申し訳ないです。
どうやらsize()にP3Dを指定した場合にcam.get(x, y)を実行するとうまくいかないことが多いようです。当方のPCの問題かもしれません。(古いので)
TN8001さん、ありがとうございました。
> うまくいかないことが多い
うまくいくこともある、のですか?
P3Dでカメラ画像をそのまま表示するプログラムにcam.get(x, y)を追加したもので動作しました(映像が表示された)。しかしその後、同じプログラムを実行するもRumtimeError(timeout)になってしまいました。
※出先のためコードは今掲載できません。cam.get(x, y)の値が正しいかどうかまでは確認できていません。
あなたの回答
tips
プレビュー