@loaders.gl/obj 3.1.3 → 3.1.7
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.
- package/dist/dist.min.js +269 -164
- package/dist/es5/index.js +42 -4
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parse-mtl.js +110 -0
- package/dist/es5/lib/parse-mtl.js.map +1 -0
- package/dist/es5/lib/parse-obj-meshes.js +559 -0
- package/dist/es5/lib/parse-obj-meshes.js.map +1 -0
- package/dist/es5/lib/parse-obj.js +84 -526
- package/dist/es5/lib/parse-obj.js.map +1 -1
- package/dist/es5/mtl-loader.js +26 -0
- package/dist/es5/mtl-loader.js.map +1 -0
- package/dist/es5/obj-loader.js +1 -1
- package/dist/es5/obj-loader.js.map +1 -1
- package/dist/esm/index.js +10 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parse-mtl.js +86 -0
- package/dist/esm/lib/parse-mtl.js.map +1 -0
- package/dist/esm/lib/parse-obj-meshes.js +458 -0
- package/dist/esm/lib/parse-obj-meshes.js.map +1 -0
- package/dist/esm/lib/parse-obj.js +71 -437
- package/dist/esm/lib/parse-obj.js.map +1 -1
- package/dist/esm/mtl-loader.js +16 -0
- package/dist/esm/mtl-loader.js.map +1 -0
- package/dist/esm/obj-loader.js +1 -1
- package/dist/esm/obj-loader.js.map +1 -1
- package/dist/index.d.ts +41 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -7
- package/dist/lib/parse-mtl.d.ts +34 -0
- package/dist/lib/parse-mtl.d.ts.map +1 -0
- package/dist/lib/parse-mtl.js +201 -0
- package/dist/lib/parse-obj-meshes.d.ts +5 -0
- package/dist/lib/parse-obj-meshes.d.ts.map +1 -0
- package/dist/lib/parse-obj-meshes.js +440 -0
- package/dist/lib/parse-obj.d.ts +12 -4
- package/dist/lib/parse-obj.d.ts.map +1 -1
- package/dist/lib/parse-obj.js +67 -434
- package/dist/mtl-loader.d.ts +24 -0
- package/dist/mtl-loader.d.ts.map +1 -0
- package/dist/mtl-loader.js +24 -0
- package/dist/obj-loader.d.ts +5 -2
- package/dist/obj-loader.d.ts.map +1 -1
- package/dist/obj-worker.js +99 -9
- package/package.json +5 -5
- package/src/index.ts +21 -3
- package/src/lib/parse-mtl.ts +246 -0
- package/src/lib/parse-obj-meshes.ts +525 -0
- package/src/lib/parse-obj.ts +66 -508
- package/src/mtl-loader.ts +31 -0
- package/src/obj-loader.ts +6 -2
- package/dist/es5/lib/load-obj.js +0 -121
- package/dist/es5/lib/load-obj.js.map +0 -1
- package/dist/esm/lib/load-obj.js +0 -92
- package/dist/esm/lib/load-obj.js.map +0 -1
- package/dist/lib/load-obj.d.ts +0 -14
- package/dist/lib/load-obj.d.ts.map +0 -1
- package/dist/lib/load-obj.js +0 -73
- 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.
|
|
6
|
+
exports.parseOBJ = parseOBJ;
|
|
7
|
+
|
|
8
|
+
var _schema = require("@loaders.gl/schema");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _parseObjMeshes = require("./parse-obj-meshes");
|
|
11
11
|
|
|
12
|
-
var
|
|
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
|
-
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
85
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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 (
|
|
109
|
-
|
|
110
|
-
|
|
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 (
|
|
115
|
-
|
|
116
|
-
|
|
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 (
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
82
|
+
i += POSITION.value.length / 3;
|
|
130
83
|
}
|
|
131
|
-
}
|
|
132
|
-
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
value:
|
|
151
|
-
|
|
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 (
|
|
354
|
-
|
|
96
|
+
if (normals) {
|
|
97
|
+
attributes.NORMAL = {
|
|
98
|
+
value: normals,
|
|
99
|
+
size: 3
|
|
100
|
+
};
|
|
355
101
|
}
|
|
356
102
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
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
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
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
|
-
|
|
556
|
-
materials: materials
|
|
557
|
-
};
|
|
558
|
-
};
|
|
559
|
-
|
|
560
|
-
exports.default = _default;
|
|
117
|
+
return attributes;
|
|
118
|
+
}
|
|
561
119
|
//# sourceMappingURL=parse-obj.js.map
|