|
1 | 1 | <!DOCTYPE html>
|
2 | 2 | <html lang="en">
|
3 | 3 | <head>
|
4 |
| - <title>three.js webgl - collada - blender</title> |
| 4 | + <title>three.js webgl - blender -json</title> |
5 | 5 | <meta charset="utf-8">
|
6 | 6 | <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
|
7 | 7 | <style>
|
8 | 8 | body {
|
9 |
| - font-family: Monospace; |
10 |
| - background-color: #000000; |
11 |
| - margin: 0px; |
12 |
| - overflow: hidden; |
| 9 | + background:#777; |
| 10 | + padding:0; |
| 11 | + margin:0; |
| 12 | + font-weight: bold; |
| 13 | + overflow:hidden; |
13 | 14 | }
|
14 | 15 |
|
15 | 16 | #info {
|
16 |
| - color: #fff; |
17 | 17 | position: absolute;
|
18 |
| - top: 10px; |
| 18 | + top: 0px; |
19 | 19 | width: 100%;
|
20 |
| - text-align: center; |
21 |
| - z-index: 100; |
22 |
| - display:block; |
23 |
| - |
| 20 | + color: #ffffff; |
| 21 | + padding: 5px; |
| 22 | + font-family:Monospace; |
| 23 | + font-size:13px; |
| 24 | + text-align:center; |
24 | 25 | }
|
25 | 26 |
|
26 |
| - a { color: red } |
| 27 | + a { |
| 28 | + color: #ffffff; |
| 29 | + } |
27 | 30 | </style>
|
28 | 31 | </head>
|
29 |
| - |
30 | 32 | <body>
|
| 33 | + |
| 34 | + <div id="container"></div> |
31 | 35 | <div id="info">
|
32 |
| - <a href="http://threejs.org" target="_blank">three.js</a> - |
| 36 | + <a href="https://threejs.org" target="_blank">three.js</a> - |
33 | 37 | monster by <a href="http://www.3drt.com/downloads.htm" target="_blank">3drt</a>
|
34 | 38 | </div>
|
35 | 39 |
|
36 | 40 | <script src="../build/three.js"></script>
|
37 |
| - <script src="js/loaders/collada/Animation.js"></script> |
38 |
| - <script src="js/loaders/collada/AnimationHandler.js"></script> |
39 |
| - <script src="js/loaders/collada/KeyFrameAnimation.js"></script> |
40 |
| - |
41 |
| - <script src="js/loaders/ColladaLoader.js"></script> |
42 | 41 |
|
43 | 42 | <script src="js/Detector.js"></script>
|
44 | 43 | <script src="js/libs/stats.min.js"></script>
|
|
47 | 46 |
|
48 | 47 | if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
|
49 | 48 |
|
50 |
| - var container, stats; |
51 |
| - |
| 49 | + var container, stats, clock, mixer; |
52 | 50 | var camera, scene, renderer, objects;
|
53 |
| - var particleLight, pointLight; |
54 |
| - var dae; |
55 |
| - |
56 |
| - var clock = new THREE.Clock(); |
57 |
| - var mixer; |
58 |
| - |
59 |
| - // Collada model |
60 |
| - |
61 |
| - var loader = new THREE.ColladaLoader(); |
62 |
| - loader.options.convertUpAxis = true; |
63 |
| - loader.load( 'models/collada/monster/monster.dae', function ( collada ) { |
64 |
| - |
65 |
| - dae = collada.scene; |
66 |
| - |
67 |
| - dae.traverse( function ( child ) { |
68 |
| - |
69 |
| - if ( child instanceof THREE.SkinnedMesh ) { |
70 |
| - |
71 |
| - var animation = new THREE.Animation( child, child.geometry.animation ); |
72 |
| - animation.play(); |
73 |
| - |
74 |
| - } |
75 |
| - |
76 |
| - } ); |
77 |
| - |
78 |
| - dae.scale.x = dae.scale.y = dae.scale.z = 0.002; |
79 |
| - dae.position.x = -1; |
80 |
| - dae.updateMatrix(); |
81 |
| - |
82 |
| - init(); |
83 |
| - animate(); |
84 | 51 |
|
85 |
| - } ); |
| 52 | + init(); |
| 53 | + animate(); |
86 | 54 |
|
87 | 55 | function init() {
|
88 | 56 |
|
89 |
| - container = document.createElement( 'div' ); |
90 |
| - document.body.appendChild( container ); |
| 57 | + container = document.getElementById( 'container' ); |
91 | 58 |
|
92 | 59 | camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 2000 );
|
93 | 60 | camera.position.set( 2, 4, 5 );
|
94 | 61 |
|
| 62 | + clock = new THREE.Clock(); |
| 63 | + |
95 | 64 | scene = new THREE.Scene();
|
96 | 65 | scene.fog = new THREE.FogExp2( 0x000000, 0.035 );
|
97 | 66 |
|
98 |
| - // Add Blender exported Collada model |
99 |
| - |
100 | 67 | mixer = new THREE.AnimationMixer( scene );
|
101 | 68 |
|
102 | 69 | var loader = new THREE.JSONLoader();
|
|
110 | 77 |
|
111 | 78 | for ( var i = 0; i < 729; i ++ ) {
|
112 | 79 |
|
| 80 | + mesh = new THREE.Mesh( geometry, materials ); |
| 81 | + |
113 | 82 | // random placement in a grid
|
114 | 83 |
|
115 | 84 | var x = ( ( i % 27 ) - 13.5 ) * 2 + THREE.Math.randFloatSpread( 1 );
|
116 | 85 | var z = ( Math.floor( i / 27 ) - 13.5 ) * 2 + THREE.Math.randFloatSpread( 1 );
|
117 | 86 |
|
118 |
| - // leave space for big monster |
119 |
| - |
120 |
| - if ( Math.abs( x ) < 2 && Math.abs( z ) < 2 ) continue; |
121 |
| - |
122 |
| - mesh = new THREE.Mesh( geometry, materials ); |
| 87 | + mesh.position.set( x, 0, z ); |
123 | 88 |
|
124 | 89 | var s = THREE.Math.randFloat( 0.00075, 0.001 );
|
125 | 90 | mesh.scale.set( s, s, s );
|
126 | 91 |
|
127 |
| - mesh.position.set( x, 0, z ); |
128 | 92 | mesh.rotation.y = THREE.Math.randFloat( -0.25, 0.25 );
|
129 | 93 |
|
130 | 94 | mesh.matrixAutoUpdate = false;
|
131 | 95 | mesh.updateMatrix();
|
132 | 96 |
|
133 | 97 | scene.add( mesh );
|
134 | 98 |
|
135 |
| - mixer.clipAction( geometry.animations[0], mesh ) |
| 99 | + mixer.clipAction( geometry.animations[ 0 ], mesh ) |
136 | 100 | .setDuration( 1 ) // one second
|
137 | 101 | .startAt( - Math.random() ) // random phase (already running)
|
138 | 102 | .play(); // let's go
|
|
141 | 105 |
|
142 | 106 | } );
|
143 | 107 |
|
| 108 | + // lights |
144 | 109 |
|
145 |
| - // Add the COLLADA |
| 110 | + var ambientLight = new THREE.AmbientLight( 0xcccccc ); |
| 111 | + scene.add( ambientLight ); |
146 | 112 |
|
147 |
| - scene.add( dae ); |
148 |
| - |
149 |
| - // Lights |
150 |
| - |
151 |
| - scene.add( new THREE.AmbientLight( 0xcccccc ) ); |
152 |
| - |
153 |
| - pointLight = new THREE.PointLight( 0xff4400, 5, 30 ); |
| 113 | + var pointLight = new THREE.PointLight( 0xff4400, 5, 30 ); |
154 | 114 | pointLight.position.set( 5, 0, 0 );
|
155 | 115 | scene.add( pointLight );
|
156 | 116 |
|
157 |
| - // Renderer |
| 117 | + // renderer |
158 | 118 |
|
159 | 119 | renderer = new THREE.WebGLRenderer();
|
160 | 120 | renderer.setPixelRatio( window.devicePixelRatio );
|
161 | 121 | renderer.setSize( window.innerWidth, window.innerHeight );
|
162 | 122 | container.appendChild( renderer.domElement );
|
163 | 123 |
|
164 |
| - // Stats |
| 124 | + // stats |
165 | 125 |
|
166 | 126 | stats = new Stats();
|
167 | 127 | container.appendChild( stats.dom );
|
168 | 128 |
|
169 |
| - // Events |
| 129 | + // events |
170 | 130 |
|
171 | 131 | window.addEventListener( 'resize', onWindowResize, false );
|
172 | 132 |
|
|
189 | 149 |
|
190 | 150 | requestAnimationFrame( animate );
|
191 | 151 |
|
192 |
| - var delta = clock.getDelta(); |
193 |
| - |
194 |
| - // animate Collada model |
195 |
| - |
196 |
| - THREE.AnimationHandler.update( delta ); |
197 |
| - |
198 |
| - mixer.update( delta ); |
199 |
| - |
200 |
| - |
201 | 152 | render();
|
202 | 153 | stats.update();
|
203 | 154 |
|
|
211 | 162 | camera.position.y = 4;
|
212 | 163 | camera.position.z = Math.sin( timer ) * 10;
|
213 | 164 |
|
| 165 | + mixer.update( clock.getDelta() ); |
| 166 | + |
214 | 167 | camera.lookAt( scene.position );
|
215 | 168 |
|
216 | 169 | renderer.render( scene, camera );
|
|
0 commit comments