redhotmagma-visualization 1.44.9 → 1.45.0
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/Constants.js +1 -0
- package/DevApp.js +14 -0
- package/Three/Three2D.js +25 -4
- package/Three/Three3D.js +121 -83
- package/Three/Three3DScene.js +132 -58
- package/Utils/createBakedShadow.js +1 -2
- package/Utils/initTextureCanvas.js +3 -1
- package/Utils/optimizeTextureImage.js +1 -1
- package/Utils/rememberCameraViewOffset.js +12 -7
- package/Utils/restrictCameraMovement.js +2 -2
- package/package.json +3 -3
- package/public/libs/draco/README.md +2 -2
- package/public/libs/draco/draco_decoder.js +17 -35
- package/public/libs/draco/draco_decoder.wasm +0 -0
- package/public/libs/draco/draco_wasm_wrapper.js +117 -104
- package/public/libs/draco/gltf/draco_decoder.js +16 -31
- package/public/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/public/libs/draco/gltf/draco_wasm_wrapper.js +116 -104
- package/src/Constants.js +1 -0
- package/src/DevApp.js +12 -0
- package/src/Three/Three2D.js +4 -3
- package/src/Three/Three3D.js +15 -8
- package/src/Three/Three3DScene.js +85 -29
- package/src/Three/__tests__/Three3D.test.js +0 -33
- package/src/Utils/createBakedShadow.js +2 -4
- package/src/Utils/initTextureCanvas.js +2 -1
- package/src/Utils/optimizeTextureImage.js +1 -1
- package/src/Utils/rememberCameraViewOffset.js +5 -3
- package/src/Utils/restrictCameraMovement.js +1 -1
- package/Three/Controls/OrbitControls.js +0 -724
- package/Three/Loaders/ColladaLoader.js +0 -2568
- package/Three/Loaders/MTLLoader.js +0 -418
- package/Three/Loaders/OBJLoader.js +0 -516
- package/src/Three/Controls/OrbitControls.js +0 -934
- package/src/Three/Loaders/ColladaLoader.js +0 -3245
- package/src/Three/Loaders/MTLLoader.js +0 -512
- package/src/Three/Loaders/OBJLoader.js +0 -640
|
@@ -1,418 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports["default"] = void 0;
|
|
8
|
-
var THREE_imp = _interopRequireWildcard(require("three"));
|
|
9
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
11
|
-
/* eslint-disable */
|
|
12
|
-
|
|
13
|
-
// original source: three/examples/js/loaders/MTLLoader
|
|
14
|
-
|
|
15
|
-
var THREE = THREE_imp;
|
|
16
|
-
|
|
17
|
-
// important: update file from here if needed
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Loads a Wavefront .mtl file specifying materials
|
|
21
|
-
*
|
|
22
|
-
* @author angelxuanchang
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
THREE.MTLLoader = function (manager) {
|
|
26
|
-
THREE.Loader.call(this, manager);
|
|
27
|
-
};
|
|
28
|
-
THREE.MTLLoader.prototype = {
|
|
29
|
-
constructor: THREE.MTLLoader,
|
|
30
|
-
crossOrigin: "anonymous",
|
|
31
|
-
/**
|
|
32
|
-
* Loads and parses a MTL asset from a URL.
|
|
33
|
-
*
|
|
34
|
-
* @param {String} url - URL to the MTL file.
|
|
35
|
-
* @param {Function} [onLoad] - Callback invoked with the loaded object.
|
|
36
|
-
* @param {Function} [onProgress] - Callback for download progress.
|
|
37
|
-
* @param {Function} [onError] - Callback for download errors.
|
|
38
|
-
*
|
|
39
|
-
* @see setPath setResourcePath
|
|
40
|
-
*
|
|
41
|
-
* @note In order for relative texture references to resolve correctly
|
|
42
|
-
* you must call setResourcePath() explicitly prior to load.
|
|
43
|
-
*/
|
|
44
|
-
load: function load(url, onLoad, onProgress, onError) {
|
|
45
|
-
var scope = this;
|
|
46
|
-
var path = this.path === undefined ? THREE.LoaderUtils.extractUrlBase(url) : this.path;
|
|
47
|
-
var loader = new THREE.FileLoader(this.manager);
|
|
48
|
-
loader.setPath(this.path);
|
|
49
|
-
loader.load(url, function (text) {
|
|
50
|
-
onLoad(scope.parse(text, path));
|
|
51
|
-
}, onProgress, onError);
|
|
52
|
-
},
|
|
53
|
-
/**
|
|
54
|
-
* Set base path for resolving references.
|
|
55
|
-
* If set this path will be prepended to each loaded and found reference.
|
|
56
|
-
*
|
|
57
|
-
* @see setResourcePath
|
|
58
|
-
* @param {String} path
|
|
59
|
-
* @return {THREE.MTLLoader}
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* mtlLoader.setPath( 'assets/obj/' );
|
|
63
|
-
* mtlLoader.load( 'my.mtl', ... );
|
|
64
|
-
*/
|
|
65
|
-
setPath: function setPath(path) {
|
|
66
|
-
this.path = path;
|
|
67
|
-
return this;
|
|
68
|
-
},
|
|
69
|
-
/**
|
|
70
|
-
* Set base path for additional resources like textures.
|
|
71
|
-
*
|
|
72
|
-
* @see setPath
|
|
73
|
-
* @param {String} path
|
|
74
|
-
* @return {THREE.MTLLoader}
|
|
75
|
-
*
|
|
76
|
-
* @example
|
|
77
|
-
* mtlLoader.setPath( 'assets/obj/' );
|
|
78
|
-
* mtlLoader.setResourcePath( 'assets/textures/' );
|
|
79
|
-
* mtlLoader.load( 'my.mtl', ... );
|
|
80
|
-
*/
|
|
81
|
-
setResourcePath: function setResourcePath(path) {
|
|
82
|
-
this.resourcePath = path;
|
|
83
|
-
return this;
|
|
84
|
-
},
|
|
85
|
-
setTexturePath: function setTexturePath(path) {
|
|
86
|
-
console.warn("THREE.MTLLoader: .setTexturePath() has been renamed to .setResourcePath().");
|
|
87
|
-
return this.setResourcePath(path);
|
|
88
|
-
},
|
|
89
|
-
setCrossOrigin: function setCrossOrigin(value) {
|
|
90
|
-
this.crossOrigin = value;
|
|
91
|
-
return this;
|
|
92
|
-
},
|
|
93
|
-
setMaterialOptions: function setMaterialOptions(value) {
|
|
94
|
-
this.materialOptions = value;
|
|
95
|
-
return this;
|
|
96
|
-
},
|
|
97
|
-
/**
|
|
98
|
-
* Parses a MTL file.
|
|
99
|
-
*
|
|
100
|
-
* @param {String} text - Content of MTL file
|
|
101
|
-
* @return {THREE.MTLLoader.MaterialCreator}
|
|
102
|
-
*
|
|
103
|
-
* @see setPath setResourcePath
|
|
104
|
-
*
|
|
105
|
-
* @note In order for relative texture references to resolve correctly
|
|
106
|
-
* you must call setResourcePath() explicitly prior to parse.
|
|
107
|
-
*/
|
|
108
|
-
parse: function parse(text, path) {
|
|
109
|
-
var lines = text.split("\n");
|
|
110
|
-
var info = {};
|
|
111
|
-
var delimiter_pattern = /\s+/;
|
|
112
|
-
var materialsInfo = {};
|
|
113
|
-
for (var i = 0; i < lines.length; i++) {
|
|
114
|
-
var line = lines[i];
|
|
115
|
-
line = line.trim();
|
|
116
|
-
if (line.length === 0 || line.charAt(0) === "#") {
|
|
117
|
-
// Blank line or comment ignore
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
var pos = line.indexOf(" ");
|
|
121
|
-
var key = pos >= 0 ? line.substring(0, pos) : line;
|
|
122
|
-
key = key.toLowerCase();
|
|
123
|
-
var value = pos >= 0 ? line.substring(pos + 1) : "";
|
|
124
|
-
value = value.trim();
|
|
125
|
-
if (key === "newmtl") {
|
|
126
|
-
// New material
|
|
127
|
-
|
|
128
|
-
info = {
|
|
129
|
-
name: value
|
|
130
|
-
};
|
|
131
|
-
materialsInfo[value] = info;
|
|
132
|
-
} else {
|
|
133
|
-
if (key === "ka" || key === "kd" || key === "ks" || key === "ke") {
|
|
134
|
-
var ss = value.split(delimiter_pattern, 3);
|
|
135
|
-
info[key] = [parseFloat(ss[0]), parseFloat(ss[1]), parseFloat(ss[2])];
|
|
136
|
-
} else {
|
|
137
|
-
info[key] = value;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
var materialCreator = new THREE.MTLLoader.MaterialCreator(this.resourcePath || path, this.materialOptions);
|
|
142
|
-
materialCreator.setCrossOrigin(this.crossOrigin);
|
|
143
|
-
materialCreator.setManager(this.manager);
|
|
144
|
-
materialCreator.setMaterials(materialsInfo);
|
|
145
|
-
return materialCreator;
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Create a new THREE-MTLLoader.MaterialCreator
|
|
151
|
-
* @param baseUrl - Url relative to which textures are loaded
|
|
152
|
-
* @param options - Set of options on how to construct the materials
|
|
153
|
-
* side: Which side to apply the material
|
|
154
|
-
* THREE.FrontSide (default), THREE.BackSide, THREE.DoubleSide
|
|
155
|
-
* wrap: What type of wrapping to apply for textures
|
|
156
|
-
* THREE.RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping
|
|
157
|
-
* normalizeRGB: RGBs need to be normalized to 0-1 from 0-255
|
|
158
|
-
* Default: false, assumed to be already normalized
|
|
159
|
-
* ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's
|
|
160
|
-
* Default: false
|
|
161
|
-
* @constructor
|
|
162
|
-
*/
|
|
163
|
-
|
|
164
|
-
THREE.MTLLoader.MaterialCreator = function (baseUrl, options) {
|
|
165
|
-
this.baseUrl = baseUrl || "";
|
|
166
|
-
this.options = options;
|
|
167
|
-
this.materialsInfo = {};
|
|
168
|
-
this.materials = {};
|
|
169
|
-
this.materialsArray = [];
|
|
170
|
-
this.nameLookup = {};
|
|
171
|
-
this.side = this.options && this.options.side ? this.options.side : THREE.FrontSide;
|
|
172
|
-
this.wrap = this.options && this.options.wrap ? this.options.wrap : THREE.RepeatWrapping;
|
|
173
|
-
};
|
|
174
|
-
THREE.MTLLoader.MaterialCreator.prototype = {
|
|
175
|
-
constructor: THREE.MTLLoader.MaterialCreator,
|
|
176
|
-
crossOrigin: "anonymous",
|
|
177
|
-
setCrossOrigin: function setCrossOrigin(value) {
|
|
178
|
-
this.crossOrigin = value;
|
|
179
|
-
return this;
|
|
180
|
-
},
|
|
181
|
-
setManager: function setManager(value) {
|
|
182
|
-
this.manager = value;
|
|
183
|
-
},
|
|
184
|
-
setMaterials: function setMaterials(materialsInfo) {
|
|
185
|
-
this.materialsInfo = this.convert(materialsInfo);
|
|
186
|
-
this.materials = {};
|
|
187
|
-
this.materialsArray = [];
|
|
188
|
-
this.nameLookup = {};
|
|
189
|
-
},
|
|
190
|
-
convert: function convert(materialsInfo) {
|
|
191
|
-
if (!this.options) return materialsInfo;
|
|
192
|
-
var converted = {};
|
|
193
|
-
for (var mn in materialsInfo) {
|
|
194
|
-
// Convert materials info into normalized form based on options
|
|
195
|
-
|
|
196
|
-
var mat = materialsInfo[mn];
|
|
197
|
-
var covmat = {};
|
|
198
|
-
converted[mn] = covmat;
|
|
199
|
-
for (var prop in mat) {
|
|
200
|
-
var save = true;
|
|
201
|
-
var value = mat[prop];
|
|
202
|
-
var lprop = prop.toLowerCase();
|
|
203
|
-
switch (lprop) {
|
|
204
|
-
case "kd":
|
|
205
|
-
case "ka":
|
|
206
|
-
case "ks":
|
|
207
|
-
// Diffuse color (color under white light) using RGB values
|
|
208
|
-
|
|
209
|
-
if (this.options && this.options.normalizeRGB) {
|
|
210
|
-
value = [value[0] / 255, value[1] / 255, value[2] / 255];
|
|
211
|
-
}
|
|
212
|
-
if (this.options && this.options.ignoreZeroRGBs) {
|
|
213
|
-
if (value[0] === 0 && value[1] === 0 && value[2] === 0) {
|
|
214
|
-
// ignore
|
|
215
|
-
|
|
216
|
-
save = false;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
break;
|
|
220
|
-
default:
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
if (save) {
|
|
224
|
-
covmat[lprop] = value;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return converted;
|
|
229
|
-
},
|
|
230
|
-
preload: function preload() {
|
|
231
|
-
for (var mn in this.materialsInfo) {
|
|
232
|
-
this.create(mn);
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
getIndex: function getIndex(materialName) {
|
|
236
|
-
return this.nameLookup[materialName];
|
|
237
|
-
},
|
|
238
|
-
getAsArray: function getAsArray() {
|
|
239
|
-
var index = 0;
|
|
240
|
-
for (var mn in this.materialsInfo) {
|
|
241
|
-
this.materialsArray[index] = this.create(mn);
|
|
242
|
-
this.nameLookup[mn] = index;
|
|
243
|
-
index++;
|
|
244
|
-
}
|
|
245
|
-
return this.materialsArray;
|
|
246
|
-
},
|
|
247
|
-
create: function create(materialName) {
|
|
248
|
-
if (this.materials[materialName] === undefined) {
|
|
249
|
-
this.createMaterial_(materialName);
|
|
250
|
-
}
|
|
251
|
-
return this.materials[materialName];
|
|
252
|
-
},
|
|
253
|
-
createMaterial_: function createMaterial_(materialName) {
|
|
254
|
-
// Create material
|
|
255
|
-
|
|
256
|
-
var scope = this;
|
|
257
|
-
var mat = this.materialsInfo[materialName];
|
|
258
|
-
var params = {
|
|
259
|
-
name: materialName,
|
|
260
|
-
side: this.side
|
|
261
|
-
};
|
|
262
|
-
function resolveURL(baseUrl, url) {
|
|
263
|
-
if (typeof url !== "string" || url === "") return "";
|
|
264
|
-
|
|
265
|
-
// Absolute URL
|
|
266
|
-
if (/^https?:\/\//i.test(url)) return url;
|
|
267
|
-
return baseUrl + url;
|
|
268
|
-
}
|
|
269
|
-
function setMapForType(mapType, value) {
|
|
270
|
-
if (params[mapType]) return; // Keep the first encountered texture
|
|
271
|
-
|
|
272
|
-
var texParams = scope.getTextureParams(value, params);
|
|
273
|
-
var map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));
|
|
274
|
-
map.repeat.copy(texParams.scale);
|
|
275
|
-
map.offset.copy(texParams.offset);
|
|
276
|
-
map.wrapS = scope.wrap;
|
|
277
|
-
map.wrapT = scope.wrap;
|
|
278
|
-
params[mapType] = map;
|
|
279
|
-
}
|
|
280
|
-
for (var prop in mat) {
|
|
281
|
-
var value = mat[prop];
|
|
282
|
-
var n;
|
|
283
|
-
if (value === "") continue;
|
|
284
|
-
switch (prop.toLowerCase()) {
|
|
285
|
-
// Ns is material specular exponent
|
|
286
|
-
|
|
287
|
-
case "kd":
|
|
288
|
-
// Diffuse color (color under white light) using RGB values
|
|
289
|
-
|
|
290
|
-
params.color = new THREE.Color().fromArray(value);
|
|
291
|
-
break;
|
|
292
|
-
case "ks":
|
|
293
|
-
// Specular color (color when light is reflected from shiny surface) using RGB values
|
|
294
|
-
params.specular = new THREE.Color().fromArray(value);
|
|
295
|
-
break;
|
|
296
|
-
case "ke":
|
|
297
|
-
// Emissive using RGB values
|
|
298
|
-
params.emissive = new THREE.Color().fromArray(value);
|
|
299
|
-
break;
|
|
300
|
-
case "map_kd":
|
|
301
|
-
// Diffuse texture map
|
|
302
|
-
|
|
303
|
-
setMapForType("map", value);
|
|
304
|
-
break;
|
|
305
|
-
case "map_ks":
|
|
306
|
-
// Specular map
|
|
307
|
-
|
|
308
|
-
setMapForType("specularMap", value);
|
|
309
|
-
break;
|
|
310
|
-
case "map_ke":
|
|
311
|
-
// Emissive map
|
|
312
|
-
|
|
313
|
-
setMapForType("emissiveMap", value);
|
|
314
|
-
break;
|
|
315
|
-
case "norm":
|
|
316
|
-
setMapForType("normalMap", value);
|
|
317
|
-
break;
|
|
318
|
-
case "map_bump":
|
|
319
|
-
case "bump":
|
|
320
|
-
// Bump texture map
|
|
321
|
-
|
|
322
|
-
setMapForType("bumpMap", value);
|
|
323
|
-
break;
|
|
324
|
-
case "map_d":
|
|
325
|
-
// Alpha map
|
|
326
|
-
|
|
327
|
-
setMapForType("alphaMap", value);
|
|
328
|
-
params.transparent = true;
|
|
329
|
-
break;
|
|
330
|
-
case "map_pm":
|
|
331
|
-
// Metalness map
|
|
332
|
-
|
|
333
|
-
setMapForType("metalnessMap", value);
|
|
334
|
-
|
|
335
|
-
// fine-tune the metalness value if needed
|
|
336
|
-
//params.metalness = 0.2;
|
|
337
|
-
|
|
338
|
-
break;
|
|
339
|
-
case "map_pr":
|
|
340
|
-
// Roughness map
|
|
341
|
-
|
|
342
|
-
setMapForType("roughnessMap", value);
|
|
343
|
-
|
|
344
|
-
// fine-tune the roughness value if needed
|
|
345
|
-
//params.roughness = 0.1;
|
|
346
|
-
|
|
347
|
-
break;
|
|
348
|
-
case "ns":
|
|
349
|
-
// The specular exponent (defines the focus of the specular highlight)
|
|
350
|
-
// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.
|
|
351
|
-
|
|
352
|
-
params.shininess = parseFloat(value);
|
|
353
|
-
break;
|
|
354
|
-
case "d":
|
|
355
|
-
n = parseFloat(value);
|
|
356
|
-
if (n < 1) {
|
|
357
|
-
params.opacity = n;
|
|
358
|
-
params.transparent = true;
|
|
359
|
-
}
|
|
360
|
-
break;
|
|
361
|
-
case "tr":
|
|
362
|
-
n = parseFloat(value);
|
|
363
|
-
if (this.options && this.options.invertTrProperty) n = 1 - n;
|
|
364
|
-
if (n > 0) {
|
|
365
|
-
params.opacity = 1 - n;
|
|
366
|
-
params.transparent = true;
|
|
367
|
-
}
|
|
368
|
-
break;
|
|
369
|
-
default:
|
|
370
|
-
break;
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
this.materials[materialName] = new THREE.MeshStandardMaterial(params);
|
|
374
|
-
return this.materials[materialName];
|
|
375
|
-
},
|
|
376
|
-
getTextureParams: function getTextureParams(value, matParams) {
|
|
377
|
-
var texParams = {
|
|
378
|
-
scale: new THREE.Vector2(1, 1),
|
|
379
|
-
offset: new THREE.Vector2(0, 0)
|
|
380
|
-
};
|
|
381
|
-
var items = value.split(/\s+/);
|
|
382
|
-
var pos;
|
|
383
|
-
pos = items.indexOf("-bm");
|
|
384
|
-
if (pos >= 0) {
|
|
385
|
-
matParams.bumpScale = parseFloat(items[pos + 1]);
|
|
386
|
-
items.splice(pos, 2);
|
|
387
|
-
}
|
|
388
|
-
pos = items.indexOf("-s");
|
|
389
|
-
if (pos >= 0) {
|
|
390
|
-
texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));
|
|
391
|
-
items.splice(pos, 4); // we expect 3 parameters here!
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
pos = items.indexOf("-o");
|
|
395
|
-
if (pos >= 0) {
|
|
396
|
-
texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));
|
|
397
|
-
items.splice(pos, 4); // we expect 3 parameters here!
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
texParams.url = items.join(" ").trim();
|
|
401
|
-
return texParams;
|
|
402
|
-
},
|
|
403
|
-
loadTexture: function loadTexture(url, mapping, onLoad, onProgress, onError) {
|
|
404
|
-
var texture;
|
|
405
|
-
var manager = this.manager !== undefined ? this.manager : THREE.DefaultLoadingManager;
|
|
406
|
-
var loader = manager.getHandler(url);
|
|
407
|
-
if (loader === null) {
|
|
408
|
-
loader = new THREE.TextureLoader(manager);
|
|
409
|
-
}
|
|
410
|
-
if (loader.setCrossOrigin) loader.setCrossOrigin(this.crossOrigin);
|
|
411
|
-
texture = loader.load(url, onLoad, onProgress, onError);
|
|
412
|
-
if (mapping !== undefined) texture.mapping = mapping;
|
|
413
|
-
return texture;
|
|
414
|
-
}
|
|
415
|
-
};
|
|
416
|
-
|
|
417
|
-
// important: don't forget to export it
|
|
418
|
-
var _default = exports["default"] = THREE.MTLLoader;
|