質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

0回答

588閲覧

Processing4でvertexが描画されない

meg_

総合スコア10579

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2022/06/04 12:05

編集2022/06/05 10:47

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}

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2022/06/05 06:29

手元にカメラがないので確認できないのですが、 * 普通にカメラ画像を出すことはできるのでしょうか? * 例えば↓としたときは縞々が出るでしょうか? color col = 255; // cam.get(int(i), int(j)); // 色を取得する
meg_

2022/06/05 08:52 編集

> * 普通にカメラ画像を出すことはできるのでしょうか? 出来ます。 下記コードは正常に動作します。(カメラ画像をリアルタイムに映すだけ) ************************************ 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(); } ************************************
meg_

2022/06/05 08:50

画像から色情報を取得して円を描いたり等も出来ます。また2次元でのvertex描画も出来ます。
TN8001

2022/06/05 09:19 編集

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は普通に動くんですよね?
meg_

2022/06/05 09:57 編集

> 「おそらくカメラは無関係だろう」ということですね? すみませんが、書籍(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版のため何らかの不具合があるのかもしれませんが私が調べたところでは情報は得られませんでした。
TN8001

2022/06/05 10:23

>> 「おそらくカメラは無関係だろう」ということですね? > すみませんが、書籍(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() { } とは言っても私は原因について、特に心当たりがあるわけではないのですが。。。^^;
meg_

2022/06/05 10:49

> staticモードと言ってsetupやdrawなしでそのまま書けるのです。 > 意味としては↓と同じです(白い四角が出ます) 提示いただいたコードを実行しました。結果はTN8001さんが想定したものと同じでしょうか?
TN8001

2022/06/05 12:18

> 結果はTN8001さんが想定したものと同じでしょうか? はい。となるとvertex自体は関係ないのかもしれません。 >> * 例えば↓としたときは縞々が出るでしょうか? >> color col = 255; // cam.get(int(i), int(j)); // 色を取得する これがどうなのかが気になります。 25行目ですか。ここを // color col = cam.get(int(i), int(j)); // 色を取得する color col = 255; こう書き換えたとき(カメラ画像を真っ白扱いにする)に縞々が出るんだったら、 * カメラ画像が暗すぎる * うまく画像をとれていない どちらかということになるかと思います。
meg_

2022/06/05 12:53

> こう書き換えたとき(カメラ画像を真っ白扱いにする)に縞々が出るんだったら、 白い線が表示されました。 > * カメラ画像が暗すぎる > * うまく画像をとれていない 上記を調べてみます。色々アドバイスいただき助かります。
TN8001

2022/06/05 13:17

> 白い線が表示されました。 そうですか。だいぶ絞れましたね。 > 上記を調べてみます。色々アドバイスいただき助かります。 いえいえ適切なアドバイスができず申し訳ないです。
meg_

2022/06/05 15:08

どうやらsize()にP3Dを指定した場合にcam.get(x, y)を実行するとうまくいかないことが多いようです。当方のPCの問題かもしれません。(古いので) TN8001さん、ありがとうございました。
thkana

2022/06/05 23:25

> うまくいかないことが多い うまくいくこともある、のですか?
meg_

2022/06/06 06:28

P3Dでカメラ画像をそのまま表示するプログラムにcam.get(x, y)を追加したもので動作しました(映像が表示された)。しかしその後、同じプログラムを実行するもRumtimeError(timeout)になってしまいました。 ※出先のためコードは今掲載できません。cam.get(x, y)の値が正しいかどうかまでは確認できていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問