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…
Reference in New Issue