var DEFAULT_NORMALS_EPSILON = 1e-6; var DEFAULT_FACE_EPSILON = 1e-6; //Estimate the vertex normals of a mesh exports.vertexNormals = function(faces, positions, specifiedEpsilon) { var N = positions.length; var normals = new Array(N); var epsilon = specifiedEpsilon === void(0) ? DEFAULT_NORMALS_EPSILON : specifiedEpsilon; //Initialize normal array for(var i=0; i epsilon) { var norm = normals[c]; var w = 1.0 / Math.sqrt(m01 * m21); for(var k=0; k<3; ++k) { var u = (k+1)%3; var v = (k+2)%3; norm[k] += w * (d21[u] * d01[v] - d21[v] * d01[u]); } } } } //Scale all normals to unit length for(var i=0; i epsilon) { var w = 1.0 / Math.sqrt(m); for(var k=0; k<3; ++k) { norm[k] *= w; } } else { for(var k=0; k<3; ++k) { norm[k] = 0.0; } } } //Return the resulting set of patches return normals; } //Compute face normals of a mesh exports.faceNormals = function(faces, positions, specifiedEpsilon) { var N = faces.length; var normals = new Array(N); var epsilon = specifiedEpsilon === void(0) ? DEFAULT_FACE_EPSILON : specifiedEpsilon; for(var i=0; i epsilon) { l = 1.0 / Math.sqrt(l); } else { l = 0.0; } for(var j=0; j<3; ++j) { n[j] *= l; } normals[i] = n; } return normals; }