var fs = require('fs') var data = JSON.parse(fs.readFileSync('keyframes.json')) for (var key in data.user.property) { console.log(key) } // console.log(data.user.property.position) var position = data.user.property.position var vertices = [] data.user.property.face_vertices.forEach((v) => { vertices.push.apply(vertices, v) }) console.log('length', vertices.length) var min = Number.MAX_VALUE var max = Number.MIN_VALUE for (var i = 0; i < vertices.length; i++) { var v = vertices[i] if (v < min) min = v if (v > max) max = v } console.log('min', min, 'max', max) function mapToShort(v, imin, imax) { return Math.round((v - imin) / (imax - imin) * 0xffff) } console.log(mapToShort(min, min, max)) console.log(mapToShort(max, min, max)) function mapToFloat(v, imin, imax) { return (imax - imin) * (v / 0xffff) + imin } console.log(mapToFloat(mapToShort(min, min, max), min, max)) console.log(mapToFloat(mapToShort(max, min, max), min, max)) var sum = 0 var buffer = new Buffer(vertices.length * 2) for (var i = 0; i < vertices.length; i++) { var v = mapToShort(vertices[i], min, max) buffer.writeUInt16LE(mapToShort(vertices[i], min, max), i * 2) var d = vertices[i] - mapToFloat(v, min, max) sum += Math.abs(d) } sum /= vertices.length console.log('MAE', sum) // var buffer = new Buffer(vertices.length * 4) // for (var i = 0; i < vertices.length; i++) { // buffer.writeFloatLE(vertices[i], i * 4) // } // fs.writeFileSync('position.json', JSON.stringify(vertices)) fs.writeFileSync('position16.bin', buffer)