Some cleaning 😢

This commit is contained in:
Thomas FORGIONE 2015-11-13 10:36:54 +01:00
parent 59518eb702
commit 5e0a6c3121
113 changed files with 433 additions and 67 deletions

View File

@ -138,6 +138,8 @@ L3D.PointerCamera = function() {
*/ */
this.listenerTarget = listenerTarget; this.listenerTarget = listenerTarget;
this.movingToRecommendation = null;
// Set events from the document // Set events from the document
var self = this; var self = this;
var onKeyDown = function(event) {self.onKeyDown(event);}; var onKeyDown = function(event) {self.onKeyDown(event);};

View File

Before

Width:  |  Height:  |  Size: 4.5 MiB

After

Width:  |  Height:  |  Size: 4.5 MiB

View File

@ -1,9 +1,9 @@
OPT=--compilation_level SIMPLE_OPTIMIZATIONS OPT=--compilation_level SIMPLE_OPTIMIZATIONS
ifeq ($(TYPE),RELEASE) ifeq ($(TYPE),RELEASE)
CLOSURE=java -jar ../utils/closure-compiler/closure-compiler.jar CLOSURE=java -jar ../../utils/closure-compiler/closure-compiler.jar
else else
CLOSURE=../utils/simple-compiler/compiler.sh CLOSURE=../../utils/simple-compiler/compiler.sh
endif endif
all: Geo all: Geo

View File

@ -1,4 +1,6 @@
var Log = require('../lib/NodeLog.js'); var Log = require('../lib/NodeLog.js');
var L3D = require('../../static/js/l3d.min.js');
var THREE = require('three');
function clone(vec) { function clone(vec) {
return {x : vec.x, y : vec.y, z : vec.z}; return {x : vec.x, y : vec.y, z : vec.z};
@ -110,7 +112,7 @@ geo.MeshContainer = function(path, transfo, callback) {
if (path !== undefined) { if (path !== undefined) {
this.loadFromFile(path); this.loadFromFile('../' + path);
} }
@ -233,12 +235,18 @@ function trySetLoaded() {
var availableMeshNames = { var availableMeshNames = {
'/static/data/castle/princess peaches castle (outside).obj': { '/static/data/castle/princess peaches castle (outside).obj': {
done: false done: false,
recommendations : L3D.createPeachRecommendations(1134, 768)
}, },
'/static/data/mountain/coocoolmountain.obj': { '/static/data/mountain/coocoolmountain.obj': {
done: false done: false,
recommendations : L3D.createMountainRecommendations(1134, 768)
},
'/static/data/mountain/coocoolmountain_sub.obj': {
done: false,
recommendations : L3D.createMountainRecommendations(1134, 768)
}, },
'/static/data/whomp/Whomps Fortress.obj': { '/static/data/whomp/Whomps Fortress.obj': {
done: false, done: false,
transfo: { transfo: {
@ -253,9 +261,26 @@ var availableMeshNames = {
z: 0 z: 0
}, },
scale: 0.1 scale: 0.1
}
}, },
recommendations : L3D.createWhompRecommendations(1134, 768)
},
'/static/data/whomp/Whomps Fortress_sub.obj': {
done: false,
transfo: {
rotation: {
x: -Math.PI / 2,
y: 0,
z: Math.PI / 2
},
translation: {
x: 0,
y: 0,
z: 0
},
scale: 0.1
},
recommendations : L3D.createWhompRecommendations(1134, 768)
},
'/static/data/bobomb/bobomb battlefeild.obj': { '/static/data/bobomb/bobomb battlefeild.obj': {
done: false, done: false,
transfo: { transfo: {
@ -269,8 +294,26 @@ var availableMeshNames = {
y: 0, y: 0,
z: 0 z: 0
} }
},
recommendations : L3D.createBobombRecommendations(1134, 768)
},
'/static/data/bobomb/bobomb battlefeild_sub.obj': {
done: false,
transfo: {
rotation: {
x: 0,
y: Math.PI - 0.27,
z: 0
},
translation: {
x: 0,
y: 0,
z: 0
} }
}, },
recommendations : L3D.createBobombRecommendations(1134, 768)
},
'/static/data/sponza/sponza.obj': { '/static/data/sponza/sponza.obj': {
done: false done: false
@ -294,6 +337,36 @@ function pushMesh(name) {
name.substring(1, name.length), name.substring(1, name.length),
availableMeshNames[name].transfo, availableMeshNames[name].transfo,
function() { function() {
geo.availableMeshes[name].recommendations = [];
if (availableMeshNames[name].recommendations !== undefined) {
for (var i = 0; i < availableMeshNames[name].recommendations.length; i++) {
var reco = availableMeshNames[name].recommendations[i].camera;
reco.lookAt(reco.target);
reco.updateMatrix();
reco.updateProjectionMatrix();
reco.updateMatrixWorld();
reco.matrixWorldInverse.getInverse( reco.matrixWorld );
var frustum = new THREE.Frustum();
var projScreenMatrix = new THREE.Matrix4();
projScreenMatrix.multiplyMatrices(reco.projectionMatrix, reco.matrixWorldInverse);
frustum.setFromMatrix(new THREE.Matrix4().multiplyMatrices(reco.projectionMatrix, reco.matrixWorldInverse));
geo.availableMeshes[name].recommendations.push({
position: reco.position,
frustum: frustum.planes
});
}
}
availableMeshNames[name].done = true; availableMeshNames[name].done = true;
trySetLoaded(); trySetLoaded();
} }

View File

@ -1,3 +1,59 @@
var THREE = require('three');
var L3D = require('../../static/js/l3d.min.js');
function isInFrustum(element, planes) {
if (element instanceof Array) {
var outcodes = [];
for (var i = 0; i < element.length; i++) {
var vertex = element[i];
var currentOutcode = "";
for (var j = 0; j < planes.length; j++) {
var plane = planes[j];
distance =
plane.normal.x * vertex.x +
plane.normal.y * vertex.y +
plane.normal.z * vertex.z +
plane.constant;
// if (distance < 0) {
// exitToContinue = true;
// break;
// }
currentOutcode += distance > 0 ? '0' : '1';
}
outcodes.push(parseInt(currentOutcode,2));
}
// http://vterrain.org/LOD/culling.html
// I have no idea what i'm doing
// http://i.kinja-img.com/gawker-media/image/upload/japbcvpavbzau9dbuaxf.jpg
// But it seems to work
// EDIT : Not, this should be ok http://www.cs.unc.edu/~blloyd/comp770/Lecture07.pdf
if ((outcodes[0] | outcodes[1] | outcodes[2]) === 0) {
return true;
} else if ((outcodes[0] & outcodes[1] & outcodes[2]) !== 0) {
return false;
} else {
// part of the triangle is inside the viewing volume
return true;
}
}
}
/** /**
* @private * @private
*/ */
@ -97,6 +153,18 @@ geo.MeshStreamer = function(path) {
}; };
geo.MeshStreamer.prototype.isBackFace = function(camera, face) {
var directionCamera = L3D.Tools.diff(camera.target, camera.position);
var v1 = L3D.Tools.diff(this.mesh.vertices[face.b], this.mesh.vertices[face.a]);
var v2 = L3D.Tools.diff(this.mesh.vertices[face.c], this.mesh.vertices[face.a]);
var normal = L3D.Tools.cross(v1, v2);
return L3D.Tools.dot(directionCamera, normal) > 0;
};
/** /**
* Compute a function that can compare two faces * Compute a function that can compare two faces
* @param {Camera} camera a camera seeing or not face * @param {Camera} camera a camera seeing or not face
@ -192,6 +260,13 @@ geo.MeshStreamer.prototype.start = function(socket) {
self.mesh = geo.availableMeshes[path]; self.mesh = geo.availableMeshes[path];
if (self.mesh === undefined) {
process.stderr.write('Wrong path for model : ' + path);
socket.emit('refused');
socket.disconnect();
return;
}
self.meshFaces = new Array(self.mesh.meshes.length); self.meshFaces = new Array(self.mesh.meshes.length);
for (var i = 0; i < self.meshFaces.length; i++) { for (var i = 0; i < self.meshFaces.length; i++) {
@ -203,15 +278,6 @@ geo.MeshStreamer.prototype.start = function(socket) {
} }
var regex = /.*\.\..*/;
var filePath = path.substring(1, path.length);
if (regex.test(filePath)) {
socket.emit('refused');
socket.disconnect();
return;
}
socket.emit('ok'); socket.emit('ok');
}); });
@ -344,8 +410,8 @@ geo.MeshStreamer.prototype.nextElements = function(_camera, force) {
var mightBeCompletetlyFinished = true; var mightBeCompletetlyFinished = true;
// BOOM // BOOM
if (camera != null) // if (camera != null)
this.mesh.faces.sort(this.faceComparator(camera)); // this.mesh.faces.sort(this.faceComparator(camera));
for (var faceIndex = 0; faceIndex < this.mesh.faces.length; faceIndex++) { for (var faceIndex = 0; faceIndex < this.mesh.faces.length; faceIndex++) {
@ -355,64 +421,30 @@ geo.MeshStreamer.prototype.nextElements = function(_camera, force) {
continue; continue;
} else { }
mightBeCompletetlyFinished = false; mightBeCompletetlyFinished = false;
}
var vertex1 = this.mesh.vertices[currentFace.a]; var vertex1 = this.mesh.vertices[currentFace.a];
var vertex2 = this.mesh.vertices[currentFace.b]; var vertex2 = this.mesh.vertices[currentFace.b];
var vertex3 = this.mesh.vertices[currentFace.c]; var vertex3 = this.mesh.vertices[currentFace.c];
if (!force) { if (!force && camera !== null) {
var display = false; var display = false;
var outcodes = [];
var exitToContinue = false; var exitToContinue = false;
threeVertices = [vertex1, vertex2, vertex3]; threeVertices = [vertex1, vertex2, vertex3];
for (i = 0; i < threeVertices.length; i++) { // Frustum culling
if (!isInFrustum(threeVertices, planes)) {
var vertex = threeVertices[i];
var currentOutcode = "";
for (var j = 0; j < planes.length; j++) {
var plane = planes[j];
distance =
plane.normal.x * vertex.x +
plane.normal.y * vertex.y +
plane.normal.z * vertex.z +
plane.constant;
// if (distance < 0) {
// exitToContinue = true;
// break;
// }
currentOutcode += distance > 0 ? '0' : '1';
}
outcodes.push(parseInt(currentOutcode,2));
}
// http://vterrain.org/LOD/culling.html
// I have no idea what i'm doing
// http://i.kinja-img.com/gawker-media/image/upload/japbcvpavbzau9dbuaxf.jpg
// But it seems to work
if ( (outcodes[0] | outcodes[1]) === 0 && (outcodes[1] | outcodes[2]) === 0 ) {
// all points in
} else if ( (outcodes[0] === outcodes[1]) && (outcodes[0] === outcodes[2]) ) {
// all points out
continue; continue;
} }
else {
// part of the triangle is inside the viewing volume // Backface culling
if (this.isBackFace(camera, currentFace)) {
continue;
} }
} }
if (!this.vertices[currentFace.a]) { if (!this.vertices[currentFace.a]) {

1
server/geo/mat1.json Normal file
View File

@ -0,0 +1 @@
[[0,0.07894736842105263,0.18421052631578946,0,0.02631578947368421,0.02631578947368421,0,0.02631578947368421,0,0.13157894736842105,0.2894736842105263,0.2631578947368421],[0,0,0.10526315789473684,0.15789473684210525,0.18421052631578946,0.02631578947368421,0,0.07894736842105263,0.02631578947368421,0.05263157894736842,0.05263157894736842,0.05263157894736842],[0,0.02631578947368421,0,0.5,0.02631578947368421,0.02631578947368421,0.02631578947368421,0.07894736842105263,0.02631578947368421,0.07894736842105263,0.07894736842105263,0.05263157894736842],[0,0.05263157894736842,0.07894736842105263,0,0.4473684210526316,0.02631578947368421,0.13157894736842105,0.02631578947368421,0,0.07894736842105263,0,0.13157894736842105],[0,0,0.02631578947368421,0.15789473684210525,0,0.3157894736842105,0.21052631578947367,0.05263157894736842,0,0.07894736842105263,0,0.10526315789473684],[0,0.10526315789473684,0,0.05263157894736842,0.13157894736842105,0,0.13157894736842105,0.05263157894736842,0.15789473684210525,0.02631578947368421,0.02631578947368421,0.02631578947368421],[0,0.15789473684210525,0.10526315789473684,0,0,0.10526315789473684,0,0.05263157894736842,0.21052631578947367,0.13157894736842105,0,0],[0,0.07894736842105263,0.05263157894736842,0.02631578947368421,0.07894736842105263,0.07894736842105263,0.10526315789473684,0,0.07894736842105263,0.02631578947368421,0.02631578947368421,0.05263157894736842],[0,0,0.10526315789473684,0.02631578947368421,0.02631578947368421,0.18421052631578946,0.15789473684210525,0,0,0.21052631578947367,0.07894736842105263,0.07894736842105263],[0,0.07894736842105263,0.10526315789473684,0.02631578947368421,0,0,0.07894736842105263,0.15789473684210525,0.13157894736842105,0,0.21052631578947367,0.07894736842105263],[0,0.02631578947368421,0.10526315789473684,0.07894736842105263,0.05263157894736842,0.02631578947368421,0,0.02631578947368421,0.23684210526315788,0.07894736842105263,0,0.10526315789473684],[0,0.18421052631578946,0.13157894736842105,0.13157894736842105,0.10526315789473684,0.02631578947368421,0,0.13157894736842105,0.02631578947368421,0.05263157894736842,0.07894736842105263,0]]

1
server/geo/mat1.json.bak Normal file
View File

@ -0,0 +1 @@
[[0,0,602,0,0,0,0,0,0,151,191,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,1116,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,87,0,0,0,0,0,0,0,0,0,82],[0,0,0,0,0,0,0,0,195,0,0,0],[0,86,41,0,0,0,0,0,0,563,74,72],[0,0,59,0,0,0,0,0,0,0,0,49],[0,147,151,0,0,0,0,0,0,0,0,110],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0]]

1
server/geo/mat2.json Normal file
View File

@ -0,0 +1 @@
[[0,0.03125,0.09375,0.5,0.21875,0.03125,0.09375,0.1875,0,0.125,0.15625,0],[0,0,0.15625,0.0625,0.21875,0.0625,0.15625,0.09375,0,0.0625,0.03125,0],[0,0.21875,0,0.0625,0.0625,0,0,0,0,0,0.03125,0.0625],[0,0.09375,0.0625,0,0.25,0.03125,0.1875,0.1875,0.03125,0.25,0,0.03125],[0,0.125,0.0625,0.125,0,0.03125,0,0,0.1875,0.09375,0.15625,0.0625],[0,0.03125,0,0,0,0,0.21875,0,0.25,0,0,0.1875],[0,0.03125,0.0625,0.0625,0.03125,0.34375,0,0.125,0.34375,0,0.40625,0.0625],[0,0.125,0,0.15625,0,0.0625,0.25,0,0.03125,0.09375,0,0],[0,0.125,0.03125,0.0625,0,0.1875,0.15625,0.03125,0,0.0625,0,0.25],[0,0.1875,0,0.125,0.125,0,0.0625,0.03125,0,0,0.03125,0.125],[0,0.0625,0.0625,0.03125,0.09375,0,0.46875,0.09375,0.03125,0.09375,0,0.1875],[0,0,0.0625,0.0625,0,0,0,0.03125,0.1875,0.125,0.46875,0]]

1
server/geo/mat2.json.bak Normal file
View File

@ -0,0 +1 @@
[[0,0,0,218,0,0,0,0,0,0,0,0],[0,0,0,106,36,0,0,182,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,3,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,72],[0,0,0,0,0,0,0,0,0,0,0,0]]

1
server/geo/mat3.json Normal file
View File

@ -0,0 +1 @@
[[0,0.05555555555555555,0.08333333333333333,0,0.16666666666666666,0.027777777777777776,0.5,0,0.05555555555555555,0.027777777777777776,0],[0,0,0.05555555555555555,0.08333333333333333,0.08333333333333333,0,0.08333333333333333,0,0.027777777777777776,0.027777777777777776,0],[0,0.05555555555555555,0,0.1111111111111111,0.027777777777777776,0,0.027777777777777776,0,0.027777777777777776,0.027777777777777776,0],[0,0.05555555555555555,0.027777777777777776,0,0.1111111111111111,0,0.027777777777777776,0.027777777777777776,0.08333333333333333,0.027777777777777776,0],[0,0.08333333333333333,0,0.1111111111111111,0,0.3888888888888889,0,0.16666666666666666,0.05555555555555555,0.027777777777777776,0.05555555555555555],[0,0,0,0.027777777777777776,0.25,0,0.1111111111111111,0.1388888888888889,0,0,0.2222222222222222],[0,0.05555555555555555,0.08333333333333333,0.1388888888888889,0,0.027777777777777776,0,0.027777777777777776,0.08333333333333333,0.16666666666666666,0.3055555555555556],[0,0.027777777777777776,0.027777777777777776,0,0.027777777777777776,0.1388888888888889,0.05555555555555555,0,0.08333333333333333,0.05555555555555555,0.027777777777777776],[0,0,0,0,0.08333333333333333,0.05555555555555555,0.1111111111111111,0.05555555555555555,0,0.1111111111111111,0.1111111111111111],[0,0.027777777777777776,0.027777777777777776,0.027777777777777776,0.16666666666666666,0,0.05555555555555555,0.027777777777777776,0.1388888888888889,0,0],[0,0,0.027777777777777776,0,0.1388888888888889,0.16666666666666666,0.1111111111111111,0.08333333333333333,0.1111111111111111,0,0]]

1
server/geo/mat3.json.bak Normal file
View File

@ -0,0 +1 @@
[[0,0,0,0,0,0,70,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,12,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0],[0,0,0,10,0,0,0,0,0,0,0],[0,0,0,0,0,83,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,64],[0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,36,0,0,0,16,0,0]]

View File

@ -0,0 +1 @@
[[0,0.1,0.3,0,0,0,0,0,0,0.1,0.4,0.5],[0,0,0.1,0.2,0.2,0,0,0.2,0,0.1,0.1,0],[0,0.1,0,0.4,0,0,0.1,0.3,0.1,0.1,0.1,0],[0,0.1,0,0,0.4,0.1,0.2,0,0,0.1,0,0.2],[0,0,0,0.2,0,0.5,0.1,0,0,0.1,0,0],[0,0,0,0,0.3,0,0.1,0,0.3,0.1,0.1,0.1],[0,0.3,0.1,0,0,0,0,0.1,0.4,0.1,0,0],[0,0.1,0.1,0,0.1,0,0.4,0,0,0,0.1,0.2],[0,0,0.3,0,0,0.3,0.1,0,0,0.3,0.1,0],[0,0.1,0.1,0,0,0,0.1,0.4,0,0,0.2,0.1],[0,0,0.2,0.2,0.1,0.1,0,0.1,0.3,0,0,0],[0,0.2,0.2,0.3,0,0,0,0.1,0,0.1,0.1,0]]

View File

@ -0,0 +1 @@
[[0,0,0.1,0.5,0.3,0,0.1,0.1,0,0.2,0,0],[0,0,0.2,0.1,0.1,0,0.3,0.2,0,0.2,0,0],[0,0.2,0,0.1,0.2,0,0,0,0,0,0,0.1],[0,0.1,0.1,0,0.4,0,0,0.2,0,0.3,0,0],[0,0.2,0,0,0,0.1,0,0,0.4,0.1,0.2,0.1],[0,0.1,0,0,0,0,0.1,0,0.4,0,0,0.2],[0,0.1,0,0,0.1,0.4,0,0.1,0.1,0,0.3,0.1],[0,0,0,0.3,0,0.1,0.2,0,0,0,0,0],[0,0.2,0.1,0.1,0,0.2,0.2,0,0,0,0,0.2],[0,0.3,0,0.1,0.1,0,0.1,0,0,0,0.1,0],[0,0.1,0.1,0,0,0,0.3,0.1,0,0.1,0,0.2],[0,0,0.1,0.1,0,0,0,0,0.1,0,0.5,0]]

View File

@ -0,0 +1 @@
[[0,0.16666666666666666,0.16666666666666666,0,0.16666666666666666,0,0.5,0,0,0,0],[0,0,0.16666666666666666,0.16666666666666666,0,0,0,0,0.16666666666666666,0.16666666666666666,0],[0,0.16666666666666666,0,0.16666666666666666,0.16666666666666666,0,0.16666666666666666,0,0,0,0],[0,0.16666666666666666,0.16666666666666666,0,0,0,0,0.16666666666666666,0.16666666666666666,0.16666666666666666,0],[0,0,0,0.3333333333333333,0,0.16666666666666666,0,0.16666666666666666,0.16666666666666666,0,0],[0,0,0,0.16666666666666666,0.5,0,0,0,0,0,0.3333333333333333],[0,0,0.16666666666666666,0.16666666666666666,0,0,0,0,0,0,0.5],[0,0,0,0,0,0.3333333333333333,0.16666666666666666,0,0.16666666666666666,0,0],[0,0,0,0,0,0.16666666666666666,0.16666666666666666,0,0,0.5,0.16666666666666666],[0,0.16666666666666666,0,0.16666666666666666,0.16666666666666666,0,0,0,0.3333333333333333,0,0],[0,0,0,0,0,0.3333333333333333,0.16666666666666666,0.3333333333333333,0.16666666666666666,0,0]]

141
server/lib/Matrix.js Normal file
View File

@ -0,0 +1,141 @@
"use strict";
let fs = require('fs');
class OutOfBoundError extends Error {
constructor(matrix, i, j) {
super(`Index array out of bound (${i},${j}) exceeds (${matrix.lines}, ${matrix.columns}).`);
this.name = 'OutOfBoundError';
}
}
class Matrix {
constructor(lines, columns) {
// this.lines = lines;
// this.columns = columns;
this.data = [];
for (let i = 0; i < lines; i++) {
let line = [];
for (let j = 0; j < columns; j++) {
line.push(0);
}
this.data.push(line);
}
}
get(i, j) {
// if (i >= this.lines || j >= this.columns || i < 0 || j < 0 ) {
// this._throwOutOfBoundError(i,j);
// }
return this.data[i][j];
}
set(i, j, value) {
// if (i >= this.lines || j >= this.columns || i < 0 || j < 0 ) {
// this._throwOutOfBoundError(i,j);
// }
return this.data[i][j] = value;
}
print(type) {
if (type === 'matlab') {
let maxColumns = 0;
for (let i = 0; i < this.data.length; i++) {
if (this.data[i].length > maxColumns)
maxColumns = this.data[i].length;
}
let str = '[';
for (let i = 0; i < this.data.length; i++) {
str += '[';
for (let j = 0; j < maxColumns; j++) {
str +=
(this.data[i][j] !== undefined ? this.data[i][j] : 0) +
(j === maxColumns - 1 ? ']' : ',');
}
str += (i === this.data.length - 1 ? ']' : ';');
}
console.log(str + ';');
return;
}
// for (let i = 0; i < this.lines; i++) {
// for (let j = 0; j < this.columns; j++) {
// process.stdout.write(this.get(i,j) + ' ');
// }
// process.stdout.write('\n');
// }
}
toArray() {
return this.data;
}
fromArray(array) {
// if (! array instanceof Array)
// throw new TypeError('Parameter is not an array');
// let columns = null;
// for (let line of array) {
// if (! line instanceof Array)
// throw new TypeError('Parameter is not an array of array');
// if (columns === null) {
// columns = line.length;
// } else if (columns !== line.length) {
// throw new Typerror('The lines have not the same size');
// }
// }
this.data = array;
// this.columns = columns;
// this.lines = array.length;
}
saveToFile(path, type) {
if (type === 'matlab') {
fs.writeFileSync(path, JSON.stringify(this.data).replace('],', '];'));
return;
}
fs.writeFileSync(path, JSON.stringify(this.data));
}
loadFromFile(path) {
this.fromArray(JSON.parse(fs.readFileSync(path, 'utf-8')));
}
_throwOutOfBoundError(i,j) {
throw new OutOfBoundError(this, i, j);
}
};
module.exports = Matrix;
function main() {
var m = new Matrix(2,3);
m.set(1,2,3);
m.print();
m.saveToFile('tests/myMatrix.json');
console.log('----');
var m2 = new Matrix();
m2.loadFromFile('tests/myMatrix.json');
m2.print();
}
if (require.main === module) {
main();
}

101
server/lib/Serial.js Normal file
View File

@ -0,0 +1,101 @@
"use strict";
let fs = require('fs');
let THREE = require('three');
let L3D = require('../static/js/l3d.min.js');
function serialize(object) {
let data = {};
data.vertices = object.children[0].geometry.vertices;
data.children = [];
for (let objChild of object.children) {
let newChild = {};
// newChild.faceVertexUvs = objChild.geometry.faceVertexUvs;
newChild.faces = objChild.geometry.faces;
data.children.push(newChild);
}
return JSON.stringify(data);
}
function deserialize(str) {
let parse = JSON.parse(str);
let vertices = [];
let material = new THREE.MeshBasicMaterial();
let ret = new THREE.Object3D();
for (let vertex of parse.vertices) {
vertices.push(new THREE.Vector3(vertex.x, vertex.y, vertex.z));
}
for (let parseChild of parse.children) {
let geometry = new THREE.Geometry();
geometry.vertices = vertices;
for (let face of parseChild.faces) {
geometry.faces.push(new THREE.Face3(face.a, face.b, face.c));
}
geometry.computeBoundingSphere();
let newChild = new THREE.Mesh(geometry, material);
ret.children.push(newChild);
}
return ret;
}
function serializeToFile(path, obj) {
fs.writeFileSync(path, serialize(obj));
}
function loadFromFile(path) {
return deserialize(fs.readFileSync(path, 'utf-8'));
}
module.exports.serialize = serialize;
module.exports.deserialize = deserialize;
module.exports.serializeToFile = serializeToFile;
module.exports.loadFromFile = loadFromFile;
function main() {
let loader = new L3D.ProgressiveLoader(
'/static/data/castle/princess peaches castle (outside).obj',
new THREE.Object3D(),
null
);
loader.load(function() {
console.log("Loaded");
// console.log(loader.obj.children[0].geometry);
deserialize(serialize(loader.obj));
});
}
if (require.main === module) {
main();
}

1
server/lib/mat1.json Normal file
View File

@ -0,0 +1 @@
[[0,0.07894736842105263,0.18421052631578946,0,0.02631578947368421,0.02631578947368421,0,0.02631578947368421,0,0.13157894736842105,0.2894736842105263,0.2631578947368421],[0,0,0.10526315789473684,0.15789473684210525,0.18421052631578946,0.02631578947368421,0,0.07894736842105263,0.02631578947368421,0.05263157894736842,0.05263157894736842,0.05263157894736842],[0,0.02631578947368421,0,0.5,0.02631578947368421,0.02631578947368421,0.02631578947368421,0.07894736842105263,0.02631578947368421,0.07894736842105263,0.07894736842105263,0.05263157894736842],[0,0.05263157894736842,0.07894736842105263,0,0.4473684210526316,0.02631578947368421,0.13157894736842105,0.02631578947368421,0,0.07894736842105263,0,0.13157894736842105],[0,0,0.02631578947368421,0.15789473684210525,0,0.3157894736842105,0.21052631578947367,0.05263157894736842,0,0.07894736842105263,0,0.10526315789473684],[0,0.10526315789473684,0,0.05263157894736842,0.13157894736842105,0,0.13157894736842105,0.05263157894736842,0.15789473684210525,0.02631578947368421,0.02631578947368421,0.02631578947368421],[0,0.15789473684210525,0.10526315789473684,0,0,0.10526315789473684,0,0.05263157894736842,0.21052631578947367,0.13157894736842105,0,0],[0,0.07894736842105263,0.05263157894736842,0.02631578947368421,0.07894736842105263,0.07894736842105263,0.10526315789473684,0,0.07894736842105263,0.02631578947368421,0.02631578947368421,0.05263157894736842],[0,0,0.10526315789473684,0.02631578947368421,0.02631578947368421,0.18421052631578946,0.15789473684210525,0,0,0.21052631578947367,0.07894736842105263,0.07894736842105263],[0,0.07894736842105263,0.10526315789473684,0.02631578947368421,0,0,0.07894736842105263,0.15789473684210525,0.13157894736842105,0,0.21052631578947367,0.07894736842105263],[0,0.02631578947368421,0.10526315789473684,0.07894736842105263,0.05263157894736842,0.02631578947368421,0,0.02631578947368421,0.23684210526315788,0.07894736842105263,0,0.10526315789473684],[0,0.18421052631578946,0.13157894736842105,0.13157894736842105,0.10526315789473684,0.02631578947368421,0,0.13157894736842105,0.02631578947368421,0.05263157894736842,0.07894736842105263,0],]

1
server/lib/mat2.json Normal file
View File

@ -0,0 +1 @@
[[0,0.03125,0.09375,0.5,0.21875,0.03125,0.09375,0.1875,0,0.125,0.15625,0],[0,0,0.15625,0.0625,0.21875,0.0625,0.15625,0.09375,0,0.0625,0.03125,0],[0,0.21875,0,0.0625,0.0625,0,0,0,0,0,0.03125,0.0625],[0,0.09375,0.0625,0,0.25,0.03125,0.1875,0.1875,0.03125,0.25,0,0.03125],[0,0.125,0.0625,0.125,0,0.03125,0,0,0.1875,0.09375,0.15625,0.0625],[0,0.03125,0,0,0,0,0.21875,0,0.25,0,0,0.1875],[0,0.03125,0.0625,0.0625,0.03125,0.34375,0,0.125,0.34375,0,0.40625,0.0625],[0,0.125,0,0.15625,0,0.0625,0.25,0,0.03125,0.09375,0,0],[0,0.125,0.03125,0.0625,0,0.1875,0.15625,0.03125,0,0.0625,0,0.25],[0,0.1875,0,0.125,0.125,0,0.0625,0.03125,0,0,0.03125,0.125],[0,0.0625,0.0625,0.03125,0.09375,0,0.46875,0.09375,0.03125,0.09375,0,0.1875],[0,0,0.0625,0.0625,0,0,0,0.03125,0.1875,0.125,0.46875,0],]

1
server/lib/mat3.json Normal file
View File

@ -0,0 +1 @@
[[0,0.05555555555555555,0.08333333333333333,0,0.16666666666666666,0.027777777777777776,0.5,0,0.05555555555555555,0.027777777777777776,0],[0,0,0.05555555555555555,0.08333333333333333,0.08333333333333333,0,0.08333333333333333,0,0.027777777777777776,0.027777777777777776,0],[0,0.05555555555555555,0,0.1111111111111111,0.027777777777777776,0,0.027777777777777776,0,0.027777777777777776,0.027777777777777776,0],[0,0.05555555555555555,0.027777777777777776,0,0.1111111111111111,0,0.027777777777777776,0.027777777777777776,0.08333333333333333,0.027777777777777776,0],[0,0.08333333333333333,0,0.1111111111111111,0,0.3888888888888889,0,0.16666666666666666,0.05555555555555555,0.027777777777777776,0.05555555555555555],[0,0,0,0.027777777777777776,0.25,0,0.1111111111111111,0.1388888888888889,0,0,0.2222222222222222],[0,0.05555555555555555,0.08333333333333333,0.1388888888888889,0,0.027777777777777776,0,0.027777777777777776,0.08333333333333333,0.16666666666666666,0.3055555555555556],[0,0.027777777777777776,0.027777777777777776,0,0.027777777777777776,0.1388888888888889,0.05555555555555555,0,0.08333333333333333,0.05555555555555555,0.027777777777777776],[0,0,0,0,0.08333333333333333,0.05555555555555555,0.1111111111111111,0.05555555555555555,0,0.1111111111111111,0.1111111111111111],[0,0.027777777777777776,0.027777777777777776,0.027777777777777776,0.16666666666666666,0,0.05555555555555555,0.027777777777777776,0.1388888888888889,0,0],[0,0,0.027777777777777776,0,0.1388888888888889,0.16666666666666666,0.1111111111111111,0.08333333333333333,0.1111111111111111,0,0],]

1
server/lib/matt1.json Normal file
View File

@ -0,0 +1 @@
[[0,0.1,0.3,0,0,0,0,0,0,0.1,0.4,0.5],[0,0,0.1,0.2,0.2,0,0,0.2,0,0.1,0.1,0],[0,0.1,0,0.4,0,0,0.1,0.3,0.1,0.1,0.1,0],[0,0.1,0,0,0.4,0.1,0.2,0,0,0.1,0,0.2],[0,0,0,0.2,0,0.5,0.1,0,0,0.1,0,0],[0,0,0,0,0.3,0,0.1,0,0.3,0.1,0.1,0.1],[0,0.3,0.1,0,0,0,0,0.1,0.4,0.1,0,0],[0,0.1,0.1,0,0.1,0,0.4,0,0,0,0.1,0.2],[0,0,0.3,0,0,0.3,0.1,0,0,0.3,0.1,0],[0,0.1,0.1,0,0,0,0.1,0.4,0,0,0.2,0.1],[0,0,0.2,0.2,0.1,0.1,0,0.1,0.3,0,0,0],[0,0.2,0.2,0.3,0,0,0,0.1,0,0.1,0.1,0],]

1
server/lib/matt2.json Normal file
View File

@ -0,0 +1 @@
[[0,0,0.1,0.5,0.3,0,0.1,0.1,0,0.2,0,0],[0,0,0.2,0.1,0.1,0,0.3,0.2,0,0.2,0,0],[0,0.2,0,0.1,0.2,0,0,0,0,0,0,0.1],[0,0.1,0.1,0,0.4,0,0,0.2,0,0.3,0,0],[0,0.2,0,0,0,0.1,0,0,0.4,0.1,0.2,0.1],[0,0.1,0,0,0,0,0.1,0,0.4,0,0,0.2],[0,0.1,0,0,0.1,0.4,0,0.1,0.1,0,0.3,0.1],[0,0,0,0.3,0,0.1,0.2,0,0,0,0,0],[0,0.2,0.1,0.1,0,0.2,0.2,0,0,0,0,0.2],[0,0.3,0,0.1,0.1,0,0.1,0,0,0,0.1,0],[0,0.1,0.1,0,0,0,0.3,0.1,0,0.1,0,0.2],[0,0,0.1,0.1,0,0,0,0,0.1,0,0.5,0],]

1
server/lib/matt3.json Normal file
View File

@ -0,0 +1 @@
[[0,0.16666666666666666,0.16666666666666666,0,0.16666666666666666,0,0.5,0,0,0,0],[0,0,0.16666666666666666,0.16666666666666666,0,0,0,0,0.16666666666666666,0.16666666666666666,0],[0,0.16666666666666666,0,0.16666666666666666,0.16666666666666666,0,0.16666666666666666,0,0,0,0],[0,0.16666666666666666,0.16666666666666666,0,0,0,0,0.16666666666666666,0.16666666666666666,0.16666666666666666,0],[0,0,0,0.3333333333333333,0,0.16666666666666666,0,0.16666666666666666,0.16666666666666666,0,0],[0,0,0,0.16666666666666666,0.5,0,0,0,0,0,0.3333333333333333],[0,0,0.16666666666666666,0.16666666666666666,0,0,0,0,0,0,0.5],[0,0,0,0,0,0.3333333333333333,0.16666666666666666,0,0.16666666666666666,0,0],[0,0,0,0,0,0.16666666666666666,0.16666666666666666,0,0,0.5,0.16666666666666666],[0,0.16666666666666666,0,0.16666666666666666,0.16666666666666666,0,0,0,0.3333333333333333,0,0],[0,0,0,0,0,0.3333333333333333,0.16666666666666666,0.3333333333333333,0.16666666666666666,0,0],]

View File

@ -0,0 +1 @@
[[0,0,0],[0,0,3]]

Some files were not shown because too many files have changed in this diff Show More