回答編集履歴

1

機能追加

2019/01/14 00:50

投稿

thkana
thkana

スコア7639

test CHANGED
@@ -97,3 +97,151 @@
97
97
  ```
98
98
 
99
99
  camera()をいじるとなにか内部状態も変わっちゃうみたいで、[Processingで3Dグラフィックスを扱う上での注意点](http://d.hatena.ne.jp/kougaku-navi/20160104/p1) "camera()の挙動"あたりを見てみるもいろいろ難しそう...
100
+
101
+
102
+
103
+ ---
104
+
105
+ 注視点を移動してみました。
106
+
107
+ ```Processing
108
+
109
+ void setup() {
110
+
111
+ size(960, 540, P3D);
112
+
113
+ textSize(8);
114
+
115
+ textAlign(CENTER, CENTER);
116
+
117
+ }
118
+
119
+ float x=10./2;
120
+
121
+ float y=15./2;
122
+
123
+ float z=10./2;
124
+
125
+
126
+
127
+ float vx=1;
128
+
129
+ float vy=1.3;
130
+
131
+ float vz=0.7;
132
+
133
+
134
+
135
+ boolean once=false;
136
+
137
+ void draw() {
138
+
139
+ background(255);
140
+
141
+ translate(width/2, height/2, 0);
142
+
143
+ //ここを基準座標としてカメラを設定後pushして保存、popして回復しながら描いていく
144
+
145
+ camera(
146
+
147
+ 100./2, 150./2, 150./2, //カメラ位置(視点)=box(100,150,150)の中心
148
+
149
+ x, y, z, //カメラ注視点=box(100,150,150)の左下隅のbox(10,15,10)の中心
150
+
151
+ 0, 0, -1);//Z軸正方向が上
152
+
153
+
154
+
155
+ pushMatrix();
156
+
157
+ //注視点移動
158
+
159
+ x=x+vx;
160
+
161
+ y=y+vy;
162
+
163
+ z=z+vz;
164
+
165
+ if (x<0 || x>100) {
166
+
167
+ vx*=-1;
168
+
169
+ }
170
+
171
+ x=constrain(x, 0, 100);
172
+
173
+ if (y<0 || y>150) {
174
+
175
+ vy*=-1;
176
+
177
+ }
178
+
179
+ y=constrain(y, 0, 150);
180
+
181
+ if (z<0 || z>150) {
182
+
183
+ vz*=-1;
184
+
185
+ }
186
+
187
+ z=constrain(z, 0, 150);
188
+
189
+
190
+
191
+ translate(x, y, z); //注視点
192
+
193
+ noStroke();
194
+
195
+ fill(192);
196
+
197
+ sphere(3);
198
+
199
+ text(String.format("%.1f, %.1f, %.1f", x, y, z), 0, 5, -5);
200
+
201
+ popMatrix();
202
+
203
+
204
+
205
+ pushMatrix();
206
+
207
+ translate(100./2, 150./2, 150./2); //左下奥隅が保存した原点になるように配置
208
+
209
+ noFill();
210
+
211
+ stroke(0);
212
+
213
+ box(100, 150, 150);
214
+
215
+ popMatrix();
216
+
217
+
218
+
219
+ pushMatrix();
220
+
221
+ translate(10./2, 15./2, 10./2); //左下奥隅にbox(10,15,10)を配置
222
+
223
+ noFill();
224
+
225
+ stroke(0, 255, 0);
226
+
227
+ box(10, 15, 10);
228
+
229
+ popMatrix();
230
+
231
+
232
+
233
+ pushMatrix();
234
+
235
+ translate(10+30./2, 50./2, 10./2); //隣(適当に決めた)にbox(30,50,10)を配置
236
+
237
+ noFill();
238
+
239
+ stroke(0, 0, 255);
240
+
241
+ box(30, 50, 10);
242
+
243
+ popMatrix();
244
+
245
+ }
246
+
247
+ ```