回答編集履歴

1

WebGLRendererでないと動かないので追記

2018/08/17 02:55

投稿

rururu3
rururu3

スコア5545

test CHANGED
@@ -13,3 +13,427 @@
13
13
  https://ics.media/tutorial-three/fog.html
14
14
 
15
15
  あたりを見れば設定方法がわかるかと思います
16
+
17
+
18
+
19
+ WebGLRendererでないと動かないのでサンプルを記載します
20
+
21
+ ```index.html
22
+
23
+ <!DOCTYPE html>
24
+
25
+ <html lang="en">
26
+
27
+ <head>
28
+
29
+ <title>three.js canvas - particles - sprites</title>
30
+
31
+ <meta charset="utf-8">
32
+
33
+ <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
34
+
35
+ <style>
36
+
37
+ body {
38
+
39
+ background-color: #000000;
40
+
41
+ margin: 0px;
42
+
43
+ overflow: hidden;
44
+
45
+ }
46
+
47
+
48
+
49
+ a {
50
+
51
+ color: #0078ff;
52
+
53
+ }
54
+
55
+ </style>
56
+
57
+ </head>
58
+
59
+ <body>
60
+
61
+
62
+
63
+ <script src="../build/three.js"></script>
64
+
65
+
66
+
67
+ <script src="js/renderers/Projector.js"></script>
68
+
69
+ <script src="js/renderers/CanvasRenderer.js"></script>
70
+
71
+
72
+
73
+ <script src="js/libs/stats.min.js"></script>
74
+
75
+ <script src="js/libs/tween.min.js"></script>
76
+
77
+
78
+
79
+ <script>
80
+
81
+
82
+
83
+ var container, stats;
84
+
85
+ var camera, scene, renderer, particle;
86
+
87
+ var mouseX = 0, mouseY = 0;
88
+
89
+
90
+
91
+ var windowHalfX = window.innerWidth / 2;
92
+
93
+ var windowHalfY = window.innerHeight / 2;
94
+
95
+
96
+
97
+ init();
98
+
99
+ animate();
100
+
101
+
102
+
103
+ function init() {
104
+
105
+
106
+
107
+ container = document.createElement( 'div' );
108
+
109
+ document.body.appendChild( container );
110
+
111
+
112
+
113
+ camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 5000 );
114
+
115
+ camera.position.z = 1000;
116
+
117
+
118
+
119
+ scene = new THREE.Scene();
120
+
121
+ scene.background = new THREE.Color( 0x000040 );
122
+
123
+ scene.fog = new THREE.Fog( 0x000000, 1000, 2000 );
124
+
125
+
126
+
127
+ var light = new THREE.HemisphereLight( 0xeeeeff, 0x777788, 0.75 );
128
+
129
+ light.position.set( 0.5, 1, 0.75 );
130
+
131
+ scene.add( light );
132
+
133
+
134
+
135
+ var material = new THREE.SpriteMaterial( {
136
+
137
+ map: new THREE.CanvasTexture( generateSprite() ),
138
+
139
+ blending: THREE.AdditiveBlending,
140
+
141
+ fog: true
142
+
143
+ } );
144
+
145
+
146
+
147
+ for ( var i = 0; i < 1000; i++ ) {
148
+
149
+
150
+
151
+ particle = new THREE.Sprite( material );
152
+
153
+
154
+
155
+ initParticle( particle, i * 10 );
156
+
157
+
158
+
159
+ scene.add( particle );
160
+
161
+ }
162
+
163
+
164
+
165
+ renderer = new THREE.WebGLRenderer();
166
+
167
+ renderer.setPixelRatio( window.devicePixelRatio );
168
+
169
+ renderer.setSize( window.innerWidth, window.innerHeight );
170
+
171
+ container.appendChild( renderer.domElement );
172
+
173
+
174
+
175
+ stats = new Stats();
176
+
177
+ container.appendChild( stats.dom );
178
+
179
+
180
+
181
+ document.addEventListener( 'mousemove', onDocumentMouseMove, false );
182
+
183
+ document.addEventListener( 'touchstart', onDocumentTouchStart, false );
184
+
185
+ document.addEventListener( 'touchmove', onDocumentTouchMove, false );
186
+
187
+
188
+
189
+ //
190
+
191
+
192
+
193
+ window.addEventListener( 'resize', onWindowResize, false );
194
+
195
+
196
+
197
+ }
198
+
199
+
200
+
201
+ function onWindowResize() {
202
+
203
+
204
+
205
+ windowHalfX = window.innerWidth / 2;
206
+
207
+ windowHalfY = window.innerHeight / 2;
208
+
209
+
210
+
211
+ camera.aspect = window.innerWidth / window.innerHeight;
212
+
213
+ camera.updateProjectionMatrix();
214
+
215
+
216
+
217
+ renderer.setSize( window.innerWidth, window.innerHeight );
218
+
219
+
220
+
221
+ }
222
+
223
+
224
+
225
+ function generateSprite() {
226
+
227
+
228
+
229
+ var canvas = document.createElement( 'canvas' );
230
+
231
+ canvas.width = 16;
232
+
233
+ canvas.height = 16;
234
+
235
+
236
+
237
+ var context = canvas.getContext( '2d' );
238
+
239
+ var gradient = context.createRadialGradient( canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2 );
240
+
241
+ gradient.addColorStop( 0, 'rgba(255,255,255,1)' );
242
+
243
+ gradient.addColorStop( 0.2, 'rgba(0,255,255,1)' );
244
+
245
+ gradient.addColorStop( 0.4, 'rgba(0,0,64,1)' );
246
+
247
+ gradient.addColorStop( 1, 'rgba(0,0,0,1)' );
248
+
249
+
250
+
251
+ context.fillStyle = gradient;
252
+
253
+ context.fillRect( 0, 0, canvas.width, canvas.height );
254
+
255
+
256
+
257
+ return canvas;
258
+
259
+
260
+
261
+ }
262
+
263
+
264
+
265
+ function initParticle( particle, delay ) {
266
+
267
+
268
+
269
+ var particle = this instanceof THREE.Sprite ? this : particle;
270
+
271
+ var delay = delay !== undefined ? delay : 0;
272
+
273
+
274
+
275
+ particle.position.set( 0, 0, 0 );
276
+
277
+ particle.scale.x = particle.scale.y = Math.random() * 32 + 16;
278
+
279
+
280
+
281
+ new TWEEN.Tween( particle )
282
+
283
+ .delay( delay )
284
+
285
+ .to( {}, 10000 )
286
+
287
+ .onComplete( initParticle )
288
+
289
+ .start();
290
+
291
+
292
+
293
+ new TWEEN.Tween( particle.position )
294
+
295
+ .delay( delay )
296
+
297
+ .to( { x: Math.random() * 4000 - 2000, y: Math.random() * 1000 - 500, z: Math.random() * 4000 - 2000 }, 10000 )
298
+
299
+ .start();
300
+
301
+
302
+
303
+ new TWEEN.Tween( particle.scale )
304
+
305
+ .delay( delay )
306
+
307
+ .to( { x: 0.01, y: 0.01 }, 10000 )
308
+
309
+ .start();
310
+
311
+
312
+
313
+ }
314
+
315
+
316
+
317
+ //
318
+
319
+
320
+
321
+ function onDocumentMouseMove( event ) {
322
+
323
+
324
+
325
+ mouseX = event.clientX - windowHalfX;
326
+
327
+ mouseY = event.clientY - windowHalfY;
328
+
329
+ }
330
+
331
+
332
+
333
+ function onDocumentTouchStart( event ) {
334
+
335
+
336
+
337
+ if ( event.touches.length == 1 ) {
338
+
339
+
340
+
341
+ event.preventDefault();
342
+
343
+
344
+
345
+ mouseX = event.touches[ 0 ].pageX - windowHalfX;
346
+
347
+ mouseY = event.touches[ 0 ].pageY - windowHalfY;
348
+
349
+
350
+
351
+ }
352
+
353
+
354
+
355
+ }
356
+
357
+
358
+
359
+ function onDocumentTouchMove( event ) {
360
+
361
+
362
+
363
+ if ( event.touches.length == 1 ) {
364
+
365
+
366
+
367
+ event.preventDefault();
368
+
369
+
370
+
371
+ mouseX = event.touches[ 0 ].pageX - windowHalfX;
372
+
373
+ mouseY = event.touches[ 0 ].pageY - windowHalfY;
374
+
375
+
376
+
377
+ }
378
+
379
+
380
+
381
+ }
382
+
383
+
384
+
385
+ //
386
+
387
+
388
+
389
+ function animate() {
390
+
391
+
392
+
393
+ requestAnimationFrame( animate );
394
+
395
+
396
+
397
+ render();
398
+
399
+ stats.update();
400
+
401
+
402
+
403
+ }
404
+
405
+
406
+
407
+ function render() {
408
+
409
+
410
+
411
+ TWEEN.update();
412
+
413
+
414
+
415
+ camera.position.x += ( mouseX - camera.position.x ) * 0.05;
416
+
417
+ camera.position.y += ( - mouseY - camera.position.y ) * 0.05;
418
+
419
+ camera.lookAt( scene.position );
420
+
421
+
422
+
423
+ renderer.render( scene, camera );
424
+
425
+
426
+
427
+ }
428
+
429
+
430
+
431
+ </script>
432
+
433
+ </body>
434
+
435
+ </html>
436
+
437
+
438
+
439
+ ```