meta-client
Version:
Meta.js (Client)
1 lines • 503 kB
JSON
{"id":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","dependencies":[{"name":"C:\\Users\\florianmaxim\\work\\meta\\package.json","includedInParent":true,"mtime":1531759463299},{"name":"C:\\Users\\florianmaxim\\work\\meta\\.babelrc","includedInParent":true,"mtime":1531746256699},{"name":"three","loc":{"line":13,"column":15},"parent":"C:\\Users\\florianmaxim\\work\\meta\\src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","resolved":"C:\\Users\\florianmaxim\\work\\meta\\node_modules\\three\\build\\three.module.js"}],"generated":{"js":"'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _three = require('three');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar scope = void 0;\n\nfunction defaultOnError(err) {\n throw new Error(err);\n}\n\nvar OBJLoader = function () {\n function OBJLoader(manager) {\n _classCallCheck(this, OBJLoader);\n\n scope = this;\n\n this.manager = manager !== undefined ? manager : _three.DefaultLoadingManager;\n\n this.materials = null;\n\n this.regexp = {\n // v float float float\n vertex_pattern: /^v\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\n // vn float float float\n normal_pattern: /^vn\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\n // vt float float\n uv_pattern: /^vt\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\n // f vertex vertex vertex\n face_vertex: /^f\\s+(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)(?:\\s+(-?\\d+))?/,\n // f vertex/uv vertex/uv vertex/uv\n face_vertex_uv: /^f\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+))?/,\n // f vertex/uv/normal vertex/uv/normal vertex/uv/normal\n face_vertex_uv_normal: /^f\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+))?/,\n // f vertex//normal vertex//normal vertex//normal\n face_vertex_normal: /^f\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)(?:\\s+(-?\\d+)\\/\\/(-?\\d+))?/,\n // o object_name | g group_name\n object_pattern: /^[og]\\s*(.+)?/,\n // s boolean\n smoothing_pattern: /^s\\s+(\\d+|on|off)/,\n // mtllib file_reference\n material_library_pattern: /^mtllib /,\n // usemtl material_name\n material_use_pattern: /^usemtl /\n };\n }\n\n _createClass(OBJLoader, [{\n key: 'load',\n value: function load(url, onLoad, onProgress, onError) {\n\n this.onError = onError || defaultOnError;\n\n var loader = new _three.FileLoader(scope.manager);\n loader.setPath(this.path);\n loader.load(url, function (text) {\n\n onLoad(scope.parse(text));\n }, onProgress, onError);\n }\n }, {\n key: 'setPath',\n value: function setPath(value) {\n\n this.path = value;\n }\n }, {\n key: 'setMaterials',\n value: function setMaterials(materials) {\n\n this.materials = materials;\n }\n }, {\n key: '_createParserState',\n value: function _createParserState() {\n\n var state = {\n objects: [],\n object: {},\n\n vertices: [],\n normals: [],\n uvs: [],\n\n materialLibraries: [],\n\n startObject: function startObject(name, fromDeclaration) {\n\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && this.object.fromDeclaration === false) {\n\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration !== false;\n return;\n }\n\n var previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;\n\n if (this.object && typeof this.object._finalize === 'function') {\n\n this.object._finalize(true);\n }\n\n this.object = {\n name: name || '',\n fromDeclaration: fromDeclaration !== false,\n\n geometry: {\n vertices: [],\n normals: [],\n uvs: []\n },\n materials: [],\n smooth: true,\n\n startMaterial: function startMaterial(name, libraries) {\n\n var previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n\n this.materials.splice(previous.index, 1);\n }\n\n var material = {\n index: this.materials.length,\n name: name || '',\n mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n\n clone: function clone(index) {\n var cloned = {\n index: typeof index === 'number' ? index : this.index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false\n };\n cloned.clone = this.clone.bind(cloned);\n return cloned;\n }\n };\n\n this.materials.push(material);\n\n return material;\n },\n\n currentMaterial: function currentMaterial() {\n\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n },\n\n _finalize: function _finalize(end) {\n\n var lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n\n for (var mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n }\n };\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === \"function\") {\n\n var declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n\n this.objects.push(this.object);\n },\n\n finalize: function finalize() {\n\n if (this.object && typeof this.object._finalize === 'function') {\n\n this.object._finalize(true);\n }\n },\n\n parseVertexIndex: function parseVertexIndex(value, len) {\n\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n },\n\n parseNormalIndex: function parseNormalIndex(value, len) {\n\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n },\n\n parseUVIndex: function parseUVIndex(value, len) {\n\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n },\n\n addVertex: function addVertex(a, b, c) {\n\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[a + 2]);\n dst.push(src[b + 0]);\n dst.push(src[b + 1]);\n dst.push(src[b + 2]);\n dst.push(src[c + 0]);\n dst.push(src[c + 1]);\n dst.push(src[c + 2]);\n },\n\n addVertexLine: function addVertexLine(a) {\n\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[a + 2]);\n },\n\n addNormal: function addNormal(a, b, c) {\n\n var src = this.normals;\n var dst = this.object.geometry.normals;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[a + 2]);\n dst.push(src[b + 0]);\n dst.push(src[b + 1]);\n dst.push(src[b + 2]);\n dst.push(src[c + 0]);\n dst.push(src[c + 1]);\n dst.push(src[c + 2]);\n },\n\n addUV: function addUV(a, b, c) {\n\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[b + 0]);\n dst.push(src[b + 1]);\n dst.push(src[c + 0]);\n dst.push(src[c + 1]);\n },\n\n addUVLine: function addUVLine(a) {\n\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n },\n\n addFace: function addFace(a, b, c, d, ua, ub, uc, ud, na, nb, nc, nd) {\n\n var vLen = this.vertices.length;\n\n var ia = this.parseVertexIndex(a, vLen);\n var ib = this.parseVertexIndex(b, vLen);\n var ic = this.parseVertexIndex(c, vLen);\n var id;\n\n if (d === undefined) {\n\n this.addVertex(ia, ib, ic);\n } else {\n\n id = this.parseVertexIndex(d, vLen);\n\n this.addVertex(ia, ib, id);\n this.addVertex(ib, ic, id);\n }\n\n if (ua !== undefined) {\n\n var uvLen = this.uvs.length;\n\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n\n if (d === undefined) {\n\n this.addUV(ia, ib, ic);\n } else {\n\n id = this.parseUVIndex(ud, uvLen);\n\n this.addUV(ia, ib, id);\n this.addUV(ib, ic, id);\n }\n }\n\n if (na !== undefined) {\n\n // Normals are many times the same. If so, skip function call and parseInt.\n var nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n if (d === undefined) {\n\n this.addNormal(ia, ib, ic);\n } else {\n\n id = this.parseNormalIndex(nd, nLen);\n\n this.addNormal(ia, ib, id);\n this.addNormal(ib, ic, id);\n }\n }\n },\n\n addLineGeometry: function addLineGeometry(vertices, uvs) {\n\n this.object.geometry.type = 'Line';\n\n var vLen = this.vertices.length;\n var uvLen = this.uvs.length;\n\n for (var vi = 0, l = vertices.length; vi < l; vi++) {\n\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen));\n }\n\n for (var uvi = 0, l = uvs.length; uvi < l; uvi++) {\n\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen));\n }\n }\n\n };\n\n state.startObject('', false);\n\n return state;\n }\n }, {\n key: 'parse',\n value: function parse(text, debug) {\n\n if (typeof debug === 'undefined') {\n debug = true;\n }\n\n if (debug) {\n console.time('OBJLoader');\n }\n\n var state = this._createParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n');\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n\n var lines = text.split('\\n');\n var line = '',\n lineFirstChar = '',\n lineSecondChar = '';\n var lineLength = 0;\n var result = [];\n\n // Faster to just trim left side of the line. Use if available.\n var trimLeft = typeof ''.trimLeft === 'function';\n\n for (var i = 0, l = lines.length; i < l; i++) {\n\n line = lines[i];\n\n line = trimLeft ? line.trimLeft() : line.trim();\n\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n\n lineSecondChar = line.charAt(1);\n\n if (lineSecondChar === ' ' && (result = this.regexp.vertex_pattern.exec(line)) !== null) {\n\n // 0 1 2 3\n // [\"v 1.0 2.0 3.0\", \"1.0\", \"2.0\", \"3.0\"]\n\n state.vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]));\n } else if (lineSecondChar === 'n' && (result = this.regexp.normal_pattern.exec(line)) !== null) {\n\n // 0 1 2 3\n // [\"vn 1.0 2.0 3.0\", \"1.0\", \"2.0\", \"3.0\"]\n\n state.normals.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]));\n } else if (lineSecondChar === 't' && (result = this.regexp.uv_pattern.exec(line)) !== null) {\n\n // 0 1 2\n // [\"vt 0.1 0.2\", \"0.1\", \"0.2\"]\n\n state.uvs.push(parseFloat(result[1]), parseFloat(result[2]));\n } else {\n\n this.onError(\"Unexpected vertex/normal/uv line: '\" + line + \"'\");\n }\n } else if (lineFirstChar === \"f\") {\n\n if ((result = this.regexp.face_vertex_uv_normal.exec(line)) !== null) {\n\n // f vertex/uv/normal vertex/uv/normal vertex/uv/normal\n // 0 1 2 3 4 5 6 7 8 9 10 11 12\n // [\"f 1/1/1 2/2/2 3/3/3\", \"1\", \"1\", \"1\", \"2\", \"2\", \"2\", \"3\", \"3\", \"3\", undefined, undefined, undefined]\n\n state.addFace(result[1], result[4], result[7], result[10], result[2], result[5], result[8], result[11], result[3], result[6], result[9], result[12]);\n } else if ((result = this.regexp.face_vertex_uv.exec(line)) !== null) {\n\n // f vertex/uv vertex/uv vertex/uv\n // 0 1 2 3 4 5 6 7 8\n // [\"f 1/1 2/2 3/3\", \"1\", \"1\", \"2\", \"2\", \"3\", \"3\", undefined, undefined]\n\n state.addFace(result[1], result[3], result[5], result[7], result[2], result[4], result[6], result[8]);\n } else if ((result = this.regexp.face_vertex_normal.exec(line)) !== null) {\n\n // f vertex//normal vertex//normal vertex//normal\n // 0 1 2 3 4 5 6 7 8\n // [\"f 1//1 2//2 3//3\", \"1\", \"1\", \"2\", \"2\", \"3\", \"3\", undefined, undefined]\n\n state.addFace(result[1], result[3], result[5], result[7], undefined, undefined, undefined, undefined, result[2], result[4], result[6], result[8]);\n } else if ((result = this.regexp.face_vertex.exec(line)) !== null) {\n\n // f vertex vertex vertex\n // 0 1 2 3 4\n // [\"f 1 2 3\", \"1\", \"2\", \"3\", undefined]\n\n state.addFace(result[1], result[2], result[3], result[4]);\n } else {\n\n this.onError(\"Unexpected face line: '\" + line + \"'\");\n }\n } else if (lineFirstChar === \"l\") {\n\n var lineParts = line.substring(1).trim().split(\" \");\n var lineVertices = [],\n lineUVs = [];\n\n if (line.indexOf(\"/\") === -1) {\n\n lineVertices = lineParts;\n } else {\n\n for (var li = 0, llen = lineParts.length; li < llen; li++) {\n\n var parts = lineParts[li].split(\"/\");\n\n if (parts[0] !== \"\") lineVertices.push(parts[0]);\n if (parts[1] !== \"\") lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if ((result = this.regexp.object_pattern.exec(line)) !== null) {\n\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n var name = (\" \" + result[0].substr(1).trim()).substr(1);\n\n state.startObject(name);\n } else if (this.regexp.material_use_pattern.test(line)) {\n\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (this.regexp.material_library_pattern.test(line)) {\n\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n } else if ((result = this.regexp.smoothing_pattern.exec(line)) !== null) {\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n var value = result[1].trim().toLowerCase();\n state.object.smooth = value === '1' || value === 'on';\n\n var material = state.object.currentMaterial();\n if (material) {\n\n material.smooth = state.object.smooth;\n }\n } else {\n\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n this.onError(\"Unexpected line: '\" + line + \"'\");\n }\n }\n\n state.finalize();\n\n var container = new _three.Group();\n container.materialLibraries = [].concat(state.materialLibraries);\n\n for (var i = 0, l = state.objects.length; i < l; i++) {\n\n var object = state.objects[i];\n var geometry = object.geometry;\n var materials = object.materials;\n var isLine = geometry.type === 'Line';\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n var buffergeometry = new _three.BufferGeometry();\n\n buffergeometry.addAttribute('position', new _three.BufferAttribute(new Float32Array(geometry.vertices), 3));\n\n if (geometry.normals.length > 0) {\n\n buffergeometry.addAttribute('normal', new _three.BufferAttribute(new Float32Array(geometry.normals), 3));\n } else {\n\n buffergeometry.computeVertexNormals();\n }\n\n if (geometry.uvs.length > 0) {\n\n buffergeometry.addAttribute('uv', new _three.BufferAttribute(new Float32Array(geometry.uvs), 2));\n }\n\n // Create materials\n\n var createdMaterials = [];\n\n for (var mi = 0, miLen = materials.length; mi < miLen; mi++) {\n\n var sourceMaterial = materials[mi];\n var material = undefined;\n\n if (this.materials !== null) {\n\n material = this.materials.create(sourceMaterial.name);\n\n // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n if (isLine && material && !(material instanceof _three.LineBasicMaterial)) {\n\n var materialLine = new _three.LineBasicMaterial();\n materialLine.copy(material);\n material = materialLine;\n }\n }\n\n if (!material) {\n\n material = !isLine ? new _three.MeshPhongMaterial() : new _three.LineBasicMaterial();\n material.name = sourceMaterial.name;\n }\n\n material.shading = sourceMaterial.smooth ? _three.SmoothShading : _three.FlatShading;\n\n createdMaterials.push(material);\n }\n\n // Create mesh\n\n var mesh;\n\n if (createdMaterials.length > 1) {\n\n for (var mi = 0, miLen = materials.length; mi < miLen; mi++) {\n\n var sourceMaterial = materials[mi];\n buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi);\n }\n\n var multiMaterial = new _three.MultiMaterial(createdMaterials);\n mesh = !isLine ? new _three.Mesh(buffergeometry, multiMaterial) : new _three.LineSegments(buffergeometry, multiMaterial);\n } else {\n\n mesh = !isLine ? new _three.Mesh(buffergeometry, createdMaterials[0]) : new _three.LineSegments(buffergeometry, createdMaterials[0]);\n }\n\n mesh.name = object.name;\n\n container.add(mesh);\n }\n\n if (debug) {\n console.timeEnd('OBJLoader');\n }\n\n return container;\n }\n }]);\n\n return OBJLoader;\n}();\n\nexports.default = OBJLoader;\n;","map":{"mappings":[{"generated":{"line":9,"column":0},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":1,"column":0}},{"generated":{"line":13,"column":0},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":15,"column":0}},{"name":"scope","generated":{"line":13,"column":4},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":15,"column":4}},{"generated":{"line":13,"column":18},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":15,"column":0}},{"generated":{"line":15,"column":0},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":17,"column":0}},{"name":"defaultOnError","generated":{"line":15,"column":9},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":17,"column":9}},{"generated":{"line":15,"column":23},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":17,"column":0}},{"name":"err","generated":{"line":15,"column":24},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":17,"column":24}},{"generated":{"line":15,"column":27},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":17,"column":0}},{"generated":{"line":15,"column":29},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":17,"column":29}},{"generated":{"line":16,"column":0},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":18,"column":4}},{"generated":{"line":16,"column":18},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":18,"column":10}},{"name":"Error","generated":{"line":16,"column":22},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":18,"column":14}},{"generated":{"line":16,"column":27},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":18,"column":10}},{"name":"err","generated":{"line":16,"column":28},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":18,"column":20}},{"generated":{"line":16,"column":31},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":18,"column":10}},{"generated":{"line":16,"column":32},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":18,"column":4}},{"generated":{"line":17,"column":0},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loaders\\OBJLoader.js","original":{"line":19,"column":1}},{"name":"OBJLoader","generated":{"line":19,"column":4},"source":"src\\Space\\Device\\HeadMountedDisplay\\Loa