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

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

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

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

Q&A

1回答

2534閲覧

processingでの直方体の絵画とカメラの視点固定ができない

15meisei136

総合スコア10

Processing

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

0グッド

0クリップ

投稿2019/01/12 10:46

編集2019/01/12 12:44

プログラミング初心者です。

box(100,150,150)の中心をカメラの視点として固定したいのですが、box(10,15,10)の中心に注視点が固定されているようです。
どのようにするといいのでしょうか。。。

又、box(10,15,10)をbox(100,150,150)内の左下奥に配置し、その隣にbox(30,50,10)を配置するにはどうするとよいのでしょうか。。。
実際にやってみたのですがうまくいきません(泣

processing

1float camX = 0, camY = 0; 2// cspped 3float speed = 12; 4 5void setup() { 6 size(960, 540, P3D); 7 8} 9 10void draw() { 11 background(255); 12 translate(width/2, height/2, 0);//座標中心 13 14 // cmove 15 if (keyPressed) { 16 if (keyCode == LEFT) camX -= speed; 17 if (keyCode == RIGHT) camX += speed; 18 if (keyCode == UP) camY -= speed; 19 if (keyCode == DOWN) camY += speed; 20 } 21 // cset 22 camera(camX, camY, 200, 0, 0, 0, 0, 1, 0); 23 //parette 24 stroke(0); 25 noFill(); 26 box(100,150,150); 27 //nimotsu1 28 stroke(0);//nitsu1 29 noFill(); 30 box(10,15,10); 31 box(30,50,10); 32 33 34 stroke(255, 0, 0); 35 line(0, 0, 0, 500, 0, 0); 36 stroke(0, 255, 0); 37 line(0, 0, 0, 0, 500, 0); 38 stroke(0, 0, 255); 39 line(0, 0, 0, 0, 0, 500); 40} 41````コードの表示()`

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

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

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

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

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

KSwordOfHaste

2019/01/12 11:23 編集

(A)別の立方体に視点がされている 「視点がされている」という表現だと何を意味するかはっきりわかりません。ちなみに視点はカメラがある位置で、注視点はカメラが狙っている位置です。(A)は「注視点」でしょうか?「視点」でしょうか?いずれにしても意味が通じない気がします。本コードの全てのboxの中心は同じ(座標原点)だからです。(A)が何を意味するか質問文を編集して補足してほしいです。
15meisei136

2019/01/12 12:44

修正補足致しました!
guest

回答1

0

P3Dは得意じゃありませんが。

box(100,150,150)の中心をカメラの視点として固定したいのですが、box(10,15,10)の中心に注視点が固定されているようです。

なんか日本語としてよくわからないのですが。固定したいのは視点で、なぜそこで注視点の話になるのでしょう? しかも、プログラムのカメラ設定camera(camX, camY, 200, 0, 0, 0, 0, 1, 0);からはその意図が読み取れないのですが...どの辺が「固定したい」の指定?

それはともかく。

box(10,15,10)をbox(100,150,150)内の左下奥に配置し、その隣にbox(30,50,10)を配置するにはどうするとよいのでしょうか

の方が話が先な気がします。だって、これが出来ないとbox(10,15,10)の場所が特定出来ないのですから。ところで「隣」っていろいろ考えられるけど。

boxは常に座標原点の周りに描画されるわけで、だから位置指定がなくてサイズ情報だけなんですよね。だとすればtranslateで適切な位置に原点を移動して、その位置を中心にboxを描画することになるのでは。

cameraのデフォルトがY軸正方向が上なので、「左下奥」ってどっちよ? となってしまうのですがカメラをZ軸正方向を"上"に設定してx軸は右が正、y軸は手前が正とするように見るなら、box(X,Y,Z)の-X/2,-Y/2,-Z/2が左下奥ということになるはずです。

とにかく描いてみると、こんな感じ?

Processing

1void setup(){ 2 size(960,540,P3D); 3 noFill(); 4} 5 6boolean once=false; 7void draw(){ 8 background(255); 9 translate(width/2,height/2,0); 10//ここを基準座標としてカメラを設定後pushして保存、popして回復しながら描いていく 11 camera( 12 100/2,150/2,150/2,//カメラ位置(視点)=box(100,150,150)の中心 13 10/2,15/2,10/2,//カメラ注視点=box(100,150,150)の左下隅のbox(10,15,10)の中心 14 0,0,-1);//Z軸正方向が上 15 16 pushMatrix(); 17 translate(100/2,150/2,150/2); //左下奥隅が保存した原点になるように配置 18 box(100,150,150); 19 popMatrix(); 20 21 pushMatrix(); 22 translate(10/2,15/2,10/2); //左下奥隅にbox(10,15,10)を配置 23 box(10,15,10); 24 popMatrix(); 25 26 pushMatrix(); 27 translate(10+30/2,50/2,10/2); //隣(適当に決めた)にbox(30,50,10)を配置 28 box(30,50,10); 29 popMatrix(); 30}

camera()をいじるとなにか内部状態も変わっちゃうみたいで、Processingで3Dグラフィックスを扱う上での注意点 "camera()の挙動"あたりを見てみるもいろいろ難しそう...


注視点を移動してみました。

Processing

1void setup() { 2 size(960, 540, P3D); 3 textSize(8); 4 textAlign(CENTER, CENTER); 5} 6float x=10./2; 7float y=15./2; 8float z=10./2; 9 10float vx=1; 11float vy=1.3; 12float vz=0.7; 13 14boolean once=false; 15void draw() { 16 background(255); 17 translate(width/2, height/2, 0); 18 //ここを基準座標としてカメラを設定後pushして保存、popして回復しながら描いていく 19 camera( 20 100./2, 150./2, 150./2, //カメラ位置(視点)=box(100,150,150)の中心 21 x, y, z, //カメラ注視点=box(100,150,150)の左下隅のbox(10,15,10)の中心 22 0, 0, -1);//Z軸正方向が上 23 24 pushMatrix(); 25 //注視点移動 26 x=x+vx; 27 y=y+vy; 28 z=z+vz; 29 if (x<0 || x>100) { 30 vx*=-1; 31 } 32 x=constrain(x, 0, 100); 33 if (y<0 || y>150) { 34 vy*=-1; 35 } 36 y=constrain(y, 0, 150); 37 if (z<0 || z>150) { 38 vz*=-1; 39 } 40 z=constrain(z, 0, 150); 41 42 translate(x, y, z); //注視点 43 noStroke(); 44 fill(192); 45 sphere(3); 46 text(String.format("%.1f, %.1f, %.1f", x, y, z), 0, 5, -5); 47 popMatrix(); 48 49 pushMatrix(); 50 translate(100./2, 150./2, 150./2); //左下奥隅が保存した原点になるように配置 51 noFill(); 52 stroke(0); 53 box(100, 150, 150); 54 popMatrix(); 55 56 pushMatrix(); 57 translate(10./2, 15./2, 10./2); //左下奥隅にbox(10,15,10)を配置 58 noFill(); 59 stroke(0, 255, 0); 60 box(10, 15, 10); 61 popMatrix(); 62 63 pushMatrix(); 64 translate(10+30./2, 50./2, 10./2); //隣(適当に決めた)にbox(30,50,10)を配置 65 noFill(); 66 stroke(0, 0, 255); 67 box(30, 50, 10); 68 popMatrix(); 69}

投稿2019/01/13 14:55

編集2019/01/14 00:50
thkana

総合スコア7629

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問