@loaders.gl/obj 3.1.2 → 3.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/dist.min.js +269 -164
  2. package/dist/es5/index.js +42 -4
  3. package/dist/es5/index.js.map +1 -1
  4. package/dist/es5/lib/parse-mtl.js +110 -0
  5. package/dist/es5/lib/parse-mtl.js.map +1 -0
  6. package/dist/es5/lib/parse-obj-meshes.js +559 -0
  7. package/dist/es5/lib/parse-obj-meshes.js.map +1 -0
  8. package/dist/es5/lib/parse-obj.js +84 -526
  9. package/dist/es5/lib/parse-obj.js.map +1 -1
  10. package/dist/es5/mtl-loader.js +26 -0
  11. package/dist/es5/mtl-loader.js.map +1 -0
  12. package/dist/es5/obj-loader.js +1 -1
  13. package/dist/es5/obj-loader.js.map +1 -1
  14. package/dist/esm/index.js +10 -3
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/lib/parse-mtl.js +86 -0
  17. package/dist/esm/lib/parse-mtl.js.map +1 -0
  18. package/dist/esm/lib/parse-obj-meshes.js +458 -0
  19. package/dist/esm/lib/parse-obj-meshes.js.map +1 -0
  20. package/dist/esm/lib/parse-obj.js +71 -437
  21. package/dist/esm/lib/parse-obj.js.map +1 -1
  22. package/dist/esm/mtl-loader.js +16 -0
  23. package/dist/esm/mtl-loader.js.map +1 -0
  24. package/dist/esm/obj-loader.js +1 -1
  25. package/dist/esm/obj-loader.js.map +1 -1
  26. package/dist/index.d.ts +41 -4
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +16 -7
  29. package/dist/lib/parse-mtl.d.ts +34 -0
  30. package/dist/lib/parse-mtl.d.ts.map +1 -0
  31. package/dist/lib/parse-mtl.js +201 -0
  32. package/dist/lib/parse-obj-meshes.d.ts +5 -0
  33. package/dist/lib/parse-obj-meshes.d.ts.map +1 -0
  34. package/dist/lib/parse-obj-meshes.js +440 -0
  35. package/dist/lib/parse-obj.d.ts +12 -4
  36. package/dist/lib/parse-obj.d.ts.map +1 -1
  37. package/dist/lib/parse-obj.js +67 -434
  38. package/dist/mtl-loader.d.ts +24 -0
  39. package/dist/mtl-loader.d.ts.map +1 -0
  40. package/dist/mtl-loader.js +24 -0
  41. package/dist/obj-loader.d.ts +5 -2
  42. package/dist/obj-loader.d.ts.map +1 -1
  43. package/dist/obj-worker.js +99 -9
  44. package/package.json +5 -5
  45. package/src/index.ts +21 -3
  46. package/src/lib/parse-mtl.ts +246 -0
  47. package/src/lib/parse-obj-meshes.ts +525 -0
  48. package/src/lib/parse-obj.ts +66 -508
  49. package/src/mtl-loader.ts +31 -0
  50. package/src/obj-loader.ts +6 -2
  51. package/dist/es5/lib/load-obj.js +0 -121
  52. package/dist/es5/lib/load-obj.js.map +0 -1
  53. package/dist/esm/lib/load-obj.js +0 -92
  54. package/dist/esm/lib/load-obj.js.map +0 -1
  55. package/dist/lib/load-obj.d.ts +0 -14
  56. package/dist/lib/load-obj.d.ts.map +0 -1
  57. package/dist/lib/load-obj.js +0 -73
  58. package/src/lib/load-obj.ts +0 -83
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
- exports.default = void 0;
6
+ exports.parseOBJ = parseOBJ;
7
+
8
+ var _schema = require("@loaders.gl/schema");
9
9
 
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _parseObjMeshes = require("./parse-obj-meshes");
11
11
 
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _getObjSchema = require("./get-obj-schema");
13
13
 
14
14
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
15
15
 
@@ -17,545 +17,103 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
17
17
 
18
18
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
19
19
 
20
- var OBJECT_RE = /^[og]\s*(.+)?/;
21
- var MATERIAL_RE = /^mtllib /;
22
- var MATERIAL_USE_RE = /^usemtl /;
23
-
24
- var MeshMaterial = function () {
25
- function MeshMaterial(_ref) {
26
- var index = _ref.index,
27
- _ref$name = _ref.name,
28
- name = _ref$name === void 0 ? '' : _ref$name,
29
- mtllib = _ref.mtllib,
30
- smooth = _ref.smooth,
31
- groupStart = _ref.groupStart;
32
- (0, _classCallCheck2.default)(this, MeshMaterial);
33
- this.index = index;
34
- this.name = name;
35
- this.mtllib = mtllib;
36
- this.smooth = smooth;
37
- this.groupStart = groupStart;
38
- this.groupEnd = -1;
39
- this.groupCount = -1;
40
- this.inherited = false;
41
- }
42
-
43
- (0, _createClass2.default)(MeshMaterial, [{
44
- key: "clone",
45
- value: function clone() {
46
- var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.index;
47
- return new MeshMaterial({
48
- index: index,
49
- name: this.name,
50
- mtllib: this.mtllib,
51
- smooth: this.smooth,
52
- groupStart: 0
53
- });
54
- }
55
- }]);
56
- return MeshMaterial;
57
- }();
58
-
59
- var MeshObject = function () {
60
- function MeshObject() {
61
- var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
62
- (0, _classCallCheck2.default)(this, MeshObject);
63
- this.name = name;
64
- this.geometry = {
65
- vertices: [],
66
- normals: [],
67
- colors: [],
68
- uvs: []
69
- };
70
- this.materials = [];
71
- this.smooth = true;
72
- this.fromDeclaration = null;
73
- }
74
-
75
- (0, _createClass2.default)(MeshObject, [{
76
- key: "startMaterial",
77
- value: function startMaterial(name, libraries) {
78
- var previous = this._finalize(false);
20
+ function parseOBJ(text, options) {
21
+ var _parseOBJMeshes = (0, _parseObjMeshes.parseOBJMeshes)(text),
22
+ meshes = _parseOBJMeshes.meshes;
23
+
24
+ var vertexCount = meshes.reduce(function (s, mesh) {
25
+ return s + mesh.header.vertexCount;
26
+ }, 0);
27
+ var attributes = mergeAttributes(meshes, vertexCount);
28
+ var header = {
29
+ vertexCount: vertexCount,
30
+ boundingBox: (0, _schema.getMeshBoundingBox)(attributes)
31
+ };
32
+ var schema = (0, _getObjSchema.getOBJSchema)(attributes, {
33
+ mode: 4,
34
+ boundingBox: header.boundingBox
35
+ });
36
+ return {
37
+ loaderData: {
38
+ header: {}
39
+ },
40
+ schema: schema,
41
+ header: header,
42
+ mode: 4,
43
+ attributes: attributes
44
+ };
45
+ }
79
46
 
80
- if (previous && (previous.inherited || previous.groupCount <= 0)) {
81
- this.materials.splice(previous.index, 1);
82
- }
47
+ function mergeAttributes(meshes, vertexCount) {
48
+ var positions = new Float32Array(vertexCount * 3);
49
+ var normals;
50
+ var colors;
51
+ var uvs;
52
+ var i = 0;
83
53
 
84
- var material = new MeshMaterial({
85
- index: this.materials.length,
86
- name: name,
87
- mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',
88
- smooth: previous !== undefined ? previous.smooth : this.smooth,
89
- groupStart: previous !== undefined ? previous.groupEnd : 0
90
- });
91
- this.materials.push(material);
92
- return material;
93
- }
94
- }, {
95
- key: "currentMaterial",
96
- value: function currentMaterial() {
97
- if (this.materials.length > 0) {
98
- return this.materials[this.materials.length - 1];
99
- }
54
+ var _iterator = _createForOfIteratorHelper(meshes),
55
+ _step;
100
56
 
101
- return undefined;
102
- }
103
- }, {
104
- key: "_finalize",
105
- value: function _finalize(end) {
106
- var lastMultiMaterial = this.currentMaterial();
57
+ try {
58
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
59
+ var mesh = _step.value;
60
+ var _mesh$attributes = mesh.attributes,
61
+ POSITION = _mesh$attributes.POSITION,
62
+ NORMAL = _mesh$attributes.NORMAL,
63
+ COLOR_0 = _mesh$attributes.COLOR_0,
64
+ TEXCOORD_0 = _mesh$attributes.TEXCOORD_0;
65
+ positions.set(POSITION.value, i * 3);
107
66
 
108
- if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {
109
- lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
110
- lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
111
- lastMultiMaterial.inherited = false;
67
+ if (NORMAL) {
68
+ normals = normals || new Float32Array(vertexCount * 3);
69
+ normals.set(NORMAL.value, i * 3);
112
70
  }
113
71
 
114
- if (end && this.materials.length > 1) {
115
- for (var mi = this.materials.length - 1; mi >= 0; mi--) {
116
- if (this.materials[mi].groupCount <= 0) {
117
- this.materials.splice(mi, 1);
118
- }
119
- }
72
+ if (COLOR_0) {
73
+ colors = colors || new Float32Array(vertexCount * 3);
74
+ colors.set(COLOR_0.value, i * 3);
120
75
  }
121
76
 
122
- if (end && this.materials.length === 0) {
123
- this.materials.push({
124
- name: '',
125
- smooth: this.smooth
126
- });
77
+ if (TEXCOORD_0) {
78
+ uvs = uvs || new Float32Array(vertexCount * 2);
79
+ uvs.set(TEXCOORD_0.value, i * 2);
127
80
  }
128
81
 
129
- return lastMultiMaterial;
82
+ i += POSITION.value.length / 3;
130
83
  }
131
- }]);
132
- return MeshObject;
133
- }();
134
-
135
- var ParserState = function () {
136
- function ParserState() {
137
- (0, _classCallCheck2.default)(this, ParserState);
138
- this.objects = [];
139
- this.object = null;
140
- this.vertices = [];
141
- this.normals = [];
142
- this.colors = [];
143
- this.uvs = [];
144
- this.materialLibraries = [];
145
- this.startObject('', false);
84
+ } catch (err) {
85
+ _iterator.e(err);
86
+ } finally {
87
+ _iterator.f();
146
88
  }
147
89
 
148
- (0, _createClass2.default)(ParserState, [{
149
- key: "startObject",
150
- value: function startObject(name) {
151
- var fromDeclaration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
152
-
153
- if (this.object && !this.object.fromDeclaration) {
154
- this.object.name = name;
155
- this.object.fromDeclaration = fromDeclaration;
156
- return;
157
- }
158
-
159
- var previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;
160
-
161
- if (this.object && typeof this.object._finalize === 'function') {
162
- this.object._finalize(true);
163
- }
164
-
165
- this.object = new MeshObject(name);
166
- this.object.fromDeclaration = fromDeclaration;
167
-
168
- if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {
169
- var declared = previousMaterial.clone(0);
170
- declared.inherited = true;
171
- this.object.materials.push(declared);
172
- }
173
-
174
- this.objects.push(this.object);
175
- }
176
- }, {
177
- key: "finalize",
178
- value: function finalize() {
179
- if (this.object && typeof this.object._finalize === 'function') {
180
- this.object._finalize(true);
181
- }
182
- }
183
- }, {
184
- key: "parseVertexIndex",
185
- value: function parseVertexIndex(value, len) {
186
- var index = parseInt(value);
187
- return (index >= 0 ? index - 1 : index + len / 3) * 3;
188
- }
189
- }, {
190
- key: "parseNormalIndex",
191
- value: function parseNormalIndex(value, len) {
192
- var index = parseInt(value);
193
- return (index >= 0 ? index - 1 : index + len / 3) * 3;
194
- }
195
- }, {
196
- key: "parseUVIndex",
197
- value: function parseUVIndex(value, len) {
198
- var index = parseInt(value);
199
- return (index >= 0 ? index - 1 : index + len / 2) * 2;
200
- }
201
- }, {
202
- key: "addVertex",
203
- value: function addVertex(a, b, c) {
204
- var src = this.vertices;
205
- var dst = this.object.geometry.vertices;
206
- dst.push(src[a + 0], src[a + 1], src[a + 2]);
207
- dst.push(src[b + 0], src[b + 1], src[b + 2]);
208
- dst.push(src[c + 0], src[c + 1], src[c + 2]);
209
- }
210
- }, {
211
- key: "addVertexPoint",
212
- value: function addVertexPoint(a) {
213
- var src = this.vertices;
214
- var dst = this.object.geometry.vertices;
215
- dst.push(src[a + 0], src[a + 1], src[a + 2]);
216
- }
217
- }, {
218
- key: "addVertexLine",
219
- value: function addVertexLine(a) {
220
- var src = this.vertices;
221
- var dst = this.object.geometry.vertices;
222
- dst.push(src[a + 0], src[a + 1], src[a + 2]);
223
- }
224
- }, {
225
- key: "addNormal",
226
- value: function addNormal(a, b, c) {
227
- var src = this.normals;
228
- var dst = this.object.geometry.normals;
229
- dst.push(src[a + 0], src[a + 1], src[a + 2]);
230
- dst.push(src[b + 0], src[b + 1], src[b + 2]);
231
- dst.push(src[c + 0], src[c + 1], src[c + 2]);
232
- }
233
- }, {
234
- key: "addColor",
235
- value: function addColor(a, b, c) {
236
- var src = this.colors;
237
- var dst = this.object.geometry.colors;
238
- dst.push(src[a + 0], src[a + 1], src[a + 2]);
239
- dst.push(src[b + 0], src[b + 1], src[b + 2]);
240
- dst.push(src[c + 0], src[c + 1], src[c + 2]);
241
- }
242
- }, {
243
- key: "addUV",
244
- value: function addUV(a, b, c) {
245
- var src = this.uvs;
246
- var dst = this.object.geometry.uvs;
247
- dst.push(src[a + 0], src[a + 1]);
248
- dst.push(src[b + 0], src[b + 1]);
249
- dst.push(src[c + 0], src[c + 1]);
250
- }
251
- }, {
252
- key: "addUVLine",
253
- value: function addUVLine(a) {
254
- var src = this.uvs;
255
- var dst = this.object.geometry.uvs;
256
- dst.push(src[a + 0], src[a + 1]);
257
- }
258
- }, {
259
- key: "addFace",
260
- value: function addFace(a, b, c, ua, ub, uc, na, nb, nc) {
261
- var vLen = this.vertices.length;
262
- var ia = this.parseVertexIndex(a, vLen);
263
- var ib = this.parseVertexIndex(b, vLen);
264
- var ic = this.parseVertexIndex(c, vLen);
265
- this.addVertex(ia, ib, ic);
266
-
267
- if (ua !== undefined && ua !== '') {
268
- var uvLen = this.uvs.length;
269
- ia = this.parseUVIndex(ua, uvLen);
270
- ib = this.parseUVIndex(ub, uvLen);
271
- ic = this.parseUVIndex(uc, uvLen);
272
- this.addUV(ia, ib, ic);
273
- }
274
-
275
- if (na !== undefined && na !== '') {
276
- var nLen = this.normals.length;
277
- ia = this.parseNormalIndex(na, nLen);
278
- ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);
279
- ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);
280
- this.addNormal(ia, ib, ic);
281
- }
282
-
283
- if (this.colors.length > 0) {
284
- this.addColor(ia, ib, ic);
285
- }
286
- }
287
- }, {
288
- key: "addPointGeometry",
289
- value: function addPointGeometry(vertices) {
290
- this.object.geometry.type = 'Points';
291
- var vLen = this.vertices.length;
292
-
293
- var _iterator = _createForOfIteratorHelper(vertices),
294
- _step;
295
-
296
- try {
297
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
298
- var vertex = _step.value;
299
- this.addVertexPoint(this.parseVertexIndex(vertex, vLen));
300
- }
301
- } catch (err) {
302
- _iterator.e(err);
303
- } finally {
304
- _iterator.f();
305
- }
306
- }
307
- }, {
308
- key: "addLineGeometry",
309
- value: function addLineGeometry(vertices, uvs) {
310
- this.object.geometry.type = 'Line';
311
- var vLen = this.vertices.length;
312
- var uvLen = this.uvs.length;
313
-
314
- var _iterator2 = _createForOfIteratorHelper(vertices),
315
- _step2;
316
-
317
- try {
318
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
319
- var vertex = _step2.value;
320
- this.addVertexLine(this.parseVertexIndex(vertex, vLen));
321
- }
322
- } catch (err) {
323
- _iterator2.e(err);
324
- } finally {
325
- _iterator2.f();
326
- }
327
-
328
- var _iterator3 = _createForOfIteratorHelper(uvs),
329
- _step3;
330
-
331
- try {
332
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
333
- var uv = _step3.value;
334
- this.addUVLine(this.parseUVIndex(uv, uvLen));
335
- }
336
- } catch (err) {
337
- _iterator3.e(err);
338
- } finally {
339
- _iterator3.f();
340
- }
341
- }
342
- }]);
343
- return ParserState;
344
- }();
345
-
346
- var _default = function _default(text) {
347
- var state = new ParserState();
348
-
349
- if (text.indexOf('\r\n') !== -1) {
350
- text = text.replace(/\r\n/g, '\n');
351
- }
90
+ var attributes = {};
91
+ attributes.POSITION = {
92
+ value: positions,
93
+ size: 3
94
+ };
352
95
 
353
- if (text.indexOf('\\\n') !== -1) {
354
- text = text.replace(/\\\n/g, '');
96
+ if (normals) {
97
+ attributes.NORMAL = {
98
+ value: normals,
99
+ size: 3
100
+ };
355
101
  }
356
102
 
357
- var lines = text.split('\n');
358
- var line = '';
359
- var lineFirstChar = '';
360
- var lineLength = 0;
361
- var result = [];
362
- var trimLeft = typeof ''.trimLeft === 'function';
363
-
364
- for (var i = 0, l = lines.length; i < l; i++) {
365
- line = lines[i];
366
- line = trimLeft ? line.trimLeft() : line.trim();
367
- lineLength = line.length;
368
- if (lineLength === 0) continue;
369
- lineFirstChar = line.charAt(0);
370
- if (lineFirstChar === '#') continue;
371
-
372
- if (lineFirstChar === 'v') {
373
- var data = line.split(/\s+/);
374
-
375
- switch (data[0]) {
376
- case 'v':
377
- state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));
378
-
379
- if (data.length === 8) {
380
- state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));
381
- }
382
-
383
- break;
384
-
385
- case 'vn':
386
- state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));
387
- break;
388
-
389
- case 'vt':
390
- state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));
391
- break;
392
-
393
- default:
394
- }
395
- } else if (lineFirstChar === 'f') {
396
- var lineData = line.substr(1).trim();
397
- var vertexData = lineData.split(/\s+/);
398
- var faceVertices = [];
399
-
400
- for (var j = 0, jl = vertexData.length; j < jl; j++) {
401
- var vertex = vertexData[j];
402
-
403
- if (vertex.length > 0) {
404
- var vertexParts = vertex.split('/');
405
- faceVertices.push(vertexParts);
406
- }
407
- }
408
-
409
- var v1 = faceVertices[0];
410
-
411
- for (var _j = 1, _jl = faceVertices.length - 1; _j < _jl; _j++) {
412
- var v2 = faceVertices[_j];
413
- var v3 = faceVertices[_j + 1];
414
- state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);
415
- }
416
- } else if (lineFirstChar === 'l') {
417
- var lineParts = line.substring(1).trim().split(' ');
418
- var lineVertices = void 0;
419
- var lineUVs = [];
420
-
421
- if (line.indexOf('/') === -1) {
422
- lineVertices = lineParts;
423
- } else {
424
- lineVertices = [];
425
-
426
- for (var li = 0, llen = lineParts.length; li < llen; li++) {
427
- var parts = lineParts[li].split('/');
428
- if (parts[0] !== '') lineVertices.push(parts[0]);
429
- if (parts[1] !== '') lineUVs.push(parts[1]);
430
- }
431
- }
432
-
433
- state.addLineGeometry(lineVertices, lineUVs);
434
- } else if (lineFirstChar === 'p') {
435
- var _lineData = line.substr(1).trim();
436
-
437
- var pointData = _lineData.split(' ');
438
-
439
- state.addPointGeometry(pointData);
440
- } else if ((result = OBJECT_RE.exec(line)) !== null) {
441
- var name = (' ' + result[0].substr(1).trim()).substr(1);
442
- state.startObject(name);
443
- } else if (MATERIAL_USE_RE.test(line)) {
444
- state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
445
- } else if (MATERIAL_RE.test(line)) {
446
- state.materialLibraries.push(line.substring(7).trim());
447
- } else if (lineFirstChar === 's') {
448
- result = line.split(' ');
449
-
450
- if (result.length > 1) {
451
- var value = result[1].trim().toLowerCase();
452
- state.object.smooth = value !== '0' && value !== 'off';
453
- } else {
454
- state.object.smooth = true;
455
- }
456
-
457
- var material = state.object.currentMaterial();
458
- if (material) material.smooth = state.object.smooth;
459
- } else {
460
- if (line === '\0') continue;
461
- throw new Error("Unexpected line: \"".concat(line, "\""));
462
- }
103
+ if (colors) {
104
+ attributes.COLOR_0 = {
105
+ value: colors,
106
+ size: 3
107
+ };
463
108
  }
464
109
 
465
- state.finalize();
466
- var meshes = [];
467
- var materials = [];
468
-
469
- var _iterator4 = _createForOfIteratorHelper(state.objects),
470
- _step4;
471
-
472
- try {
473
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
474
- var object = _step4.value;
475
- var geometry = object.geometry;
476
- if (geometry.vertices.length === 0) continue;
477
- var mesh = {
478
- header: {
479
- vertexCount: geometry.vertices.length / 3
480
- },
481
- attributes: {}
482
- };
483
-
484
- switch (geometry.type) {
485
- case 'Points':
486
- mesh.mode = 0;
487
- break;
488
-
489
- case 'Line':
490
- mesh.mode = 1;
491
- break;
492
-
493
- default:
494
- mesh.mode = 4;
495
- break;
496
- }
497
-
498
- mesh.attributes.POSITION = {
499
- value: new Float32Array(geometry.vertices),
500
- size: 3
501
- };
502
-
503
- if (geometry.normals.length > 0) {
504
- mesh.attributes.NORMAL = {
505
- value: new Float32Array(geometry.normals),
506
- size: 3
507
- };
508
- }
509
-
510
- if (geometry.colors.length > 0) {
511
- mesh.attributes.COLOR_0 = {
512
- value: new Float32Array(geometry.colors),
513
- size: 3
514
- };
515
- }
516
-
517
- if (geometry.uvs.length > 0) {
518
- mesh.attributes.TEXCOORD_0 = {
519
- value: new Float32Array(geometry.uvs),
520
- size: 2
521
- };
522
- }
523
-
524
- mesh.materials = [];
525
-
526
- var _iterator5 = _createForOfIteratorHelper(object.materials),
527
- _step5;
528
-
529
- try {
530
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
531
- var sourceMaterial = _step5.value;
532
- var _material = {
533
- name: sourceMaterial.name,
534
- flatShading: !sourceMaterial.smooth
535
- };
536
- mesh.materials.push(_material);
537
- materials.push(_material);
538
- }
539
- } catch (err) {
540
- _iterator5.e(err);
541
- } finally {
542
- _iterator5.f();
543
- }
544
-
545
- mesh.name = object.name;
546
- meshes.push(mesh);
547
- }
548
- } catch (err) {
549
- _iterator4.e(err);
550
- } finally {
551
- _iterator4.f();
110
+ if (uvs) {
111
+ attributes.TEXCOORD_0 = {
112
+ value: uvs,
113
+ size: 2
114
+ };
552
115
  }
553
116
 
554
- return {
555
- meshes: meshes,
556
- materials: materials
557
- };
558
- };
559
-
560
- exports.default = _default;
117
+ return attributes;
118
+ }
561
119
  //# sourceMappingURL=parse-obj.js.map