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

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

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

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

Q&A

1回答

977閲覧

Processingで金属の材質を表現する

peshi

総合スコア4

Processing

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

0グッド

0クリップ

投稿2021/07/12 08:08

前提・実現したいこと

processingで車の三次元モデルにテクスチャを貼り付けて、金属のような材質を表現する。

発生している問題・エラーメッセージ

主にdraw関数で問題が発生していると考えられる。
draw関数のcar(40, 0)より下で機能していないメゾットがある。試したところ、ambient, emissiveだけが機能しており、他のメゾットは機能していなかった(一行以外コメントアウトして実行するを繰り返したので実際は他に機能したり機能しなかったりするメゾットがあるかもしれません)。

該当のソースコード

Processing

1PImage img; 2 3void setup(){ 4 size(800, 800, P3D); 5 img = loadImage("piano.jpg"); 6 noStroke(); 7} 8 9//car 10void forme(){ 11 //up 12 fill(0, 0, 255); 13 beginShape(QUADS); 14 texture(img); 15 textureMode(NORMAL); 16 vertex(-.5, 0, -.5, 1, 0); vertex(.5, 0, -.5, 0, 0); vertex(.5, -1, -.5, 0, 1); vertex(-.5, -1, -.5, 1, 1); 17 vertex(.5, 0, -.5, 1, 0); vertex(.5, 0, .5, 0, 0); vertex(.5, -1, .5, 0, 1); vertex(.5, -1, -.5, 1, 1); 18 vertex(.5, 0, .5, 1, 0); vertex(-.5, 0, .5, 0, 0); vertex(-.5, -1, .5, 0, 1); vertex(.5, -1, .5, 1, 1); 19 vertex(-.5, 0, .5, 1, 0); vertex(-.5, 0, -.5, 0, 0); vertex(-.5, -1, -.5, 0, 1); vertex(-.5, -1, .5, 1, 1); 20 vertex(.5, 0, .5, 1, 0); vertex(.5, 0, -.5, 0, 0); vertex(-.5, 0, -.5, 0, 1); vertex(-.5, 0, .5, 1, 1); 21 vertex(.5, -1, .5, 1, 0); vertex(.5, -1, -.5, 0, 0); vertex(-.5, -1, -.5, 0, 1); vertex(-.5, -1, .5, 1, 1); 22 endShape(); 23 //down 24 fill(0, 0, 255); 25 beginShape(QUADS); 26 texture(img); 27 textureMode(NORMAL); 28 vertex(-1, -1, -1, 1, 0); vertex(1, -1, -1, 0, 0); vertex(1, -2, -1, 0, 1); vertex(-1, -2, -1, 1, 1); 29 vertex(1, -1, -1, 1, 0); vertex(1, -1, 1, 0, 0); vertex(1, -2, 1, 0, 1); vertex(1, -2, -1, 1, 1); 30 vertex(1, -1, 1, 1, 0); vertex(-1, -1, 1, 0, 0); vertex(-1, -2, 1, 0, 1); vertex(1, -2, 1, 1, 1); 31 vertex(-1, -1, 1, 1, 0); vertex(-1, -1, -1, 0, 0); vertex(-1, -2, -1, 0, 1); vertex(-1, -2, 1, 1, 1); 32 vertex(1, -1, 1, 1, 0); vertex(1, -1, -1, 0, 0); vertex(-1, -1, -1, 0, 1); vertex(-1, -1, 1, 1, 1); 33 vertex(1, -2, 1, 1, 0); vertex(1, -2, -1, 0, 0); vertex(-1, -2, -1, 0, 1); vertex(-1, -2, 1, 1, 1); 34 endShape(); 35} 36 37void taiya(float a, float b){ 38 fill(0); 39 beginShape(); 40 for(int i = 0; i < 360; i++){ 41 float theta = radians(i); 42 if(i < 90){ 43 vertex(a + 0.3*cos(theta), 0.3*sin(theta)-2 , b, 0, i/90); 44 }else if(i >= 90 && i < 180){ 45 vertex(a + 0.3*cos(theta), 0.3*sin(theta)-2 , b, (i-90)/90, 1); 46 }else if(i >= 180 && i< 270){ 47 vertex(a + 0.3*cos(theta), 0.3*sin(theta)-2 , b, 1, (270-i)/90); 48 }else{ 49 vertex(a + 0.3*cos(theta), 0.3*sin(theta)-2 , b, (360-i)/90, 0); 50 } 51 } 52 endShape(); 53} 54 55 56void car(float s, int x){ 57 pushMatrix(); 58 translate(x, 0, 35); 59 scale(s, s, s); 60 forme(); 61 taiya(1, 1); 62 taiya(-1, 1); 63 taiya(1, -1); 64 taiya(-1, -1); 65 popMatrix(); 66} 67 68void draw(){ 69 background(255); 70 lights(); 71 camera(250, 150, 150, 0, 50, 0, 0, -1, 0); 72 car(40, 0); 73 74 ambientLight(mouseX, 20, 20); 75 ambient(mouseX, 128, 0); 76 lightSpecular(mouseX, 255, 255); 77 directionalLight(mouseX, 128, 128, -.5, .5, -1); 78 specular(mouseX, 200, 200); 79 emissive(0, map(mouseX, 0, width, 0, 255), 0); 80 shininess(mouseX*255/width); 81}

試したこと

メゾットの一部をmouseXにしてメゾットが機能しているか一つずつ試した結果、ほとんどのメゾットが機能していなかった。lights()をなくしてみたりしたが関係なさそうだった。

補足情報(FW/ツールのバージョンなど)

長文ですみません。もしわかる方いましたら教えていただけると幸いです。よろしくお願いします。
また、用いた画像(piano.jpg)は以下のものです。
用いた画像

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

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

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

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

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

guest

回答1

0

他のメゾットは機能していなかった(一行以外コメントアウトして実行する

相互に関連する関数もありますので、一つだけ実行しても意味がない場合があります。
呼ぶ順が重要なものもあります。

いきなり本題(車)でやるのではなく、リファレンスのようなsphere等の簡単なもので把握してからにしましょう。
Language Reference (API) \ Processing 3+

複数の値を同時に同じ値に変更すると、違いが分かりにくいものもありそうです。
mouseXmouseYで別々に動かすといいかもしれません。


Processingはp5.jsに比べてライト(の発光?発色?)が玄人っぽい(悪く言うと地味な^^;)気がします。
複数ライトを重ね掛けしたりするのですが、8ライト制限が厳しいですねぇ。

投稿2021/07/12 10:06

TN8001

総合スコア9317

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

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

peshi

2021/07/12 11:53

回答ありがとうございます。 少し私も思っていたのですがやはり相互に関連する関数もあるのですね… sphere等で試してみてから実行してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問