|
18 | 18 | <script src="../build/three.js"></script> |
19 | 19 |
|
20 | 20 | <script src="js/Detector.js"></script> |
21 | | - <script src="js/libs/stats.min.js"></script> |
22 | 21 |
|
23 | 22 | <script> |
24 | 23 |
|
25 | 24 | if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); |
26 | 25 |
|
27 | | - var container, stats; |
| 26 | + var container; |
28 | 27 |
|
29 | 28 | var camera, scene, renderer; |
30 | 29 |
|
31 | 30 | var objectNewGeometry; |
32 | 31 | var objectToggleAddRemove; |
33 | 32 | var objectRandomizeFaces; |
| 33 | + var objectRandomizeMaterialIndices; |
34 | 34 |
|
35 | 35 | init(); |
36 | 36 | animate(); |
|
41 | 41 | document.body.appendChild( container ); |
42 | 42 |
|
43 | 43 | camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 ); |
44 | | - camera.position.y = 1500; |
| 44 | + camera.position.z = 600; |
45 | 45 |
|
46 | 46 | scene = new THREE.Scene(); |
47 | 47 |
|
48 | | - var light, object; |
49 | | - |
50 | | - scene.add( new THREE.AmbientLight( 0x404040 ) ); |
51 | | - |
52 | | - light = new THREE.DirectionalLight( 0xffffff ); |
53 | | - light.position.set( 0, 1, 0 ); |
54 | | - scene.add( light ); |
55 | | - |
56 | | - var map = new THREE.TextureLoader().load( 'textures/UV_Grid_Sm.jpg' ); |
57 | | - map.wrapS = map.wrapT = THREE.RepeatWrapping; |
58 | | - map.anisotropy = 16; |
59 | | - |
60 | | - //var material = new THREE.MeshLambertMaterial( { map: map, side: THREE.DoubleSide } ); |
61 | | - |
62 | 48 | // |
63 | 49 |
|
64 | | - object = createObject( createMultiMaterial(), 4 ); |
65 | | - object.position.set( -400, 0, 200 ); |
| 50 | + var object = createObject( createMultiMaterial(), 1 ); |
| 51 | + object.position.set( -100, 100, 0 ); |
66 | 52 | scene.add( object ); |
67 | 53 | objectNewGeometry = object; |
68 | 54 |
|
69 | | - object = createObject( createMultiMaterial(), 4 ); |
70 | | - object.position.set( -200, 0, 200 ); |
| 55 | + object = createObject( createMultiMaterial(), 1 ); |
| 56 | + object.position.set( 100, 100, 0 ); |
71 | 57 | scene.add( object ); |
72 | 58 | objectToggleAddRemove = object; |
73 | 59 |
|
74 | 60 | object = createObject( createMultiMaterial(), 4 ); |
75 | | - object.position.set( 0, 0, 200 ); |
| 61 | + object.position.set( -100, -100, 0 ); |
76 | 62 | scene.add( object ); |
77 | 63 | objectRandomizeFaces = object; |
78 | | -/* |
79 | | - These are not yet used but they are ready to be shown |
80 | | - object = createObject( createMultiMaterial(), 4 ); |
81 | | - object.position.set( 200, 0, 200 ); |
82 | | - scene.add( object ); |
83 | | -
|
84 | | - // |
85 | | -
|
86 | | - object = createObject( createMultiMaterial(), 4 ); |
87 | | - object.position.set( -400, 0, 0 ); |
88 | | - scene.add( object ); |
89 | | -
|
90 | | - object = createObject( createMultiMaterial(), 4 ); |
91 | | - object.position.set( -200, 0, 0 ); |
92 | | - scene.add( object ); |
93 | | -
|
94 | | - object = createObject( createMultiMaterial(), 4 ); |
95 | | - object.position.set( 0, 0, 0 ); |
96 | | - scene.add( object ); |
97 | 64 |
|
98 | 65 | object = createObject( createMultiMaterial(), 4 ); |
99 | | - object.position.set( 200, 0, 0 ); |
| 66 | + object.position.set( 100, -100, 0 ); |
100 | 67 | scene.add( object ); |
| 68 | + objectRandomizeMaterialIndices = object; |
101 | 69 |
|
102 | | - object = createObject( createMultiMaterial(), 4 ); |
103 | | - object.position.set( 400, 0, 0 ); |
104 | | - scene.add( object ); |
105 | | - */ |
106 | 70 | // |
107 | 71 |
|
108 | 72 | // |
|
112 | 76 | renderer.setSize( window.innerWidth, window.innerHeight ); |
113 | 77 | container.appendChild( renderer.domElement ); |
114 | 78 |
|
115 | | - stats = new Stats(); |
116 | | - container.appendChild( stats.dom ); |
117 | | - |
118 | 79 | // |
119 | 80 |
|
120 | 81 | window.addEventListener( 'resize', onWindowResize, false ); |
121 | 82 |
|
122 | 83 | } |
123 | 84 |
|
124 | | - function createObject(material, segments ){ |
125 | | - var geometry = createGeometry(segments); |
126 | | - var mesh = new THREE.Mesh( geometry , material); |
127 | | - return mesh; |
| 85 | + function createObject( material, segments ){ |
| 86 | + |
| 87 | + var geometry = createGeometry( segments ); |
| 88 | + return new THREE.Mesh( geometry, material ); |
| 89 | + |
128 | 90 | } |
129 | | - function createGeometry(segments){ |
| 91 | + |
| 92 | + function createGeometry( segments ) { |
| 93 | + |
130 | 94 | var matrix = new THREE.Matrix4(); |
131 | 95 | var euler = new THREE.Euler(); |
132 | 96 | var geometry = new THREE.BoxGeometry( 100, 100, 100, segments, segments, segments ); |
133 | | - geometry.applyMatrix(matrix.makeRotationFromEuler(euler.set(parseInt(Math.random()*2,10)*Math.PI,parseInt(Math.random()*2,10)*Math.PI,parseInt(Math.random()*2,10)*Math.PI))); |
| 97 | + geometry.applyMatrix(matrix.makeRotationFromEuler(euler.set(Math.random()*2*Math.PI,Math.random()*2*Math.PI,Math.random()*2*Math.PI))); |
134 | 98 | return geometry; |
| 99 | + |
135 | 100 | } |
136 | 101 |
|
137 | 102 | function createMultiMaterial(){ |
138 | | - var materials = []; |
139 | | - materials.push(new THREE.MeshBasicMaterial({color: 0xff0000})); |
140 | | - materials.push(new THREE.MeshBasicMaterial({color: 0xffff00})); |
141 | | - materials.push(new THREE.MeshBasicMaterial({color: 0x00ff00})); |
142 | | - materials.push(new THREE.MeshBasicMaterial({color: 0x00ffff})); |
143 | | - materials.push(new THREE.MeshBasicMaterial({color: 0x0000ff})); |
144 | | - materials.push(new THREE.MeshBasicMaterial({color: 0xff00ff})); |
145 | | - var material = new THREE.MultiMaterial(materials); |
146 | | - return material; |
| 103 | + var materials = [ |
| 104 | + new THREE.MeshBasicMaterial( { color: 0xff0000 } ), |
| 105 | + new THREE.MeshBasicMaterial( { color: 0xffff00 } ), |
| 106 | + new THREE.MeshBasicMaterial( { color: 0x00ff00 } ), |
| 107 | + new THREE.MeshBasicMaterial( { color: 0x00ffff } ), |
| 108 | + new THREE.MeshBasicMaterial( { color: 0x0000ff } ), |
| 109 | + new THREE.MeshBasicMaterial( { color: 0xff00ff } ) |
| 110 | + ]; |
| 111 | + |
| 112 | + return new THREE.MultiMaterial( materials ); |
147 | 113 | } |
148 | 114 |
|
149 | 115 | function onWindowResize() { |
|
159 | 125 |
|
160 | 126 | function animate() { |
161 | 127 |
|
162 | | - requestAnimationFrame( animate ); |
| 128 | + setTimeout( animate, 1000 ); |
163 | 129 |
|
164 | 130 | render(); |
165 | | - stats.update(); |
166 | 131 |
|
167 | 132 | } |
168 | 133 |
|
169 | | - function randomizeFaces(object){ |
170 | | - for(var i = 0,l=object.geometry.faces.length;i<l;i++){ |
| 134 | + function randomizeFaces( object ) { |
| 135 | + |
| 136 | + var geometry = object.geometry; |
| 137 | + var faces = geometry.faces; |
171 | 138 |
|
172 | | - object.geometry.faces[i].materialIndex = Math.floor(Math.random() * 6); |
| 139 | + for ( var i = 0, l = faces.length; i < l; i ++ ) { |
| 140 | + |
| 141 | + faces[ i ].a = Math.floor( Math.random() * geometry.vertices.length ); |
| 142 | + faces[ i ].b = Math.floor( Math.random() * geometry.vertices.length ); |
| 143 | + faces[ i ].c = Math.floor( Math.random() * geometry.vertices.length ); |
173 | 144 |
|
174 | 145 | } |
175 | | - object.geometry.groupsNeedUpdate = true; |
| 146 | + |
| 147 | + geometry.elementsNeedUpdate = true; |
| 148 | + |
176 | 149 | } |
177 | 150 |
|
178 | | - function render() { |
| 151 | + function randomizeMaterialIndices( object ) { |
179 | 152 |
|
180 | | - var timer = Date.now() * 0.001; |
| 153 | + var geometry = object.geometry; |
| 154 | + var faces = geometry.faces; |
181 | 155 |
|
182 | | - if (parseInt(timer,10)%2 === 0){ |
| 156 | + for ( var i = 0, l = faces.length; i < l; i ++ ) { |
183 | 157 |
|
184 | | - if (scene.children.indexOf(objectToggleAddRemove) === -1) { |
| 158 | + faces[ i ].materialIndex = Math.floor( Math.random() * 6 ); |
185 | 159 |
|
| 160 | + } |
186 | 161 |
|
187 | | - objectNewGeometry.geometry = createGeometry(1); |
188 | | - randomizeFaces(objectRandomizeFaces); |
| 162 | + geometry.groupsNeedUpdate = true; |
189 | 163 |
|
190 | | - scene.add(objectToggleAddRemove); |
| 164 | + } |
191 | 165 |
|
192 | | - } |
| 166 | + function render() { |
193 | 167 |
|
194 | | - } else { |
| 168 | + objectNewGeometry.geometry = createGeometry( 1 ); |
195 | 169 |
|
196 | | - if (scene.children.indexOf(objectToggleAddRemove) !== -1) { |
| 170 | + if ( scene.children.indexOf( objectToggleAddRemove ) === -1 ) { |
197 | 171 |
|
198 | | - objectNewGeometry.geometry = createGeometry(1); |
199 | | - randomizeFaces(objectRandomizeFaces); |
| 172 | + scene.add( objectToggleAddRemove ); |
200 | 173 |
|
201 | | - scene.remove(objectToggleAddRemove); |
| 174 | + } else { |
202 | 175 |
|
203 | | - } |
| 176 | + scene.remove( objectToggleAddRemove ); |
204 | 177 |
|
205 | 178 | } |
206 | 179 |
|
207 | | - camera.lookAt( scene.position ); |
| 180 | + randomizeFaces( objectRandomizeFaces ); |
| 181 | + randomizeMaterialIndices( objectRandomizeMaterialIndices ); |
208 | 182 |
|
209 | 183 | renderer.render( scene, camera ); |
210 | 184 |
|
|
0 commit comments