function surfaceGeometry (polylines) {
let geometry = new THREE.Geometry();
let n = polylines[0].length;
let m = polylines.length;
let uvs = [];
let tex = (i,j) => new THREE.Vector2 (i/(m-1),j/(n-1));
geometry.faceVertexUvs = [uvs];
for (let poly of polylines)
for (let v of poly) geometry.vertices.push(v);
for (let i = 0; i+1 < m; i++) {
for (let j = 0; j+1 < n; j++) {
geometry.faces.push (new THREE.Face3(i*n+j, i*n+j+1, (i+1)*n+j),
new THREE.Face3((i+1)*n+j, i*n+j+1, (i+1)*n+j+1));
uvs.push ([tex(i, j), tex(i, j+1), tex(i+1, j)],
[tex(i+1, j), tex(i, j+1), tex(i+1, j+1)]);
}
}
geometry.computeFaceNormals();
geometry.computeVertexNormals();
return geometry
}