回答編集履歴

1

回答の追加

2017/08/15 00:06

投稿

Kapustin
Kapustin

スコア1186

test CHANGED
@@ -1,4 +1,10 @@
1
+ コピペする時に関数やグローバル変数、関数の呼び出しなどいくつか漏れがあるようです。
2
+
3
+
4
+
5
+
6
+
1
- ```index.html
7
+ ```
2
8
 
3
9
  <!DOCTYPE html>
4
10
 
@@ -45,3 +51,271 @@
45
51
  </html>
46
52
 
47
53
  ```
54
+
55
+
56
+
57
+ ```
58
+
59
+ var container;
60
+
61
+ var camera, scene, renderer;
62
+
63
+ var group;
64
+
65
+
66
+
67
+ var DOT_SIZE = 20;
68
+
69
+ var X_START_POS = -8 * DOT_SIZE;
70
+
71
+ var Y_START_POS = -8 * DOT_SIZE;
72
+
73
+ var Z_START_POS = -4.5 * DOT_SIZE;
74
+
75
+
76
+
77
+ // Jumping Sheep by cx20
78
+
79
+ // http://kyucon.com/qblock/#/63138
80
+
81
+ //
82
+
83
+ var dataSet = [
84
+
85
+ //省略
86
+
87
+ ];
88
+
89
+
90
+
91
+ function getRgbColor( c )
92
+
93
+ {
94
+
95
+ var colorHash = {
96
+
97
+ "×":"#000000",
98
+
99
+ "黒":"#000000",
100
+
101
+ "灰":"#808080",
102
+
103
+ "白":"#ffffff",
104
+
105
+ "肌":"#ffcccc",
106
+
107
+ "茶":"#800000",
108
+
109
+ "赤":"#ff0000",
110
+
111
+ "黄":"#ffff00",
112
+
113
+ "緑":"#00ff00",
114
+
115
+ "水":"#00ffff",
116
+
117
+ "青":"#0000ff",
118
+
119
+ "紫":"#800080"
120
+
121
+ };
122
+
123
+ return colorHash[ c ];
124
+
125
+ }
126
+
127
+
128
+
129
+ init();
130
+
131
+ animate();
132
+
133
+
134
+
135
+ function init() {
136
+
137
+ container = document.createElement('div');
138
+
139
+ document.body.appendChild(container);
140
+
141
+
142
+
143
+ // カメラを作成する
144
+
145
+ camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
146
+
147
+ camera.position.x = 0;
148
+
149
+ camera.position.y = 0;
150
+
151
+ camera.position.z = 500;
152
+
153
+
154
+
155
+ // シーンを作成する
156
+
157
+ scene = new THREE.Scene();
158
+
159
+
160
+
161
+ // 立体ドット絵を作成する
162
+
163
+ group = createSheep();
164
+
165
+
166
+
167
+ // シーンに立体ドット絵を追加する
168
+
169
+ scene.add(group);
170
+
171
+
172
+
173
+ // ライトを作成する
174
+
175
+ var light = new THREE.DirectionalLight(0xffffff);
176
+
177
+ light.position.set(0, 0, 10).normalize();
178
+
179
+ scene.add(light);
180
+
181
+
182
+
183
+ // レンダラーを作成する
184
+
185
+ renderer = new THREE.WebGLRenderer();
186
+
187
+
188
+
189
+ // 背景色を指定する(空色に変更する)
190
+
191
+ renderer.setClearColor(0x4584b4);
192
+
193
+
194
+
195
+ // レンダラーのサイズを指定する
196
+
197
+ renderer.setSize(window.innerWidth, window.innerHeight);
198
+
199
+
200
+
201
+ // HTML との紐づけを行う
202
+
203
+ container.appendChild(renderer.domElement);
204
+
205
+ }
206
+
207
+
208
+
209
+ function createSheep() {
210
+
211
+ // 立体ドット絵をグループ化して返却する
212
+
213
+ var group = new THREE.Object3D();
214
+
215
+
216
+
217
+ // 箱を用意する
218
+
219
+ var geometry = new THREE.BoxGeometry(DOT_SIZE * 0.9, DOT_SIZE * 0.9, DOT_SIZE * 0.9);
220
+
221
+
222
+
223
+ // ドット絵の枚数ぶんループする
224
+
225
+ for (var j = 0; j < dataSet.length; j++) {
226
+
227
+
228
+
229
+ // ドット絵1枚のドット数ぶんループする
230
+
231
+ for (var i = 0; i < dataSet[j].length; i++) {
232
+
233
+
234
+
235
+ // ドット絵の表示座標を計算する
236
+
237
+ var x = (i % 16) * DOT_SIZE + X_START_POS;
238
+
239
+ var y = (16 - Math.floor(i / 16)) * DOT_SIZE + Y_START_POS;
240
+
241
+ var z = j * DOT_SIZE + Z_START_POS;
242
+
243
+
244
+
245
+ // ドット絵の色を取得する("赤"→"#ff0000"に変換する)
246
+
247
+ var color = getRgbColor(dataSet[j][i]);
248
+
249
+
250
+
251
+ // ドットが "×" でなければ
252
+
253
+ if (dataSet[j][i] != "×") {
254
+
255
+ // 色を指定する
256
+
257
+ var material = new THREE.MeshLambertMaterial({color: color});
258
+
259
+
260
+
261
+ // 箱に色をつける
262
+
263
+ var mesh = new THREE.Mesh(geometry, material);
264
+
265
+
266
+
267
+ // 箱の位置を指定する
268
+
269
+ mesh.position.x = x;
270
+
271
+ mesh.position.y = y;
272
+
273
+ mesh.position.z = z;
274
+
275
+
276
+
277
+ // グループ化する
278
+
279
+ group.add(mesh);
280
+
281
+ }
282
+
283
+ }
284
+
285
+ }
286
+
287
+
288
+
289
+ // 立体ドット絵を返却する
290
+
291
+ return group;
292
+
293
+ }
294
+
295
+
296
+
297
+ function animate() {
298
+
299
+ requestAnimationFrame(animate);
300
+
301
+ render();
302
+
303
+ }
304
+
305
+
306
+
307
+ function render() {
308
+
309
+ // 立体ドット絵をY軸に回転させる
310
+
311
+ group.rotation.y += Math.PI / 180;
312
+
313
+
314
+
315
+ // 表示を更新する
316
+
317
+ renderer.render(scene, camera);
318
+
319
+ }
320
+
321
+ ```