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

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

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

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

Q&A

解決済

1回答

463閲覧

木の複製のやり方がわかりません。

takutan2004

総合スコア1

Processing

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

1グッド

0クリップ

投稿2022/06/30 07:04

Processingでp5.jsで森を作りたいと考えていますが、木1本のコードは動画などを参考にしながら作ることはできたのですが、どのようにして木を増やせばいいのかわかりません。どこの値などを追加したら増やせますか?
木の動画
https://www.youtube.com/watch?v=tdbaIHjCKtA

function setup() { createCanvas(windowWidth, windowHeight, WEBGL); angleMode(DEGREES); noLoop(); } function draw() { background(0, 125, 255) // randomSeed(1) translate(-200, 200, 0);//position rotateY(frameCount); branch(100); // Size } function branch(len) { strokeWeight(map(len, 10, 100, 0.5, 5)); stroke(70, 40, 20); line(0, 0, 0, 0, -len - 2, 0) translate(0, -len, 0) //translate(100, -len, 0) if (len > 10) { for (var i = 0; i < 3; i++) { rotateY(random(100, 140)); push() rotateZ(random(20, 50)); branch(len * 0.7); pop() } } else { var r = 80 + random(-20, 20) var g = 120 + random(-20, 20) var b = 40 + random(-20, 20) fill(r, g, b, 200) noStroke() translate(5, 0, 0); rotateZ(90); beginShape(); for (var i = 45; i < 135; i++) { var rad = 7; var x = rad * cos(i); var y = rad * sin (i); vertex(x, y); } for (var i = 135; i > 45; i--){ var rad = 7; var x = rad * cos(i); var y = rad * sin(-1) + 10; vertex(x, y); } endShape(CLOSE); } }
TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

木1本のコードは動画などを参考にしながら作ることはできたのですが、どのようにして木を増やせばいいのかわかりません。どこの値などを追加したら増やせますか?

branchで木が1本生えるのですから、位置をずらしてbranchを呼ぶだけではないですか?
reference | translate()

森を作りたい

数本描いただけですっごい重いです...

js

1function setup() { 2 createCanvas(windowWidth, windowHeight, WEBGL); 3 angleMode(DEGREES); 4 //noLoop(); 5} 6 7function draw() { 8 background(0, 125, 255); 9 randomSeed(1); 10 11 orbitControl(); // マウスで回転・移動・拡縮 12 13 rotateX(-15); // ちょっと斜め上から見たように 14 rotateY(frameCount); // 自動で回転 15 16 for (let x = -200; x <= 200; x += 200) { 17 push(); 18 translate(x, 0, 0); // 木の位置を指定 19 branch(100); 20 pop(); 21 } 22 23 // 地面 24 noStroke(); 25 fill(0, 255, 0); 26 box(windowWidth, 0, windowHeight); 27} 28 29function branch(len) { 30 strokeWeight(map(len, 10, 100, 0.5, 5)); 31 stroke(70, 40, 20); 32 33 line(0, 0, 0, 0, -len - 2, 0); 34 35 translate(0, -len, 0); 36 37 if (len > 10) { 38 for (let i = 0; i < 3; i++) { 39 rotateY(random(100, 140)); 40 41 push(); 42 43 rotateZ(random(20, 50)); 44 branch(len * 0.7); 45 46 pop(); 47 } 48 } else { 49 let r = 80 + random(-20, 20); 50 let g = 120 + random(-20, 20); 51 let b = 40 + random(-20, 20); 52 53 fill(r, g, b, 200); 54 noStroke(); 55 56 translate(5, 0, 0); 57 rotateZ(90); 58 59 beginShape(); 60 for (let i = 45; i < 135; i++) { 61 let rad = 7; 62 let x = rad * cos(i); 63 let y = rad * sin (i); 64 vertex(x, y); 65 } 66 for (let i = 135; i > 45; i--) { 67 let rad = 7; 68 let x = rad * cos(i); 69 let y = rad * sin(-1) + 10; 70 vertex(x, y); 71 } 72 endShape(CLOSE); 73 } 74}

投稿2022/06/30 11:21

TN8001

総合スコア9321

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

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

takutan2004

2022/07/03 10:42

ありがとうございます。どうして重くなるんですかね?単純に処理が多くて重くなってるんでしょうか?
TN8001

2022/07/03 11:54

> どうして重くなるんですかね?単純に処理が多くて重くなってるんでしょうか? randomSeed(1)しているように、本来は1回計算すればいい処理を毎フレームしているので^^; PShapeのようなものがあれば、setupで1回だけ作ってdrawではそれを表示するだけにできる(それで早くなるかは未確認)のですが、p5.jsにPShapeに当たるものがないんですよね。。。 どうするのがいいんですかね??(p5 Geometryとかを使う?だいぶ話が変わってきそう) わたしはp5.jsからjavaへの移植はかなりやっているのですが、逆はほとんどないのでよくわかりません^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問