@loaders.gl/obj 3.1.0-alpha.4 → 3.1.0-alpha.5
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/bundle.d.ts +1 -0
- package/dist/dist.min.js +1 -1
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +5 -37
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-obj-schema.js +11 -12
- package/dist/es5/lib/get-obj-schema.js.map +1 -1
- package/dist/es5/lib/load-obj.js +42 -59
- package/dist/es5/lib/load-obj.js.map +1 -1
- package/dist/es5/lib/parse-obj.js +293 -388
- package/dist/es5/lib/parse-obj.js.map +1 -1
- package/dist/es5/obj-loader.js +3 -3
- package/dist/es5/obj-loader.js.map +1 -1
- package/dist/esm/lib/parse-obj.js +1 -1
- package/dist/esm/lib/parse-obj.js.map +1 -1
- package/dist/esm/obj-loader.js +1 -1
- package/dist/index.d.ts +34 -0
- package/dist/lib/get-obj-schema.d.ts +2 -0
- package/dist/lib/load-obj.d.ts +13 -0
- package/dist/lib/obj-types.d.ts +0 -0
- package/dist/lib/parse-obj.d.ts +5 -0
- package/dist/obj-loader.d.ts +20 -0
- package/dist/obj-worker.js +1 -1
- package/dist/obj-worker.js.map +1 -1
- package/dist/workers/obj-worker.d.ts +1 -0
- package/package.json +6 -5
|
@@ -1,35 +1,21 @@
|
|
|
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
6
|
exports.default = void 0;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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);
|
|
7
|
+
const OBJECT_RE = /^[og]\s*(.+)?/;
|
|
8
|
+
const MATERIAL_RE = /^mtllib /;
|
|
9
|
+
const MATERIAL_USE_RE = /^usemtl /;
|
|
10
|
+
|
|
11
|
+
class MeshMaterial {
|
|
12
|
+
constructor({
|
|
13
|
+
index,
|
|
14
|
+
name = '',
|
|
15
|
+
mtllib,
|
|
16
|
+
smooth,
|
|
17
|
+
groupStart
|
|
18
|
+
}) {
|
|
33
19
|
this.index = index;
|
|
34
20
|
this.name = name;
|
|
35
21
|
this.mtllib = mtllib;
|
|
@@ -40,26 +26,20 @@ var MeshMaterial = function () {
|
|
|
40
26
|
this.inherited = false;
|
|
41
27
|
}
|
|
42
28
|
|
|
43
|
-
(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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);
|
|
29
|
+
clone(index = this.index) {
|
|
30
|
+
return new MeshMaterial({
|
|
31
|
+
index,
|
|
32
|
+
name: this.name,
|
|
33
|
+
mtllib: this.mtllib,
|
|
34
|
+
smooth: this.smooth,
|
|
35
|
+
groupStart: 0
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
class MeshObject {
|
|
42
|
+
constructor(name = '') {
|
|
63
43
|
this.name = name;
|
|
64
44
|
this.geometry = {
|
|
65
45
|
vertices: [],
|
|
@@ -72,69 +52,63 @@ var MeshObject = function () {
|
|
|
72
52
|
this.fromDeclaration = null;
|
|
73
53
|
}
|
|
74
54
|
|
|
75
|
-
(
|
|
76
|
-
|
|
77
|
-
value: function startMaterial(name, libraries) {
|
|
78
|
-
var previous = this._finalize(false);
|
|
55
|
+
startMaterial(name, libraries) {
|
|
56
|
+
const previous = this._finalize(false);
|
|
79
57
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
58
|
+
if (previous && (previous.inherited || previous.groupCount <= 0)) {
|
|
59
|
+
this.materials.splice(previous.index, 1);
|
|
60
|
+
}
|
|
83
61
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
62
|
+
const material = new MeshMaterial({
|
|
63
|
+
index: this.materials.length,
|
|
64
|
+
name,
|
|
65
|
+
mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',
|
|
66
|
+
smooth: previous !== undefined ? previous.smooth : this.smooth,
|
|
67
|
+
groupStart: previous !== undefined ? previous.groupEnd : 0
|
|
68
|
+
});
|
|
69
|
+
this.materials.push(material);
|
|
70
|
+
return material;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
currentMaterial() {
|
|
74
|
+
if (this.materials.length > 0) {
|
|
75
|
+
return this.materials[this.materials.length - 1];
|
|
93
76
|
}
|
|
94
|
-
}, {
|
|
95
|
-
key: "currentMaterial",
|
|
96
|
-
value: function currentMaterial() {
|
|
97
|
-
if (this.materials.length > 0) {
|
|
98
|
-
return this.materials[this.materials.length - 1];
|
|
99
|
-
}
|
|
100
77
|
|
|
101
|
-
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
_finalize(end) {
|
|
82
|
+
const lastMultiMaterial = this.currentMaterial();
|
|
83
|
+
|
|
84
|
+
if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {
|
|
85
|
+
lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
|
|
86
|
+
lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
|
|
87
|
+
lastMultiMaterial.inherited = false;
|
|
102
88
|
}
|
|
103
|
-
}, {
|
|
104
|
-
key: "_finalize",
|
|
105
|
-
value: function _finalize(end) {
|
|
106
|
-
var lastMultiMaterial = this.currentMaterial();
|
|
107
|
-
|
|
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;
|
|
112
|
-
}
|
|
113
89
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
90
|
+
if (end && this.materials.length > 1) {
|
|
91
|
+
for (let mi = this.materials.length - 1; mi >= 0; mi--) {
|
|
92
|
+
if (this.materials[mi].groupCount <= 0) {
|
|
93
|
+
this.materials.splice(mi, 1);
|
|
119
94
|
}
|
|
120
95
|
}
|
|
96
|
+
}
|
|
121
97
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return lastMultiMaterial;
|
|
98
|
+
if (end && this.materials.length === 0) {
|
|
99
|
+
this.materials.push({
|
|
100
|
+
name: '',
|
|
101
|
+
smooth: this.smooth
|
|
102
|
+
});
|
|
130
103
|
}
|
|
131
|
-
}]);
|
|
132
|
-
return MeshObject;
|
|
133
|
-
}();
|
|
134
104
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
105
|
+
return lastMultiMaterial;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
class ParserState {
|
|
111
|
+
constructor() {
|
|
138
112
|
this.objects = [];
|
|
139
113
|
this.object = null;
|
|
140
114
|
this.vertices = [];
|
|
@@ -145,206 +119,157 @@ var ParserState = function () {
|
|
|
145
119
|
this.startObject('', false);
|
|
146
120
|
}
|
|
147
121
|
|
|
148
|
-
(
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
122
|
+
startObject(name, fromDeclaration = true) {
|
|
123
|
+
if (this.object && !this.object.fromDeclaration) {
|
|
124
|
+
this.object.name = name;
|
|
125
|
+
this.object.fromDeclaration = fromDeclaration;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
152
128
|
|
|
153
|
-
|
|
154
|
-
this.object.name = name;
|
|
155
|
-
this.object.fromDeclaration = fromDeclaration;
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
129
|
+
const previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;
|
|
158
130
|
|
|
159
|
-
|
|
131
|
+
if (this.object && typeof this.object._finalize === 'function') {
|
|
132
|
+
this.object._finalize(true);
|
|
133
|
+
}
|
|
160
134
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
135
|
+
this.object = new MeshObject(name);
|
|
136
|
+
this.object.fromDeclaration = fromDeclaration;
|
|
164
137
|
|
|
165
|
-
|
|
166
|
-
|
|
138
|
+
if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {
|
|
139
|
+
const declared = previousMaterial.clone(0);
|
|
140
|
+
declared.inherited = true;
|
|
141
|
+
this.object.materials.push(declared);
|
|
142
|
+
}
|
|
167
143
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
declared.inherited = true;
|
|
171
|
-
this.object.materials.push(declared);
|
|
172
|
-
}
|
|
144
|
+
this.objects.push(this.object);
|
|
145
|
+
}
|
|
173
146
|
|
|
174
|
-
|
|
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;
|
|
147
|
+
finalize() {
|
|
148
|
+
if (this.object && typeof this.object._finalize === 'function') {
|
|
149
|
+
this.object._finalize(true);
|
|
200
150
|
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
parseVertexIndex(value, len) {
|
|
154
|
+
const index = parseInt(value);
|
|
155
|
+
return (index >= 0 ? index - 1 : index + len / 3) * 3;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
parseNormalIndex(value, len) {
|
|
159
|
+
const index = parseInt(value);
|
|
160
|
+
return (index >= 0 ? index - 1 : index + len / 3) * 3;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
parseUVIndex(value, len) {
|
|
164
|
+
const index = parseInt(value);
|
|
165
|
+
return (index >= 0 ? index - 1 : index + len / 2) * 2;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
addVertex(a, b, c) {
|
|
169
|
+
const src = this.vertices;
|
|
170
|
+
const dst = this.object.geometry.vertices;
|
|
171
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
172
|
+
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
173
|
+
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
addVertexPoint(a) {
|
|
177
|
+
const src = this.vertices;
|
|
178
|
+
const dst = this.object.geometry.vertices;
|
|
179
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
addVertexLine(a) {
|
|
183
|
+
const src = this.vertices;
|
|
184
|
+
const dst = this.object.geometry.vertices;
|
|
185
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
addNormal(a, b, c) {
|
|
189
|
+
const src = this.normals;
|
|
190
|
+
const dst = this.object.geometry.normals;
|
|
191
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
192
|
+
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
193
|
+
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
addColor(a, b, c) {
|
|
197
|
+
const src = this.colors;
|
|
198
|
+
const dst = this.object.geometry.colors;
|
|
199
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
200
|
+
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
201
|
+
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
addUV(a, b, c) {
|
|
205
|
+
const src = this.uvs;
|
|
206
|
+
const dst = this.object.geometry.uvs;
|
|
207
|
+
dst.push(src[a + 0], src[a + 1]);
|
|
208
|
+
dst.push(src[b + 0], src[b + 1]);
|
|
209
|
+
dst.push(src[c + 0], src[c + 1]);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
addUVLine(a) {
|
|
213
|
+
const src = this.uvs;
|
|
214
|
+
const dst = this.object.geometry.uvs;
|
|
215
|
+
dst.push(src[a + 0], src[a + 1]);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
addFace(a, b, c, ua, ub, uc, na, nb, nc) {
|
|
219
|
+
const vLen = this.vertices.length;
|
|
220
|
+
let ia = this.parseVertexIndex(a, vLen);
|
|
221
|
+
let ib = this.parseVertexIndex(b, vLen);
|
|
222
|
+
let ic = this.parseVertexIndex(c, vLen);
|
|
223
|
+
this.addVertex(ia, ib, ic);
|
|
224
|
+
|
|
225
|
+
if (ua !== undefined && ua !== '') {
|
|
226
|
+
const uvLen = this.uvs.length;
|
|
227
|
+
ia = this.parseUVIndex(ua, uvLen);
|
|
228
|
+
ib = this.parseUVIndex(ub, uvLen);
|
|
229
|
+
ic = this.parseUVIndex(uc, uvLen);
|
|
230
|
+
this.addUV(ia, ib, ic);
|
|
241
231
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
dst.push(src[c + 0], src[c + 1]);
|
|
232
|
+
|
|
233
|
+
if (na !== undefined && na !== '') {
|
|
234
|
+
const nLen = this.normals.length;
|
|
235
|
+
ia = this.parseNormalIndex(na, nLen);
|
|
236
|
+
ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);
|
|
237
|
+
ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);
|
|
238
|
+
this.addNormal(ia, ib, ic);
|
|
250
239
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
var src = this.uvs;
|
|
255
|
-
var dst = this.object.geometry.uvs;
|
|
256
|
-
dst.push(src[a + 0], src[a + 1]);
|
|
240
|
+
|
|
241
|
+
if (this.colors.length > 0) {
|
|
242
|
+
this.addColor(ia, ib, ic);
|
|
257
243
|
}
|
|
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
|
-
}
|
|
244
|
+
}
|
|
274
245
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
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
|
-
}
|
|
246
|
+
addPointGeometry(vertices) {
|
|
247
|
+
this.object.geometry.type = 'Points';
|
|
248
|
+
const vLen = this.vertices.length;
|
|
282
249
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
}
|
|
250
|
+
for (const vertex of vertices) {
|
|
251
|
+
this.addVertexPoint(this.parseVertexIndex(vertex, vLen));
|
|
286
252
|
}
|
|
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
|
-
}
|
|
253
|
+
}
|
|
327
254
|
|
|
328
|
-
|
|
329
|
-
|
|
255
|
+
addLineGeometry(vertices, uvs) {
|
|
256
|
+
this.object.geometry.type = 'Line';
|
|
257
|
+
const vLen = this.vertices.length;
|
|
258
|
+
const uvLen = this.uvs.length;
|
|
330
259
|
|
|
331
|
-
|
|
332
|
-
|
|
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
|
-
}
|
|
260
|
+
for (const vertex of vertices) {
|
|
261
|
+
this.addVertexLine(this.parseVertexIndex(vertex, vLen));
|
|
341
262
|
}
|
|
342
|
-
}]);
|
|
343
|
-
return ParserState;
|
|
344
|
-
}();
|
|
345
263
|
|
|
346
|
-
|
|
347
|
-
|
|
264
|
+
for (const uv of uvs) {
|
|
265
|
+
this.addUVLine(this.parseUVIndex(uv, uvLen));
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
var _default = text => {
|
|
272
|
+
const state = new ParserState();
|
|
348
273
|
|
|
349
274
|
if (text.indexOf('\r\n') !== -1) {
|
|
350
275
|
text = text.replace(/\r\n/g, '\n');
|
|
@@ -354,14 +279,14 @@ var _default = function _default(text) {
|
|
|
354
279
|
text = text.replace(/\\\n/g, '');
|
|
355
280
|
}
|
|
356
281
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
282
|
+
const lines = text.split('\n');
|
|
283
|
+
let line = '';
|
|
284
|
+
let lineFirstChar = '';
|
|
285
|
+
let lineLength = 0;
|
|
286
|
+
let result = [];
|
|
287
|
+
const trimLeft = typeof ''.trimLeft === 'function';
|
|
363
288
|
|
|
364
|
-
for (
|
|
289
|
+
for (let i = 0, l = lines.length; i < l; i++) {
|
|
365
290
|
line = lines[i];
|
|
366
291
|
line = trimLeft ? line.trimLeft() : line.trim();
|
|
367
292
|
lineLength = line.length;
|
|
@@ -370,7 +295,7 @@ var _default = function _default(text) {
|
|
|
370
295
|
if (lineFirstChar === '#') continue;
|
|
371
296
|
|
|
372
297
|
if (lineFirstChar === 'v') {
|
|
373
|
-
|
|
298
|
+
const data = line.split(/\s+/);
|
|
374
299
|
|
|
375
300
|
switch (data[0]) {
|
|
376
301
|
case 'v':
|
|
@@ -393,38 +318,38 @@ var _default = function _default(text) {
|
|
|
393
318
|
default:
|
|
394
319
|
}
|
|
395
320
|
} else if (lineFirstChar === 'f') {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
321
|
+
const lineData = line.substr(1).trim();
|
|
322
|
+
const vertexData = lineData.split(/\s+/);
|
|
323
|
+
const faceVertices = [];
|
|
399
324
|
|
|
400
|
-
for (
|
|
401
|
-
|
|
325
|
+
for (let j = 0, jl = vertexData.length; j < jl; j++) {
|
|
326
|
+
const vertex = vertexData[j];
|
|
402
327
|
|
|
403
328
|
if (vertex.length > 0) {
|
|
404
|
-
|
|
329
|
+
const vertexParts = vertex.split('/');
|
|
405
330
|
faceVertices.push(vertexParts);
|
|
406
331
|
}
|
|
407
332
|
}
|
|
408
333
|
|
|
409
|
-
|
|
334
|
+
const v1 = faceVertices[0];
|
|
410
335
|
|
|
411
|
-
for (
|
|
412
|
-
|
|
413
|
-
|
|
336
|
+
for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {
|
|
337
|
+
const v2 = faceVertices[j];
|
|
338
|
+
const v3 = faceVertices[j + 1];
|
|
414
339
|
state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);
|
|
415
340
|
}
|
|
416
341
|
} else if (lineFirstChar === 'l') {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
342
|
+
const lineParts = line.substring(1).trim().split(' ');
|
|
343
|
+
let lineVertices;
|
|
344
|
+
const lineUVs = [];
|
|
420
345
|
|
|
421
346
|
if (line.indexOf('/') === -1) {
|
|
422
347
|
lineVertices = lineParts;
|
|
423
348
|
} else {
|
|
424
349
|
lineVertices = [];
|
|
425
350
|
|
|
426
|
-
for (
|
|
427
|
-
|
|
351
|
+
for (let li = 0, llen = lineParts.length; li < llen; li++) {
|
|
352
|
+
const parts = lineParts[li].split('/');
|
|
428
353
|
if (parts[0] !== '') lineVertices.push(parts[0]);
|
|
429
354
|
if (parts[1] !== '') lineUVs.push(parts[1]);
|
|
430
355
|
}
|
|
@@ -432,13 +357,11 @@ var _default = function _default(text) {
|
|
|
432
357
|
|
|
433
358
|
state.addLineGeometry(lineVertices, lineUVs);
|
|
434
359
|
} else if (lineFirstChar === 'p') {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
var pointData = _lineData.split(' ');
|
|
438
|
-
|
|
360
|
+
const lineData = line.substr(1).trim();
|
|
361
|
+
const pointData = lineData.split(' ');
|
|
439
362
|
state.addPointGeometry(pointData);
|
|
440
363
|
} else if ((result = OBJECT_RE.exec(line)) !== null) {
|
|
441
|
-
|
|
364
|
+
const name = (' ' + result[0].substr(1).trim()).substr(1);
|
|
442
365
|
state.startObject(name);
|
|
443
366
|
} else if (MATERIAL_USE_RE.test(line)) {
|
|
444
367
|
state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
|
|
@@ -448,13 +371,13 @@ var _default = function _default(text) {
|
|
|
448
371
|
result = line.split(' ');
|
|
449
372
|
|
|
450
373
|
if (result.length > 1) {
|
|
451
|
-
|
|
374
|
+
const value = result[1].trim().toLowerCase();
|
|
452
375
|
state.object.smooth = value !== '0' && value !== 'off';
|
|
453
376
|
} else {
|
|
454
377
|
state.object.smooth = true;
|
|
455
378
|
}
|
|
456
379
|
|
|
457
|
-
|
|
380
|
+
const material = state.object.currentMaterial();
|
|
458
381
|
if (material) material.smooth = state.object.smooth;
|
|
459
382
|
} else {
|
|
460
383
|
if (line === '\0') continue;
|
|
@@ -463,97 +386,79 @@ var _default = function _default(text) {
|
|
|
463
386
|
}
|
|
464
387
|
|
|
465
388
|
state.finalize();
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
},
|
|
481
|
-
attributes: {}
|
|
482
|
-
};
|
|
389
|
+
const meshes = [];
|
|
390
|
+
const materials = [];
|
|
391
|
+
|
|
392
|
+
for (const object of state.objects) {
|
|
393
|
+
const {
|
|
394
|
+
geometry
|
|
395
|
+
} = object;
|
|
396
|
+
if (geometry.vertices.length === 0) continue;
|
|
397
|
+
const mesh = {
|
|
398
|
+
header: {
|
|
399
|
+
vertexCount: geometry.vertices.length / 3
|
|
400
|
+
},
|
|
401
|
+
attributes: {}
|
|
402
|
+
};
|
|
483
403
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
404
|
+
switch (geometry.type) {
|
|
405
|
+
case 'Points':
|
|
406
|
+
mesh.mode = 0;
|
|
407
|
+
break;
|
|
488
408
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
409
|
+
case 'Line':
|
|
410
|
+
mesh.mode = 1;
|
|
411
|
+
break;
|
|
492
412
|
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
413
|
+
default:
|
|
414
|
+
mesh.mode = 4;
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
497
417
|
|
|
498
|
-
|
|
499
|
-
|
|
418
|
+
mesh.attributes.POSITION = {
|
|
419
|
+
value: new Float32Array(geometry.vertices),
|
|
420
|
+
size: 3
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
if (geometry.normals.length > 0) {
|
|
424
|
+
mesh.attributes.NORMAL = {
|
|
425
|
+
value: new Float32Array(geometry.normals),
|
|
500
426
|
size: 3
|
|
501
427
|
};
|
|
428
|
+
}
|
|
502
429
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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 = [];
|
|
430
|
+
if (geometry.colors.length > 0) {
|
|
431
|
+
mesh.attributes.COLOR_0 = {
|
|
432
|
+
value: new Float32Array(geometry.colors),
|
|
433
|
+
size: 3
|
|
434
|
+
};
|
|
435
|
+
}
|
|
525
436
|
|
|
526
|
-
|
|
527
|
-
|
|
437
|
+
if (geometry.uvs.length > 0) {
|
|
438
|
+
mesh.attributes.TEXCOORD_0 = {
|
|
439
|
+
value: new Float32Array(geometry.uvs),
|
|
440
|
+
size: 2
|
|
441
|
+
};
|
|
442
|
+
}
|
|
528
443
|
|
|
529
|
-
|
|
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
|
-
}
|
|
444
|
+
mesh.materials = [];
|
|
544
445
|
|
|
545
|
-
|
|
546
|
-
|
|
446
|
+
for (const sourceMaterial of object.materials) {
|
|
447
|
+
const _material = {
|
|
448
|
+
name: sourceMaterial.name,
|
|
449
|
+
flatShading: !sourceMaterial.smooth
|
|
450
|
+
};
|
|
451
|
+
mesh.materials.push(_material);
|
|
452
|
+
materials.push(_material);
|
|
547
453
|
}
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
_iterator4.f();
|
|
454
|
+
|
|
455
|
+
mesh.name = object.name;
|
|
456
|
+
meshes.push(mesh);
|
|
552
457
|
}
|
|
553
458
|
|
|
554
459
|
return {
|
|
555
|
-
meshes
|
|
556
|
-
materials
|
|
460
|
+
meshes,
|
|
461
|
+
materials
|
|
557
462
|
};
|
|
558
463
|
};
|
|
559
464
|
|