3d-interface/js/ProgressiveLoader.js

100 lines
2.5 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;
2015-06-10 11:59:02 +02:00
2015-06-09 17:36:21 +02:00
var material = new THREE.MeshLambertMaterial();
material.color.setRGB(1,0,0);
material.side = THREE.DoubleSide;
2015-06-10 11:59:02 +02:00
2015-06-09 17:36:21 +02:00
var mesh = new THREE.Mesh(geometry, material);
mesh.up = new THREE.Vector3(0,0,1);
2015-06-10 11:59:02 +02:00
2015-06-09 17:36:21 +02:00
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
2015-06-10 11:59:02 +02:00
// Init streaming with socket
2015-06-09 17:36:21 +02:00
socket.emit('request', res);
2015-06-10 11:59:02 +02:00
// When server's ready, start asking for the mesh
2015-06-10 11:24:59 +02:00
socket.on('ok', function() {
socket.emit('next');
});
2015-06-10 11:59:02 +02:00
// When receiving elements
2015-06-10 11:50:47 +02:00
socket.on('elements', function(arr) {
2015-06-10 14:48:11 +02:00
if (!finished) {
socket.emit('next');
}
2015-06-10 12:00:57 +02:00
// Launch this code in async
setTimeout(function() {
2015-06-10 11:50:47 +02:00
2015-06-10 12:00:57 +02:00
// We'll receive an array of string (obj)
for (var i = 0; i < arr.length; i++) {
2015-06-10 11:50:47 +02:00
2015-06-10 14:31:16 +02:00
var elts = arr[i];
2015-06-10 11:50:47 +02:00
2015-06-10 12:00:57 +02:00
// console.log(line);
2015-06-10 11:50:47 +02:00
2015-06-10 14:31:16 +02:00
if (elts[0] === 'v') {
2015-06-10 11:50:47 +02:00
2015-06-10 12:00:57 +02:00
mesh.geometry.vertices.push(new THREE.Vector3(
2015-06-10 14:31:16 +02:00
elts[1],
elts[2],
elts[3]
2015-06-10 12:00:57 +02:00
));
2015-06-10 11:50:47 +02:00
2015-06-10 12:00:57 +02:00
mesh.geometry.verticesNeedUpdate = true;
2015-06-10 11:50:47 +02:00
2015-06-10 14:31:16 +02:00
} else if (elts[0] === 'f') {
2015-06-10 11:50:47 +02:00
2015-06-10 12:00:57 +02:00
if (elts[4])
2015-06-10 14:31:16 +02:00
elts[4] = parseInt(elts[4]);
2015-06-10 11:50:47 +02:00
mesh.geometry.faces.push(new THREE.Face3(
2015-06-10 14:31:16 +02:00
elts[1],
elts[2],
elts[3]
2015-06-10 11:50:47 +02:00
));
2015-06-10 12:00:57 +02:00
// If the face has 4 vertices, create second triangle
if (elts[4]) {
mesh.geometry.faces.push(new THREE.Face3(
2015-06-10 14:31:16 +02:00
elts[1],
elts[3],
elts[4]
2015-06-10 12:00:57 +02:00
));
}
// Add mesh to scene one there are a few faces in it
if (!added) {
scene.add(mesh);
added = true;
}
2015-06-10 11:50:47 +02:00
}
}
2015-06-10 12:00:57 +02:00
mesh.geometry.computeFaceNormals();
mesh.geometry.groupsNeedUpdate = true;
mesh.geometry.elementsNeedUpdate = true;
mesh.geometry.normalsNeedUpdate = true;
2015-06-10 11:50:47 +02:00
2015-06-10 12:00:57 +02:00
},0);
2015-06-10 11:50:47 +02:00
});
2015-06-10 14:48:11 +02:00
socket.on('disconnect', function() {
console.log("Finished");
2015-06-10 11:24:59 +02:00
finished = true;
2015-06-09 17:36:21 +02:00
});
return mesh;
}