3d-interface/js/ProgressiveLoader.js

153 lines
4.1 KiB
JavaScript
Raw Normal View History

2015-06-09 17:36:21 +02:00
var ProgressiveLoader = function(res, scene) {
// Create mesh
var geometry = new THREE.Geometry();
geometry.dynamic = true;
var material = new THREE.MeshLambertMaterial();
material.color.setRGB(1,0,0);
material.side = THREE.DoubleSide;
var mesh = new THREE.Mesh(geometry, material);
mesh.up = new THREE.Vector3(0,0,1);
var added = false;
2015-06-10 11:24:59 +02:00
var finished = false;
2015-06-09 17:36:21 +02:00
var socket = io();
2015-06-09 17:36:21 +02:00
socket.emit('request', res);
2015-06-10 11:24:59 +02:00
socket.on('ok', function() {
socket.emit('next');
});
2015-06-10 11:50:47 +02:00
socket.on('elements', function(arr) {
for (var i = 0; i < arr.length; i++) {
var line = arr[i];
// console.log(line);
if (line[0] === 'v') {
var elts = line.split(' ');
mesh.geometry.vertices.push(new THREE.Vector3(
parseFloat(elts[1]),
parseFloat(elts[2]),
parseFloat(elts[3])
));
mesh.geometry.verticesNeedUpdate = true;
} else if (line[0] === 'f') {
var elts = line.split(' ');
elts[1] = parseInt(elts[1]) - 1;
elts[2] = parseInt(elts[2]) - 1;
elts[3] = parseInt(elts[3]) - 1;
if (elts[4])
elts[4] = parseInt(elts[4]) - 1;
mesh.geometry.faces.push(new THREE.Face3(
parseInt(elts[1]),
parseInt(elts[2]),
parseInt(elts[3])
));
if (elts[4]) {
mesh.geometry.faces.push(new THREE.Face3(
parseInt(elts[1]),
parseInt(elts[3]),
parseInt(elts[4])
));
}
if (!added) {
scene.add(mesh);
added = true;
}
}
}
mesh.geometry.computeFaceNormals();
mesh.geometry.groupsNeedUpdate = true;
mesh.geometry.elementsNeedUpdate = true;
mesh.geometry.normalsNeedUpdate = true;
if (!finished) {
socket.emit('next');
} else {
console.log("Finished");
}
});
2015-06-09 17:36:21 +02:00
socket.on('vertex', function(arr) {
2015-06-10 11:24:59 +02:00
// console.log('v(', arr[0], ')', arr[1], arr[2], arr[3]);
2015-06-09 17:36:21 +02:00
mesh.geometry.vertices[arr[0]] = new THREE.Vector3(arr[1], arr[2], arr[3]);
mesh.geometry.verticesNeedUpdate = true;
2015-06-10 11:24:59 +02:00
socket.emit('next');
2015-06-09 17:36:21 +02:00
});
socket.on('face', function(arr) {
2015-06-10 11:24:59 +02:00
// console.log('f', arr[0], arr[1], arr[2]);
2015-06-09 17:36:21 +02:00
mesh.geometry.faces.push(new THREE.Face3(arr[0], arr[1], arr[2]));
2015-06-10 11:24:59 +02:00
// if (arr[0] >= mesh.geometry.vertices.length
// || arr[1] >= mesh.geometry.vertices.length
// || arr[2] >= mesh.geometry.vertices.length) {
2015-06-09 17:36:21 +02:00
2015-06-10 11:24:59 +02:00
// console.log("Error");
// }
2015-06-09 17:36:21 +02:00
if (arr[3])
mesh.geometry.faces.push(new THREE.Face3(arr[0], arr[2], arr[3]));
if (!added) {
scene.add(mesh);
added = true;
}
// Compute the normal
mesh.geometry.verticesNeedUpdate = true;
mesh.geometry.groupsNeedUpdate = true;
mesh.geometry.elementsNeedUpdate = true;
mesh.geometry.normalsNeedUpdate = true;
2015-06-10 11:24:59 +02:00
if (finished) {
2015-06-09 17:36:21 +02:00
console.log("Finished");
2015-06-10 11:24:59 +02:00
} else {
socket.emit('next');
2015-06-09 17:36:21 +02:00
}
2015-06-10 11:24:59 +02:00
mesh.geometry.computeFaceNormals();
2015-06-09 17:36:21 +02:00
});
socket.on('finished', function(arg) {
2015-06-10 11:24:59 +02:00
finished = true;
2015-06-09 17:36:21 +02:00
mesh.faceNumber = arg;
//mesh.geometry.computeFaceNormals();
mesh.geometry.verticesNeedUpdate = true;
mesh.geometry.groupsNeedUpdate = true;
mesh.geometry.elementsNeedUpdate = true;
mesh.geometry.morphTargetsNeedUpdate = true;
mesh.geometry.uvsNeedUpdate = true;
mesh.geometry.normalsNeedUpdate = true;
mesh.geometry.colorsNeedUpdate = true;
mesh.geometry.tangentsNeedUpdate = true;
// scene.add(mesh);
});
2015-06-10 11:24:59 +02:00
socket.on('none', function() {
socket.emit('next');
});
2015-06-09 17:36:21 +02:00
return mesh;
}