@loaders.gl/obj 4.0.0-beta.6 → 4.0.0-beta.8

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/LICENSE CHANGED
@@ -1,9 +1,6 @@
1
- Copyright (c) 2015 Uber Technologies, Inc.
2
-
3
- This software includes parts of PhiloGL (https://github.com/philogb/philogl)
4
- under MIT license. PhiloGL parts Copyright © 2013 Sencha Labs.
1
+ loaders.gl is licensed under the MIT license
5
2
 
6
- This software includes adaptations of postprocessing code from THREE.js (https://github.com/mrdoob/three.js/) under MIT license. Additional attribution given in specific source files. THREE.js parts Copyright © 2010-2018 three.js authors.
3
+ Copyright (c) vis.gl contributors
7
4
 
8
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
6
  of this software and associated documentation files (the "Software"), to deal
@@ -23,8 +20,12 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
21
  THE SOFTWARE.
25
22
 
23
+ ---
24
+
25
+ Copyright (c) 2015 Uber Technologies, Inc.
26
26
 
27
- loaders.gl includes certain files from Cesium (https://github.com/AnalyticalGraphicsInc/cesium) under the Apache 2 License:
27
+ loaders.gl includes certain files from Cesium (https://github.com/AnalyticalGraphicsInc/cesium)
28
+ under the Apache 2 License (found in the submodule: modules/3d-tiles):)
28
29
 
29
30
  Copyright 2011-2018 CesiumJS Contributors
30
31
 
@@ -38,4 +39,3 @@ distributed under the License is distributed on an "AS IS" BASIS,
38
39
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39
40
  See the License for the specific language governing permissions and limitations under the License.
40
41
 
41
- Cesium-derived code can be found in the submodule: modules/3d-tiles
@@ -1 +1 @@
1
- {"version":3,"file":"get-obj-schema.d.ts","sourceRoot":"","sources":["../../src/lib/get-obj-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAyB,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAGrF,sBAAsB;AACtB,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACzC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,MAAM,CAgBR"}
1
+ {"version":3,"file":"get-obj-schema.d.ts","sourceRoot":"","sources":["../../src/lib/get-obj-schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAyB,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAGrF,sBAAsB;AACtB,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACzC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,MAAM,CAgBR"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-obj-schema.js","names":["getDataTypeFromArray","getOBJSchema","attributes","metadata","arguments","length","undefined","stringMetadata","key","JSON","stringify","fields","attributeName","attribute","field","getFieldFromAttribute","push","name","type","value","isSingleValue","size","listSize","children","nullable"],"sources":["../../src/lib/get-obj-schema.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {Schema, SchemaMetadata, Field, MeshAttribute} from '@loaders.gl/schema';\nimport {getDataTypeFromArray} from '@loaders.gl/schema';\n\n/** Get Mesh Schema */\nexport function getOBJSchema(\n attributes: Record<string, MeshAttribute>,\n metadata: Record<string, unknown> = {}\n): Schema {\n const stringMetadata: SchemaMetadata = {};\n for (const key in metadata) {\n if (key !== 'value') {\n stringMetadata[key] = JSON.stringify(metadata[key]);\n }\n }\n\n const fields: Field[] = [];\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getFieldFromAttribute(attributeName, attribute);\n fields.push(field);\n }\n\n return {fields, metadata: stringMetadata};\n}\n\n/** Get a Field describing the column from an OBJ attribute */\nfunction getFieldFromAttribute(name: string, attribute: MeshAttribute): Field {\n const metadata: Record<string, string> = {};\n for (const key in attribute) {\n if (key !== 'value') {\n metadata[key] = JSON.stringify(attribute[key]);\n }\n }\n\n let {type} = getDataTypeFromArray(attribute.value);\n const isSingleValue = attribute.size === 1 || attribute.size === undefined;\n if (!isSingleValue) {\n type = {type: 'fixed-size-list', listSize: attribute.size, children: [{name: 'values', type}]};\n }\n return {name, type, nullable: false, metadata};\n}\n"],"mappings":"AAGA,SAAQA,oBAAoB,QAAO,oBAAoB;AAGvD,OAAO,SAASC,YAAYA,CAC1BC,UAAyC,EAEjC;EAAA,IADRC,QAAiC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEtC,MAAMG,cAA8B,GAAG,CAAC,CAAC;EACzC,KAAK,MAAMC,GAAG,IAAIL,QAAQ,EAAE;IAC1B,IAAIK,GAAG,KAAK,OAAO,EAAE;MACnBD,cAAc,CAACC,GAAG,CAAC,GAAGC,IAAI,CAACC,SAAS,CAACP,QAAQ,CAACK,GAAG,CAAC,CAAC;IACrD;EACF;EAEA,MAAMG,MAAe,GAAG,EAAE;EAC1B,KAAK,MAAMC,aAAa,IAAIV,UAAU,EAAE;IACtC,MAAMW,SAAS,GAAGX,UAAU,CAACU,aAAa,CAAC;IAC3C,MAAME,KAAK,GAAGC,qBAAqB,CAACH,aAAa,EAAEC,SAAS,CAAC;IAC7DF,MAAM,CAACK,IAAI,CAACF,KAAK,CAAC;EACpB;EAEA,OAAO;IAACH,MAAM;IAAER,QAAQ,EAAEI;EAAc,CAAC;AAC3C;AAGA,SAASQ,qBAAqBA,CAACE,IAAY,EAAEJ,SAAwB,EAAS;EAC5E,MAAMV,QAAgC,GAAG,CAAC,CAAC;EAC3C,KAAK,MAAMK,GAAG,IAAIK,SAAS,EAAE;IAC3B,IAAIL,GAAG,KAAK,OAAO,EAAE;MACnBL,QAAQ,CAACK,GAAG,CAAC,GAAGC,IAAI,CAACC,SAAS,CAACG,SAAS,CAACL,GAAG,CAAC,CAAC;IAChD;EACF;EAEA,IAAI;IAACU;EAAI,CAAC,GAAGlB,oBAAoB,CAACa,SAAS,CAACM,KAAK,CAAC;EAClD,MAAMC,aAAa,GAAGP,SAAS,CAACQ,IAAI,KAAK,CAAC,IAAIR,SAAS,CAACQ,IAAI,KAAKf,SAAS;EAC1E,IAAI,CAACc,aAAa,EAAE;IAClBF,IAAI,GAAG;MAACA,IAAI,EAAE,iBAAiB;MAAEI,QAAQ,EAAET,SAAS,CAACQ,IAAI;MAAEE,QAAQ,EAAE,CAAC;QAACN,IAAI,EAAE,QAAQ;QAAEC;MAAI,CAAC;IAAC,CAAC;EAChG;EACA,OAAO;IAACD,IAAI;IAAEC,IAAI;IAAEM,QAAQ,EAAE,KAAK;IAAErB;EAAQ,CAAC;AAChD"}
1
+ {"version":3,"file":"get-obj-schema.js","names":["getDataTypeFromArray","getOBJSchema","attributes","metadata","arguments","length","undefined","stringMetadata","key","JSON","stringify","fields","attributeName","attribute","field","getFieldFromAttribute","push","name","type","value","isSingleValue","size","listSize","children","nullable"],"sources":["../../src/lib/get-obj-schema.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {Schema, SchemaMetadata, Field, MeshAttribute} from '@loaders.gl/schema';\nimport {getDataTypeFromArray} from '@loaders.gl/schema';\n\n/** Get Mesh Schema */\nexport function getOBJSchema(\n attributes: Record<string, MeshAttribute>,\n metadata: Record<string, unknown> = {}\n): Schema {\n const stringMetadata: SchemaMetadata = {};\n for (const key in metadata) {\n if (key !== 'value') {\n stringMetadata[key] = JSON.stringify(metadata[key]);\n }\n }\n\n const fields: Field[] = [];\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getFieldFromAttribute(attributeName, attribute);\n fields.push(field);\n }\n\n return {fields, metadata: stringMetadata};\n}\n\n/** Get a Field describing the column from an OBJ attribute */\nfunction getFieldFromAttribute(name: string, attribute: MeshAttribute): Field {\n const metadata: Record<string, string> = {};\n for (const key in attribute) {\n if (key !== 'value') {\n metadata[key] = JSON.stringify(attribute[key]);\n }\n }\n\n let {type} = getDataTypeFromArray(attribute.value);\n const isSingleValue = attribute.size === 1 || attribute.size === undefined;\n if (!isSingleValue) {\n type = {type: 'fixed-size-list', listSize: attribute.size, children: [{name: 'values', type}]};\n }\n return {name, type, nullable: false, metadata};\n}\n"],"mappings":"AAIA,SAAQA,oBAAoB,QAAO,oBAAoB;AAGvD,OAAO,SAASC,YAAYA,CAC1BC,UAAyC,EAEjC;EAAA,IADRC,QAAiC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEtC,MAAMG,cAA8B,GAAG,CAAC,CAAC;EACzC,KAAK,MAAMC,GAAG,IAAIL,QAAQ,EAAE;IAC1B,IAAIK,GAAG,KAAK,OAAO,EAAE;MACnBD,cAAc,CAACC,GAAG,CAAC,GAAGC,IAAI,CAACC,SAAS,CAACP,QAAQ,CAACK,GAAG,CAAC,CAAC;IACrD;EACF;EAEA,MAAMG,MAAe,GAAG,EAAE;EAC1B,KAAK,MAAMC,aAAa,IAAIV,UAAU,EAAE;IACtC,MAAMW,SAAS,GAAGX,UAAU,CAACU,aAAa,CAAC;IAC3C,MAAME,KAAK,GAAGC,qBAAqB,CAACH,aAAa,EAAEC,SAAS,CAAC;IAC7DF,MAAM,CAACK,IAAI,CAACF,KAAK,CAAC;EACpB;EAEA,OAAO;IAACH,MAAM;IAAER,QAAQ,EAAEI;EAAc,CAAC;AAC3C;AAGA,SAASQ,qBAAqBA,CAACE,IAAY,EAAEJ,SAAwB,EAAS;EAC5E,MAAMV,QAAgC,GAAG,CAAC,CAAC;EAC3C,KAAK,MAAMK,GAAG,IAAIK,SAAS,EAAE;IAC3B,IAAIL,GAAG,KAAK,OAAO,EAAE;MACnBL,QAAQ,CAACK,GAAG,CAAC,GAAGC,IAAI,CAACC,SAAS,CAACG,SAAS,CAACL,GAAG,CAAC,CAAC;IAChD;EACF;EAEA,IAAI;IAACU;EAAI,CAAC,GAAGlB,oBAAoB,CAACa,SAAS,CAACM,KAAK,CAAC;EAClD,MAAMC,aAAa,GAAGP,SAAS,CAACQ,IAAI,KAAK,CAAC,IAAIR,SAAS,CAACQ,IAAI,KAAKf,SAAS;EAC1E,IAAI,CAACc,aAAa,EAAE;IAClBF,IAAI,GAAG;MAACA,IAAI,EAAE,iBAAiB;MAAEI,QAAQ,EAAET,SAAS,CAACQ,IAAI;MAAEE,QAAQ,EAAE,CAAC;QAACN,IAAI,EAAE,QAAQ;QAAEC;MAAI,CAAC;IAAC,CAAC;EAChG;EACA,OAAO;IAACD,IAAI;IAAEC,IAAI;IAAEM,QAAQ,EAAE,KAAK;IAAErB;EAAQ,CAAC;AAChD"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-mtl.d.ts","sourceRoot":"","sources":["../../src/lib/parse-mtl.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAIF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;GAOG;AAEH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,WAAW,EAAE,CA2H/E"}
1
+ {"version":3,"file":"parse-mtl.d.ts","sourceRoot":"","sources":["../../src/lib/parse-mtl.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAIF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;GAOG;AAEH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,WAAW,EAAE,CA2H/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-mtl.js","names":["DELIMITER_PATTERN","parseMTL","text","options","materials","currentMaterial","name","lines","split","line","trim","length","charAt","pos","indexOf","key","substring","toLowerCase","value","push","ambientColor","parseColor","diffuseColor","diffuseTextureUrl","specularColor","specularTextureUrl","emissiveColor","emissiveTextureUrl","shininess","parseFloat","refraction","illumination","rgb","color"],"sources":["../../src/lib/parse-mtl.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Forked from THREE.js under MIT license\n// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js\n\n// import type {DiffuseMaterial} from '@loaders.gl/schema';\n\nexport type MTLMaterial = {\n name: string;\n ambientColor?: [number, number, number];\n diffuseColor?: [number, number, number];\n specularColor?: [number, number, number];\n emissiveColor?: [number, number, number];\n // specular?: number;\n shininess?: number;\n refraction?: number;\n illumination?: number;\n diffuseTextureUrl?: string;\n emissiveTextureUrl?: string;\n specularTextureUrl?: string;\n};\n\nconst DELIMITER_PATTERN = /\\s+/;\n\n/**\n * Set of options on how to construct materials\n * @param normalizeRGB: RGBs need to be normalized to 0-1 from 0-255 (Default: false, assumed to be already normalized)\n * @param ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's Default: false\n * @param baseUrl - Url relative to which textures are loaded\n */\nexport type ParseMTLOptions = {\n normalizeRGB?: boolean;\n ignoreZeroRGBs?: boolean;\n baseUrl?: string;\n};\n\n/**\n * Parses a MTL file.\n * Parses a Wavefront .mtl file specifying materials\n * http://paulbourke.net/dataformats/mtl/\n * https://www.loc.gov/preservation/digital/formats/fdd/fdd000508.shtml\n *\n * @param text - Content of MTL file\n */\n// eslint-disable-next-line complexity\nexport function parseMTL(text: string, options?: ParseMTLOptions): MTLMaterial[] {\n // const materialsInfo: Record<string, MTLMaterial> = {};\n const materials: MTLMaterial[] = [];\n\n let currentMaterial: MTLMaterial = {name: 'placeholder'};\n\n const lines = text.split('\\n');\n for (let line of lines) {\n line = line.trim();\n\n if (line.length === 0 || line.charAt(0) === '#') {\n // Blank line or comment ignore\n continue; // eslint-disable-line no-continue\n }\n\n const pos = line.indexOf(' ');\n\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n\n let value = pos >= 0 ? line.substring(pos + 1) : '';\n value = value.trim();\n\n switch (key) {\n case 'newmtl':\n // New material\n currentMaterial = {name: value};\n // insert into map\n materials.push(currentMaterial);\n break;\n\n case 'ka': // Ka\n currentMaterial.ambientColor = parseColor(value);\n break;\n\n case 'kd':\n // Kd: Diffuse color (color under white light) using RGB values\n currentMaterial.diffuseColor = parseColor(value);\n break;\n case 'map_kd':\n // Diffuse texture map\n currentMaterial.diffuseTextureUrl = value;\n // setMapForType('map', value);\n break;\n\n case 'ks':\n // Specular color (color when light is reflected from shiny surface) using RGB values\n currentMaterial.specularColor = parseColor(value);\n break;\n case 'map_ks':\n // Specular map\n currentMaterial.specularTextureUrl = value;\n // setMapForType('specularMap', value);\n break;\n\n case 'ke':\n // Emissive using RGB values\n currentMaterial.emissiveColor = parseColor(value);\n break;\n case 'map_ke':\n // Emissive map\n currentMaterial.emissiveTextureUrl = value;\n // setMapForType('emissiveMap', value);\n break;\n\n case 'ns':\n // Ns is material specular exponent (defines the focus of the specular highlight)\n // A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n currentMaterial.shininess = parseFloat(value);\n break;\n case 'map_ns':\n // Ns is material specular exponent\n // TODO?\n // currentMaterial.shininessMap = parseFloat(value);\n break;\n case 'ni':\n currentMaterial.refraction = parseFloat(value);\n break;\n case 'illum':\n currentMaterial.illumination = parseFloat(value);\n break;\n\n default:\n // log unknown message?\n break;\n\n /*\n case 'norm':\n setMapForType('normalMap', value);\n break;\n\n case 'map_bump':\n case 'bump':\n // Bump texture map\n setMapForType('bumpMap', value);\n break;\n\n case 'd':\n n = parseFloat(value);\n if (n < 1) {\n params.opacity = n;\n params.transparent = true;\n }\n break;\n\n case 'map_d':\n // Alpha map\n setMapForType('alphaMap', value);\n params.transparent = true;\n break;\n\n case 'tr':\n n = parseFloat(value);\n if (this.options && this.options.invertTrProperty) n = 1 - n;\n if (n > 0) {\n params.opacity = 1 - n;\n params.transparent = true;\n }\n */\n }\n }\n\n return materials;\n}\n\nfunction parseColor(value: string, options?: ParseMTLOptions): [number, number, number] {\n const rgb = value.split(DELIMITER_PATTERN, 3);\n const color: [number, number, number] = [\n parseFloat(rgb[0]),\n parseFloat(rgb[1]),\n parseFloat(rgb[2])\n ];\n // TODO auto detect big values?\n // if (this.options && this.options.normalizeRGB) {\n // value = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n // }\n\n // if (this.options && this.options.ignoreZeroRGBs) {\n // if (value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0) {\n // // ignore\n // save = false;\n // }\n // }\n return color;\n}\n\n/* TODO parse url options\nfunction parseTexture(value, matParams) {\n const texParams = {\n scale: new Vector2(1, 1),\n offset: new Vector2(0, 0)\n };\n\n const items = value.split(/\\s+/);\n let pos;\n\n pos = items.indexOf('-bm');\n if (pos >= 0) {\n matParams.bumpScale = parseFloat(items[ pos + 1 ]);\n items.splice(pos, 2);\n }\n\n pos = items.indexOf('-s');\n if (pos >= 0) {\n texParams.scale.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));\n items.splice(pos, 4); // we expect 3 parameters here!\n\n }\n\n pos = items.indexOf('-o');\n\n if (pos >= 0) {\n texParams.offset.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));\n items.splice(pos, 4); // we expect 3 parameters here!\n }\n\n texParams.url = items.join(' ').trim();\n return texParams;\n}\n\n *function resolveURL(baseUrl, url) {\n * baseUrl?: string;\n // Absolute URL\n if (/^https?:\\/\\//i.test(url)) return url;\n return baseUrl + url;\n }\n\n function setMapForType(mapType, value) {\n if (params[ mapType ]) return; // Keep the first encountered texture\n\n const texParams = scope.getTextureParams(value, params);\n const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));\n\n map.repeat.copy(texParams.scale);\n map.offset.copy(texParams.offset);\n\n map.wrapS = scope.wrap;\n map.wrapT = scope.wrap;\n\n params[ mapType ] = map;\n }\n*/\n"],"mappings":"AAqBA,MAAMA,iBAAiB,GAAG,KAAK;AAuB/B,OAAO,SAASC,QAAQA,CAACC,IAAY,EAAEC,OAAyB,EAAiB;EAE/E,MAAMC,SAAwB,GAAG,EAAE;EAEnC,IAAIC,eAA4B,GAAG;IAACC,IAAI,EAAE;EAAa,CAAC;EAExD,MAAMC,KAAK,GAAGL,IAAI,CAACM,KAAK,CAAC,IAAI,CAAC;EAC9B,KAAK,IAAIC,IAAI,IAAIF,KAAK,EAAE;IACtBE,IAAI,GAAGA,IAAI,CAACC,IAAI,CAAC,CAAC;IAElB,IAAID,IAAI,CAACE,MAAM,KAAK,CAAC,IAAIF,IAAI,CAACG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MAE/C;IACF;IAEA,MAAMC,GAAG,GAAGJ,IAAI,CAACK,OAAO,CAAC,GAAG,CAAC;IAE7B,IAAIC,GAAG,GAAGF,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAAC,CAAC,EAAEH,GAAG,CAAC,GAAGJ,IAAI;IAClDM,GAAG,GAAGA,GAAG,CAACE,WAAW,CAAC,CAAC;IAEvB,IAAIC,KAAK,GAAGL,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAACH,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;IACnDK,KAAK,GAAGA,KAAK,CAACR,IAAI,CAAC,CAAC;IAEpB,QAAQK,GAAG;MACT,KAAK,QAAQ;QAEXV,eAAe,GAAG;UAACC,IAAI,EAAEY;QAAK,CAAC;QAE/Bd,SAAS,CAACe,IAAI,CAACd,eAAe,CAAC;QAC/B;MAEF,KAAK,IAAI;QACPA,eAAe,CAACe,YAAY,GAAGC,UAAU,CAACH,KAAK,CAAC;QAChD;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACiB,YAAY,GAAGD,UAAU,CAACH,KAAK,CAAC;QAChD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACkB,iBAAiB,GAAGL,KAAK;QAEzC;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACmB,aAAa,GAAGH,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACoB,kBAAkB,GAAGP,KAAK;QAE1C;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACqB,aAAa,GAAGL,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACsB,kBAAkB,GAAGT,KAAK;QAE1C;MAEF,KAAK,IAAI;QAGPb,eAAe,CAACuB,SAAS,GAAGC,UAAU,CAACX,KAAK,CAAC;QAC7C;MACF,KAAK,QAAQ;QAIX;MACF,KAAK,IAAI;QACPb,eAAe,CAACyB,UAAU,GAAGD,UAAU,CAACX,KAAK,CAAC;QAC9C;MACF,KAAK,OAAO;QACVb,eAAe,CAAC0B,YAAY,GAAGF,UAAU,CAACX,KAAK,CAAC;QAChD;MAEF;QAEE;IAmCJ;EACF;EAEA,OAAOd,SAAS;AAClB;AAEA,SAASiB,UAAUA,CAACH,KAAa,EAAEf,OAAyB,EAA4B;EACtF,MAAM6B,GAAG,GAAGd,KAAK,CAACV,KAAK,CAACR,iBAAiB,EAAE,CAAC,CAAC;EAC7C,MAAMiC,KAA+B,GAAG,CACtCJ,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,CACnB;EAYD,OAAOC,KAAK;AACd"}
1
+ {"version":3,"file":"parse-mtl.js","names":["DELIMITER_PATTERN","parseMTL","text","options","materials","currentMaterial","name","lines","split","line","trim","length","charAt","pos","indexOf","key","substring","toLowerCase","value","push","ambientColor","parseColor","diffuseColor","diffuseTextureUrl","specularColor","specularTextureUrl","emissiveColor","emissiveTextureUrl","shininess","parseFloat","refraction","illumination","rgb","color"],"sources":["../../src/lib/parse-mtl.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n// Forked from THREE.js under MIT license\n// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js\n\n// import type {DiffuseMaterial} from '@loaders.gl/schema';\n\nexport type MTLMaterial = {\n name: string;\n ambientColor?: [number, number, number];\n diffuseColor?: [number, number, number];\n specularColor?: [number, number, number];\n emissiveColor?: [number, number, number];\n // specular?: number;\n shininess?: number;\n refraction?: number;\n illumination?: number;\n diffuseTextureUrl?: string;\n emissiveTextureUrl?: string;\n specularTextureUrl?: string;\n};\n\nconst DELIMITER_PATTERN = /\\s+/;\n\n/**\n * Set of options on how to construct materials\n * @param normalizeRGB: RGBs need to be normalized to 0-1 from 0-255 (Default: false, assumed to be already normalized)\n * @param ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's Default: false\n * @param baseUrl - Url relative to which textures are loaded\n */\nexport type ParseMTLOptions = {\n normalizeRGB?: boolean;\n ignoreZeroRGBs?: boolean;\n baseUrl?: string;\n};\n\n/**\n * Parses a MTL file.\n * Parses a Wavefront .mtl file specifying materials\n * http://paulbourke.net/dataformats/mtl/\n * https://www.loc.gov/preservation/digital/formats/fdd/fdd000508.shtml\n *\n * @param text - Content of MTL file\n */\n// eslint-disable-next-line complexity\nexport function parseMTL(text: string, options?: ParseMTLOptions): MTLMaterial[] {\n // const materialsInfo: Record<string, MTLMaterial> = {};\n const materials: MTLMaterial[] = [];\n\n let currentMaterial: MTLMaterial = {name: 'placeholder'};\n\n const lines = text.split('\\n');\n for (let line of lines) {\n line = line.trim();\n\n if (line.length === 0 || line.charAt(0) === '#') {\n // Blank line or comment ignore\n continue; // eslint-disable-line no-continue\n }\n\n const pos = line.indexOf(' ');\n\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n\n let value = pos >= 0 ? line.substring(pos + 1) : '';\n value = value.trim();\n\n switch (key) {\n case 'newmtl':\n // New material\n currentMaterial = {name: value};\n // insert into map\n materials.push(currentMaterial);\n break;\n\n case 'ka': // Ka\n currentMaterial.ambientColor = parseColor(value);\n break;\n\n case 'kd':\n // Kd: Diffuse color (color under white light) using RGB values\n currentMaterial.diffuseColor = parseColor(value);\n break;\n case 'map_kd':\n // Diffuse texture map\n currentMaterial.diffuseTextureUrl = value;\n // setMapForType('map', value);\n break;\n\n case 'ks':\n // Specular color (color when light is reflected from shiny surface) using RGB values\n currentMaterial.specularColor = parseColor(value);\n break;\n case 'map_ks':\n // Specular map\n currentMaterial.specularTextureUrl = value;\n // setMapForType('specularMap', value);\n break;\n\n case 'ke':\n // Emissive using RGB values\n currentMaterial.emissiveColor = parseColor(value);\n break;\n case 'map_ke':\n // Emissive map\n currentMaterial.emissiveTextureUrl = value;\n // setMapForType('emissiveMap', value);\n break;\n\n case 'ns':\n // Ns is material specular exponent (defines the focus of the specular highlight)\n // A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n currentMaterial.shininess = parseFloat(value);\n break;\n case 'map_ns':\n // Ns is material specular exponent\n // TODO?\n // currentMaterial.shininessMap = parseFloat(value);\n break;\n case 'ni':\n currentMaterial.refraction = parseFloat(value);\n break;\n case 'illum':\n currentMaterial.illumination = parseFloat(value);\n break;\n\n default:\n // log unknown message?\n break;\n\n /*\n case 'norm':\n setMapForType('normalMap', value);\n break;\n\n case 'map_bump':\n case 'bump':\n // Bump texture map\n setMapForType('bumpMap', value);\n break;\n\n case 'd':\n n = parseFloat(value);\n if (n < 1) {\n params.opacity = n;\n params.transparent = true;\n }\n break;\n\n case 'map_d':\n // Alpha map\n setMapForType('alphaMap', value);\n params.transparent = true;\n break;\n\n case 'tr':\n n = parseFloat(value);\n if (this.options && this.options.invertTrProperty) n = 1 - n;\n if (n > 0) {\n params.opacity = 1 - n;\n params.transparent = true;\n }\n */\n }\n }\n\n return materials;\n}\n\nfunction parseColor(value: string, options?: ParseMTLOptions): [number, number, number] {\n const rgb = value.split(DELIMITER_PATTERN, 3);\n const color: [number, number, number] = [\n parseFloat(rgb[0]),\n parseFloat(rgb[1]),\n parseFloat(rgb[2])\n ];\n // TODO auto detect big values?\n // if (this.options && this.options.normalizeRGB) {\n // value = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n // }\n\n // if (this.options && this.options.ignoreZeroRGBs) {\n // if (value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0) {\n // // ignore\n // save = false;\n // }\n // }\n return color;\n}\n\n/* TODO parse url options\nfunction parseTexture(value, matParams) {\n const texParams = {\n scale: new Vector2(1, 1),\n offset: new Vector2(0, 0)\n };\n\n const items = value.split(/\\s+/);\n let pos;\n\n pos = items.indexOf('-bm');\n if (pos >= 0) {\n matParams.bumpScale = parseFloat(items[ pos + 1 ]);\n items.splice(pos, 2);\n }\n\n pos = items.indexOf('-s');\n if (pos >= 0) {\n texParams.scale.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));\n items.splice(pos, 4); // we expect 3 parameters here!\n\n }\n\n pos = items.indexOf('-o');\n\n if (pos >= 0) {\n texParams.offset.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));\n items.splice(pos, 4); // we expect 3 parameters here!\n }\n\n texParams.url = items.join(' ').trim();\n return texParams;\n}\n\n *function resolveURL(baseUrl, url) {\n * baseUrl?: string;\n // Absolute URL\n if (/^https?:\\/\\//i.test(url)) return url;\n return baseUrl + url;\n }\n\n function setMapForType(mapType, value) {\n if (params[ mapType ]) return; // Keep the first encountered texture\n\n const texParams = scope.getTextureParams(value, params);\n const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));\n\n map.repeat.copy(texParams.scale);\n map.offset.copy(texParams.offset);\n\n map.wrapS = scope.wrap;\n map.wrapT = scope.wrap;\n\n params[ mapType ] = map;\n }\n*/\n"],"mappings":"AAsBA,MAAMA,iBAAiB,GAAG,KAAK;AAuB/B,OAAO,SAASC,QAAQA,CAACC,IAAY,EAAEC,OAAyB,EAAiB;EAE/E,MAAMC,SAAwB,GAAG,EAAE;EAEnC,IAAIC,eAA4B,GAAG;IAACC,IAAI,EAAE;EAAa,CAAC;EAExD,MAAMC,KAAK,GAAGL,IAAI,CAACM,KAAK,CAAC,IAAI,CAAC;EAC9B,KAAK,IAAIC,IAAI,IAAIF,KAAK,EAAE;IACtBE,IAAI,GAAGA,IAAI,CAACC,IAAI,CAAC,CAAC;IAElB,IAAID,IAAI,CAACE,MAAM,KAAK,CAAC,IAAIF,IAAI,CAACG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MAE/C;IACF;IAEA,MAAMC,GAAG,GAAGJ,IAAI,CAACK,OAAO,CAAC,GAAG,CAAC;IAE7B,IAAIC,GAAG,GAAGF,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAAC,CAAC,EAAEH,GAAG,CAAC,GAAGJ,IAAI;IAClDM,GAAG,GAAGA,GAAG,CAACE,WAAW,CAAC,CAAC;IAEvB,IAAIC,KAAK,GAAGL,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAACH,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;IACnDK,KAAK,GAAGA,KAAK,CAACR,IAAI,CAAC,CAAC;IAEpB,QAAQK,GAAG;MACT,KAAK,QAAQ;QAEXV,eAAe,GAAG;UAACC,IAAI,EAAEY;QAAK,CAAC;QAE/Bd,SAAS,CAACe,IAAI,CAACd,eAAe,CAAC;QAC/B;MAEF,KAAK,IAAI;QACPA,eAAe,CAACe,YAAY,GAAGC,UAAU,CAACH,KAAK,CAAC;QAChD;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACiB,YAAY,GAAGD,UAAU,CAACH,KAAK,CAAC;QAChD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACkB,iBAAiB,GAAGL,KAAK;QAEzC;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACmB,aAAa,GAAGH,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACoB,kBAAkB,GAAGP,KAAK;QAE1C;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACqB,aAAa,GAAGL,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACsB,kBAAkB,GAAGT,KAAK;QAE1C;MAEF,KAAK,IAAI;QAGPb,eAAe,CAACuB,SAAS,GAAGC,UAAU,CAACX,KAAK,CAAC;QAC7C;MACF,KAAK,QAAQ;QAIX;MACF,KAAK,IAAI;QACPb,eAAe,CAACyB,UAAU,GAAGD,UAAU,CAACX,KAAK,CAAC;QAC9C;MACF,KAAK,OAAO;QACVb,eAAe,CAAC0B,YAAY,GAAGF,UAAU,CAACX,KAAK,CAAC;QAChD;MAEF;QAEE;IAmCJ;EACF;EAEA,OAAOd,SAAS;AAClB;AAEA,SAASiB,UAAUA,CAACH,KAAa,EAAEf,OAAyB,EAA4B;EACtF,MAAM6B,GAAG,GAAGd,KAAK,CAACV,KAAK,CAACR,iBAAiB,EAAE,CAAC,CAAC;EAC7C,MAAMiC,KAA+B,GAAG,CACtCJ,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,CACnB;EAYD,OAAOC,KAAK;AACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"mtl-loader.d.ts","sourceRoot":"","sources":["../src/mtl-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAMlE,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,CAYjE,CAAC"}
1
+ {"version":3,"file":"mtl-loader.d.ts","sourceRoot":"","sources":["../src/mtl-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAMlE,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,CAYjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mtl-loader.js","names":["VERSION","__VERSION__","MTLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","text","includes","options","mtl"],"sources":["../src/mtl-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {MTLMaterial, ParseMTLOptions} from './lib/parse-mtl';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type MTLLoaderOptions = LoaderOptions & {\n mtl?: ParseMTLOptions;\n};\n\n/**\n * Loader for the MTL material format\n * Parses a Wavefront .mtl file specifying materials\n */\nexport const MTLLoader: Loader<MTLMaterial[], never, LoaderOptions> = {\n name: 'MTL',\n id: 'mtl',\n module: 'mtl',\n version: VERSION,\n worker: true,\n extensions: ['mtl'],\n mimeTypes: ['text/plain'],\n testText: (text: string): boolean => text.includes('newmtl'),\n options: {\n mtl: {}\n }\n};\n"],"mappings":"AAMA,MAAMA,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAU3E,OAAO,MAAMC,SAAsD,GAAG;EACpEC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAGC,IAAY,IAAcA,IAAI,CAACC,QAAQ,CAAC,QAAQ,CAAC;EAC5DC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC"}
1
+ {"version":3,"file":"mtl-loader.js","names":["VERSION","__VERSION__","MTLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","text","includes","options","mtl"],"sources":["../src/mtl-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {MTLMaterial, ParseMTLOptions} from './lib/parse-mtl';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type MTLLoaderOptions = LoaderOptions & {\n mtl?: ParseMTLOptions;\n};\n\n/**\n * Loader for the MTL material format\n * Parses a Wavefront .mtl file specifying materials\n */\nexport const MTLLoader: Loader<MTLMaterial[], never, LoaderOptions> = {\n name: 'MTL',\n id: 'mtl',\n module: 'mtl',\n version: VERSION,\n worker: true,\n extensions: ['mtl'],\n mimeTypes: ['text/plain'],\n testText: (text: string): boolean => text.includes('newmtl'),\n options: {\n mtl: {}\n }\n};\n"],"mappings":"AAOA,MAAMA,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAU3E,OAAO,MAAMC,SAAsD,GAAG;EACpEC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAGC,IAAY,IAAcA,IAAI,CAACC,QAAQ,CAAC,QAAQ,CAAC;EAC5DC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC"}
@@ -741,7 +741,7 @@
741
741
  }
742
742
 
743
743
  // src/obj-loader.ts
744
- var VERSION = true ? "4.0.0-beta.6" : "latest";
744
+ var VERSION = true ? "4.0.0-beta.8" : "latest";
745
745
  var OBJLoader = {
746
746
  name: "OBJ",
747
747
  id: "obj",
@@ -829,7 +829,7 @@
829
829
  }
830
830
 
831
831
  // src/mtl-loader.ts
832
- var VERSION2 = true ? "4.0.0-beta.6" : "latest";
832
+ var VERSION2 = true ? "4.0.0-beta.8" : "latest";
833
833
  var MTLLoader = {
834
834
  name: "MTL",
835
835
  id: "mtl",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/obj",
3
- "version": "4.0.0-beta.6",
3
+ "version": "4.0.0-beta.8",
4
4
  "description": "Framework-independent loader for the OBJ format",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -42,8 +42,8 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@babel/runtime": "^7.3.1",
45
- "@loaders.gl/loader-utils": "4.0.0-beta.6",
46
- "@loaders.gl/schema": "4.0.0-beta.6"
45
+ "@loaders.gl/loader-utils": "4.0.0-beta.8",
46
+ "@loaders.gl/schema": "4.0.0-beta.8"
47
47
  },
48
- "gitHead": "2840f605b7a551e2ffef5f960231d989a0414c50"
48
+ "gitHead": "ec3d1747b4c01c52a235455d6462680e711b4e19"
49
49
  }
@@ -1,4 +1,5 @@
1
1
  // loaders.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
2
3
 
3
4
  import type {Schema, SchemaMetadata, Field, MeshAttribute} from '@loaders.gl/schema';
4
5
  import {getDataTypeFromArray} from '@loaders.gl/schema';
@@ -1,4 +1,5 @@
1
1
  // loaders.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
2
3
  // Forked from THREE.js under MIT license
3
4
  // https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js
4
5
 
package/src/mtl-loader.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  // loaders.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
2
3
  import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';
3
4
  import type {MTLMaterial, ParseMTLOptions} from './lib/parse-mtl';
4
5