Improved progressive sphere
This commit is contained in:
		
							parent
							
								
									7993c02109
								
							
						
					
					
						commit
						73371aa42f
					
				| @ -8,25 +8,33 @@ var ProgressiveLoader = function(res, scene) { | |||||||
|     var mesh = new THREE.Mesh(geometry, material); |     var mesh = new THREE.Mesh(geometry, material); | ||||||
|     mesh.up = new THREE.Vector3(0,0,1); |     mesh.up = new THREE.Vector3(0,0,1); | ||||||
|     var added = false; |     var added = false; | ||||||
|  |     var finished = false; | ||||||
| 
 | 
 | ||||||
|     var socket = io(); |     var socket = io(); | ||||||
| 
 | 
 | ||||||
|     socket.emit('request', res); |     socket.emit('request', res); | ||||||
| 
 | 
 | ||||||
|  |     socket.on('ok', function() { | ||||||
|  |         socket.emit('next'); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|     socket.on('vertex', function(arr) { |     socket.on('vertex', function(arr) { | ||||||
|  |         // console.log('v(', arr[0], ')', arr[1], arr[2], arr[3]);
 | ||||||
|         mesh.geometry.vertices[arr[0]] = new THREE.Vector3(arr[1], arr[2], arr[3]); |         mesh.geometry.vertices[arr[0]] = new THREE.Vector3(arr[1], arr[2], arr[3]); | ||||||
|         mesh.geometry.verticesNeedUpdate = true; |         mesh.geometry.verticesNeedUpdate = true; | ||||||
|  |         socket.emit('next'); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     socket.on('face', function(arr) { |     socket.on('face', function(arr) { | ||||||
|  |         // console.log('f', arr[0], arr[1], arr[2]);
 | ||||||
|         mesh.geometry.faces.push(new THREE.Face3(arr[0], arr[1], arr[2])); |         mesh.geometry.faces.push(new THREE.Face3(arr[0], arr[1], arr[2])); | ||||||
| 
 | 
 | ||||||
|         if (arr[0] >= mesh.geometry.vertices.length |         // if (arr[0] >= mesh.geometry.vertices.length
 | ||||||
|             || arr[1] >= mesh.geometry.vertices.length |         //     || arr[1] >= mesh.geometry.vertices.length
 | ||||||
|             || arr[2] >= mesh.geometry.vertices.length) { |         //     || arr[2] >= mesh.geometry.vertices.length) {
 | ||||||
| 
 | 
 | ||||||
|             console.log("Error"); |         //     console.log("Error");
 | ||||||
|         } |         // }
 | ||||||
| 
 | 
 | ||||||
|         if (arr[3]) |         if (arr[3]) | ||||||
|             mesh.geometry.faces.push(new THREE.Face3(arr[0], arr[2], arr[3])); |             mesh.geometry.faces.push(new THREE.Face3(arr[0], arr[2], arr[3])); | ||||||
| @ -38,18 +46,21 @@ var ProgressiveLoader = function(res, scene) { | |||||||
| 
 | 
 | ||||||
|         // Compute the normal
 |         // Compute the normal
 | ||||||
| 
 | 
 | ||||||
|         mesh.geometry.computeFaceNormals(); |  | ||||||
|         mesh.geometry.verticesNeedUpdate = true; |         mesh.geometry.verticesNeedUpdate = true; | ||||||
|         mesh.geometry.groupsNeedUpdate = true; |         mesh.geometry.groupsNeedUpdate = true; | ||||||
|         mesh.geometry.elementsNeedUpdate = true; |         mesh.geometry.elementsNeedUpdate = true; | ||||||
|         mesh.geometry.normalsNeedUpdate = true; |         mesh.geometry.normalsNeedUpdate = true; | ||||||
| 
 | 
 | ||||||
|         if (mesh.faceNumber && mesh.faceNumber === mesh.geometry.faces.length) { |         if (finished) { | ||||||
|             console.log("Finished"); |             console.log("Finished"); | ||||||
|  |         } else { | ||||||
|  |             socket.emit('next'); | ||||||
|         } |         } | ||||||
|  |         mesh.geometry.computeFaceNormals(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     socket.on('finished', function(arg) { |     socket.on('finished', function(arg) { | ||||||
|  |         finished = true; | ||||||
|         mesh.faceNumber = arg; |         mesh.faceNumber = arg; | ||||||
|         //mesh.geometry.computeFaceNormals();
 |         //mesh.geometry.computeFaceNormals();
 | ||||||
|         mesh.geometry.verticesNeedUpdate = true; |         mesh.geometry.verticesNeedUpdate = true; | ||||||
| @ -64,5 +75,9 @@ var ProgressiveLoader = function(res, scene) { | |||||||
|         // scene.add(mesh);
 |         // scene.add(mesh);
 | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  |     socket.on('none', function() { | ||||||
|  |         socket.emit('next'); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|     return mesh; |     return mesh; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										95
									
								
								socket.js
									
									
									
									
									
								
							
							
						
						
									
										95
									
								
								socket.js
									
									
									
									
									
								
							| @ -3,53 +3,76 @@ var sleep = require('sleep'); | |||||||
| 
 | 
 | ||||||
| module.exports = function(io) { | module.exports = function(io) { | ||||||
|     io.on('connection', function(socket) { |     io.on('connection', function(socket) { | ||||||
|         console.log(socket + " connected !"); | 
 | ||||||
|  |         var index = 0; | ||||||
|  |         var path; | ||||||
|  |         var vIndex = 0; | ||||||
|  |         var fIndex = 0; | ||||||
|  | 
 | ||||||
|  |         console.log(socket.conn.remoteAddress + " connected !"); | ||||||
| 
 | 
 | ||||||
|         socket.on('disconnect', function() { |         socket.on('disconnect', function() { | ||||||
|             console.log(socket + " disconnected !"); |             console.log(socket.conn.remoteAddress + " disconnected !"); | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         socket.on("request", function(res) { |         socket.on("request", function(res) { | ||||||
|             console.log('Asking for static/data/spheres/' + res + '.obj'); |             console.log('Asking for static/data/spheres/' + res + '.obj'); | ||||||
| 
 | 
 | ||||||
|             fs.readFile('static/data/spheres/' + res + '.obj.obj', function(err, data) { |             path = 'static/data/spheres/' + res + '.obj.obj'; | ||||||
|  | 
 | ||||||
|  |             socket.emit('ok'); | ||||||
|  | 
 | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         socket.on('next', function() { | ||||||
|  | 
 | ||||||
|  |             fs.readFile(path, function(err, data) { | ||||||
|                 var lines = data.toString('utf-8').split("\n"); |                 var lines = data.toString('utf-8').split("\n"); | ||||||
|                 var vIndex = 0; |                 var line = lines[index]; | ||||||
|                 var fIndex = 0; |  | ||||||
|                 for (i = 0, iMax = lines.length; i < iMax; i++ ) { |  | ||||||
|                     if (lines[i][0] === 'v') { |  | ||||||
|                         var arr = lines[i].split(" "); |  | ||||||
|                         arr[0] = vIndex++; |  | ||||||
|                         arr[1] = parseFloat(arr[1]); |  | ||||||
|                         arr[2] = parseFloat(arr[2]); |  | ||||||
|                         arr[3] = parseFloat(arr[3]); |  | ||||||
|                         (function (arr) { |  | ||||||
|                             setTimeout(function() { |  | ||||||
|                                 socket.emit('vertex', arr); |  | ||||||
|                             }, i*100); |  | ||||||
|                         })(arr); |  | ||||||
|                     } else if (lines[i][0] === 'f') { |  | ||||||
|                         fIndex++; |  | ||||||
|                         var arr = lines[i].split(" "); |  | ||||||
|                         arr.shift(); |  | ||||||
|                         arr[0]--; |  | ||||||
|                         arr[1]--; |  | ||||||
|                         arr[2]--; |  | ||||||
| 
 | 
 | ||||||
|                         if (arr[3]) { |                 /// while (line && line.length === 0) {
 | ||||||
|                             arr[3]--; |                 ///     line = lines[++index];
 | ||||||
|                             fIndex++; |                 /// }
 | ||||||
|                         } |  | ||||||
| 
 | 
 | ||||||
|                         (function (arr) { |                 if (!line) { | ||||||
|                             setTimeout(function() { |                     socket.emit('finished'); | ||||||
|                                 socket.emit('face', arr); |                     return; | ||||||
|                             },i*100); |  | ||||||
|                         })(arr); |  | ||||||
| 
 |  | ||||||
|                     } |  | ||||||
|                 } |                 } | ||||||
|                 socket.emit('finished', fIndex); | 
 | ||||||
|  |                 if (line[0] === 'v') { | ||||||
|  | 
 | ||||||
|  |                     var arr = line.split(" "); | ||||||
|  | 
 | ||||||
|  |                     arr[0] = vIndex++; | ||||||
|  |                     arr[1] = parseFloat(arr[1]); | ||||||
|  |                     arr[2] = parseFloat(arr[2]); | ||||||
|  |                     arr[3] = parseFloat(arr[3]); | ||||||
|  | 
 | ||||||
|  |                     socket.emit('vertex', arr); | ||||||
|  |                     index++; | ||||||
|  |                     return; | ||||||
|  | 
 | ||||||
|  |                 } else if (line[0] === 'f') { | ||||||
|  | 
 | ||||||
|  |                     fIndex++; | ||||||
|  |                     var arr = line.split(" "); | ||||||
|  |                     arr.shift(); | ||||||
|  |                     arr[0]--; | ||||||
|  |                     arr[1]--; | ||||||
|  |                     arr[2]--; | ||||||
|  | 
 | ||||||
|  |                     if (arr[3]) { | ||||||
|  |                         arr[3]--; | ||||||
|  |                         fIndex++; | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     socket.emit('face', arr); | ||||||
|  |                     index++; | ||||||
|  |                     return; | ||||||
|  | 
 | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 socket.emit('none'); | ||||||
|                 // socket.disconnect();
 |                 // socket.disconnect();
 | ||||||
|             }); |             }); | ||||||
|         }); |         }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user