@loaders.gl/obj 4.0.0-alpha.4 → 4.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +2 -2
- package/dist/dist.min.js +744 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/index.js +74 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/get-obj-schema.js +54 -0
- package/dist/es5/lib/get-obj-schema.js.map +1 -0
- package/dist/es5/lib/obj-types.js +2 -0
- package/dist/es5/lib/obj-types.js.map +1 -0
- package/dist/es5/lib/parse-mtl.js +86 -0
- package/dist/es5/lib/parse-mtl.js.map +1 -0
- package/dist/es5/lib/parse-obj-meshes.js +486 -0
- package/dist/es5/lib/parse-obj-meshes.js.map +1 -0
- package/dist/es5/lib/parse-obj.js +100 -0
- package/dist/es5/lib/parse-obj.js.map +1 -0
- package/dist/es5/mtl-loader.js +26 -0
- package/dist/es5/mtl-loader.js.map +1 -0
- package/dist/es5/obj-loader.js +27 -0
- package/dist/es5/obj-loader.js.map +1 -0
- package/dist/es5/workers/obj-worker.js +6 -0
- package/dist/es5/workers/obj-worker.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/get-obj-schema.js +49 -0
- package/dist/esm/lib/get-obj-schema.js.map +1 -0
- package/dist/esm/lib/obj-types.js +2 -0
- package/dist/esm/lib/obj-types.js.map +1 -0
- package/dist/esm/lib/parse-mtl.js +68 -0
- package/dist/esm/lib/parse-mtl.js.map +1 -0
- package/dist/esm/lib/parse-obj-meshes.js +385 -0
- package/dist/esm/lib/parse-obj-meshes.js.map +1 -0
- package/dist/{lib/load-obj.js → esm/lib/parse-obj.js} +5 -15
- package/dist/esm/lib/parse-obj.js.map +1 -0
- package/dist/esm/mtl-loader.js +16 -0
- package/dist/esm/mtl-loader.js.map +1 -0
- package/dist/esm/obj-loader.js +19 -0
- package/dist/esm/obj-loader.js.map +1 -0
- package/dist/esm/workers/obj-worker.js +4 -0
- package/dist/esm/workers/obj-worker.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -8
- package/dist/lib/get-obj-schema.d.ts +4 -0
- package/dist/lib/get-obj-schema.d.ts.map +1 -0
- package/dist/lib/get-obj-schema.js +33 -33
- package/dist/lib/obj-types.d.ts +1 -0
- package/dist/lib/obj-types.d.ts.map +1 -0
- package/dist/lib/obj-types.js +1 -2
- 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 +3 -0
- package/dist/lib/parse-obj.d.ts.map +1 -0
- package/dist/lib/parse-obj.js +63 -449
- package/dist/mtl-loader.d.ts +12 -0
- package/dist/mtl-loader.d.ts.map +1 -0
- package/dist/mtl-loader.js +24 -0
- package/dist/obj-loader.d.ts +11 -0
- package/dist/obj-loader.d.ts.map +1 -0
- package/dist/obj-loader.js +24 -18
- package/dist/obj-worker.js +213 -507
- package/dist/workers/obj-worker.d.ts +2 -0
- package/dist/workers/obj-worker.d.ts.map +1 -0
- package/dist/workers/obj-worker.js +5 -4
- package/package.json +9 -9
- package/src/index.ts +25 -4
- package/src/lib/get-obj-schema.ts +24 -20
- package/src/lib/parse-mtl.ts +246 -0
- package/src/lib/parse-obj-meshes.ts +525 -0
- package/src/lib/parse-obj.ts +67 -508
- package/src/mtl-loader.ts +31 -0
- package/src/obj-loader.ts +8 -3
- package/dist/bundle.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/get-obj-schema.js.map +0 -1
- package/dist/lib/load-obj.js.map +0 -1
- package/dist/lib/obj-types.js.map +0 -1
- package/dist/lib/parse-obj.js.map +0 -1
- package/dist/obj-loader.js.map +0 -1
- package/src/lib/load-obj.ts +0 -83
- /package/src/workers/{obj-worker.js → obj-worker.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obj-worker.d.ts","sourceRoot":"","sources":["../../src/workers/obj-worker.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
(0, loader_utils_1.createLoaderWorker)(index_1.OBJLoader);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/obj",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.6",
|
|
4
4
|
"description": "Framework-independent loader for the OBJ format",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"point cloud",
|
|
19
19
|
"OBJ"
|
|
20
20
|
],
|
|
21
|
-
"types": "
|
|
22
|
-
"main": "dist/index.js",
|
|
23
|
-
"module": "dist/index.js",
|
|
21
|
+
"types": "dist/index.d.ts",
|
|
22
|
+
"main": "dist/es5/index.js",
|
|
23
|
+
"module": "dist/esm/index.js",
|
|
24
24
|
"sideEffects": false,
|
|
25
25
|
"files": [
|
|
26
26
|
"src",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
],
|
|
30
30
|
"scripts": {
|
|
31
31
|
"pre-build": "npm run build-worker && npm run build-bundle",
|
|
32
|
-
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/
|
|
33
|
-
"build-worker": "esbuild src/workers/obj-worker.
|
|
32
|
+
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js",
|
|
33
|
+
"build-worker": "esbuild src/workers/obj-worker.ts --bundle --outfile=dist/obj-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@babel/runtime": "^7.3.1",
|
|
37
|
-
"@loaders.gl/loader-utils": "4.0.0-alpha.
|
|
38
|
-
"@loaders.gl/schema": "4.0.0-alpha.
|
|
37
|
+
"@loaders.gl/loader-utils": "4.0.0-alpha.6",
|
|
38
|
+
"@loaders.gl/schema": "4.0.0-alpha.6"
|
|
39
39
|
},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "acc1985050dfaa0f1f0c066f8da5bce7454a046c"
|
|
41
41
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
2
|
-
import
|
|
2
|
+
import type {Mesh} from '@loaders.gl/schema';
|
|
3
|
+
import {parseOBJ} from './lib/parse-obj';
|
|
4
|
+
import type {OBJLoaderOptions} from './obj-loader';
|
|
3
5
|
import {OBJLoader as OBJWorkerLoader} from './obj-loader';
|
|
4
6
|
|
|
7
|
+
import type {MTLMaterial} from './lib/parse-mtl';
|
|
8
|
+
import {parseMTL} from './lib/parse-mtl';
|
|
9
|
+
import type {MTLLoaderOptions} from './mtl-loader';
|
|
10
|
+
import {MTLLoader as MTLWorkerLoader} from './mtl-loader';
|
|
11
|
+
|
|
5
12
|
// OBJLoader
|
|
6
13
|
|
|
7
14
|
export {OBJWorkerLoader};
|
|
@@ -9,10 +16,24 @@ export {OBJWorkerLoader};
|
|
|
9
16
|
/**
|
|
10
17
|
* Loader for the OBJ geometry format
|
|
11
18
|
*/
|
|
12
|
-
export const OBJLoader = {
|
|
19
|
+
export const OBJLoader: LoaderWithParser<Mesh, never, OBJLoaderOptions> = {
|
|
13
20
|
...OBJWorkerLoader,
|
|
14
|
-
parse: async (arrayBuffer, options) =>
|
|
15
|
-
|
|
21
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>
|
|
22
|
+
parseOBJ(new TextDecoder().decode(arrayBuffer), options),
|
|
23
|
+
parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// MTLLoader
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Loader for the MTL material format
|
|
30
|
+
*/
|
|
31
|
+
export const MTLLoader: LoaderWithParser<MTLMaterial[], never, MTLLoaderOptions> = {
|
|
32
|
+
...MTLWorkerLoader,
|
|
33
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>
|
|
34
|
+
parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
|
|
35
|
+
parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)
|
|
16
36
|
};
|
|
17
37
|
|
|
18
38
|
export const _typecheckOBJLoader: LoaderWithParser = OBJLoader;
|
|
39
|
+
export const _typecheckMTLLoader: LoaderWithParser = MTLLoader;
|
|
@@ -1,39 +1,43 @@
|
|
|
1
|
-
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import type {Schema, SchemaMetadata, Field, MeshAttribute} from '@loaders.gl/schema';
|
|
4
|
+
import {getDataTypeFromArray} from '@loaders.gl/schema';
|
|
5
|
+
|
|
6
|
+
/** Get Mesh Schema */
|
|
7
|
+
export function getOBJSchema(
|
|
8
|
+
attributes: Record<string, MeshAttribute>,
|
|
9
|
+
metadata: Record<string, unknown> = {}
|
|
10
|
+
): Schema {
|
|
11
|
+
const stringMetadata: SchemaMetadata = {};
|
|
5
12
|
for (const key in metadata) {
|
|
6
|
-
metadataMap = metadataMap || new Map();
|
|
7
13
|
if (key !== 'value') {
|
|
8
|
-
|
|
14
|
+
stringMetadata[key] = JSON.stringify(metadata[key]);
|
|
9
15
|
}
|
|
10
16
|
}
|
|
11
17
|
|
|
12
18
|
const fields: Field[] = [];
|
|
13
19
|
for (const attributeName in attributes) {
|
|
14
20
|
const attribute = attributes[attributeName];
|
|
15
|
-
const field =
|
|
21
|
+
const field = getFieldFromAttribute(attributeName, attribute);
|
|
16
22
|
fields.push(field);
|
|
17
23
|
}
|
|
18
|
-
|
|
24
|
+
|
|
25
|
+
return {fields, metadata: stringMetadata};
|
|
19
26
|
}
|
|
20
27
|
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
/** Get a Field describing the column from an OBJ attribute */
|
|
29
|
+
function getFieldFromAttribute(name: string, attribute: MeshAttribute): Field {
|
|
30
|
+
const metadata: Record<string, string> = {};
|
|
23
31
|
for (const key in attribute) {
|
|
24
32
|
if (key !== 'value') {
|
|
25
|
-
|
|
33
|
+
metadata[key] = JSON.stringify(attribute[key]);
|
|
26
34
|
}
|
|
27
35
|
}
|
|
28
36
|
|
|
29
|
-
|
|
30
|
-
const isSingleValue =
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
new FixedSizeList(attribute.size, new Field('value', type)),
|
|
36
|
-
false,
|
|
37
|
-
metadataMap
|
|
38
|
-
);
|
|
37
|
+
let {type} = getDataTypeFromArray(attribute.value);
|
|
38
|
+
const isSingleValue = attribute.size === 1 || attribute.size === undefined;
|
|
39
|
+
if (!isSingleValue) {
|
|
40
|
+
type = {type: 'fixed-size-list', listSize: attribute.size, children: [{name: 'values', type}]};
|
|
41
|
+
}
|
|
42
|
+
return {name, type, nullable: false, metadata};
|
|
39
43
|
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
// Forked from THREE.js under MIT license
|
|
3
|
+
// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js
|
|
4
|
+
|
|
5
|
+
// import type {DiffuseMaterial} from '@loaders.gl/schema';
|
|
6
|
+
|
|
7
|
+
export type MTLMaterial = {
|
|
8
|
+
name: string;
|
|
9
|
+
ambientColor?: [number, number, number];
|
|
10
|
+
diffuseColor?: [number, number, number];
|
|
11
|
+
specularColor?: [number, number, number];
|
|
12
|
+
emissiveColor?: [number, number, number];
|
|
13
|
+
// specular?: number;
|
|
14
|
+
shininess?: number;
|
|
15
|
+
refraction?: number;
|
|
16
|
+
illumination?: number;
|
|
17
|
+
diffuseTextureUrl?: string;
|
|
18
|
+
emissiveTextureUrl?: string;
|
|
19
|
+
specularTextureUrl?: string;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const DELIMITER_PATTERN = /\s+/;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Set of options on how to construct materials
|
|
26
|
+
* @param normalizeRGB: RGBs need to be normalized to 0-1 from 0-255 (Default: false, assumed to be already normalized)
|
|
27
|
+
* @param ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's Default: false
|
|
28
|
+
* @param baseUrl - Url relative to which textures are loaded
|
|
29
|
+
*/
|
|
30
|
+
export type ParseMTLOptions = {
|
|
31
|
+
normalizeRGB?: boolean;
|
|
32
|
+
ignoreZeroRGBs?: boolean;
|
|
33
|
+
baseUrl?: string;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Parses a MTL file.
|
|
38
|
+
* Parses a Wavefront .mtl file specifying materials
|
|
39
|
+
* http://paulbourke.net/dataformats/mtl/
|
|
40
|
+
* https://www.loc.gov/preservation/digital/formats/fdd/fdd000508.shtml
|
|
41
|
+
*
|
|
42
|
+
* @param text - Content of MTL file
|
|
43
|
+
*/
|
|
44
|
+
// eslint-disable-next-line complexity
|
|
45
|
+
export function parseMTL(text: string, options?: ParseMTLOptions): MTLMaterial[] {
|
|
46
|
+
// const materialsInfo: Record<string, MTLMaterial> = {};
|
|
47
|
+
const materials: MTLMaterial[] = [];
|
|
48
|
+
|
|
49
|
+
let currentMaterial: MTLMaterial = {name: 'placeholder'};
|
|
50
|
+
|
|
51
|
+
const lines = text.split('\n');
|
|
52
|
+
for (let line of lines) {
|
|
53
|
+
line = line.trim();
|
|
54
|
+
|
|
55
|
+
if (line.length === 0 || line.charAt(0) === '#') {
|
|
56
|
+
// Blank line or comment ignore
|
|
57
|
+
continue; // eslint-disable-line no-continue
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const pos = line.indexOf(' ');
|
|
61
|
+
|
|
62
|
+
let key = pos >= 0 ? line.substring(0, pos) : line;
|
|
63
|
+
key = key.toLowerCase();
|
|
64
|
+
|
|
65
|
+
let value = pos >= 0 ? line.substring(pos + 1) : '';
|
|
66
|
+
value = value.trim();
|
|
67
|
+
|
|
68
|
+
switch (key) {
|
|
69
|
+
case 'newmtl':
|
|
70
|
+
// New material
|
|
71
|
+
currentMaterial = {name: value};
|
|
72
|
+
// insert into map
|
|
73
|
+
materials.push(currentMaterial);
|
|
74
|
+
break;
|
|
75
|
+
|
|
76
|
+
case 'ka': // Ka
|
|
77
|
+
currentMaterial.ambientColor = parseColor(value);
|
|
78
|
+
break;
|
|
79
|
+
|
|
80
|
+
case 'kd':
|
|
81
|
+
// Kd: Diffuse color (color under white light) using RGB values
|
|
82
|
+
currentMaterial.diffuseColor = parseColor(value);
|
|
83
|
+
break;
|
|
84
|
+
case 'map_kd':
|
|
85
|
+
// Diffuse texture map
|
|
86
|
+
currentMaterial.diffuseTextureUrl = value;
|
|
87
|
+
// setMapForType('map', value);
|
|
88
|
+
break;
|
|
89
|
+
|
|
90
|
+
case 'ks':
|
|
91
|
+
// Specular color (color when light is reflected from shiny surface) using RGB values
|
|
92
|
+
currentMaterial.specularColor = parseColor(value);
|
|
93
|
+
break;
|
|
94
|
+
case 'map_ks':
|
|
95
|
+
// Specular map
|
|
96
|
+
currentMaterial.specularTextureUrl = value;
|
|
97
|
+
// setMapForType('specularMap', value);
|
|
98
|
+
break;
|
|
99
|
+
|
|
100
|
+
case 'ke':
|
|
101
|
+
// Emissive using RGB values
|
|
102
|
+
currentMaterial.emissiveColor = parseColor(value);
|
|
103
|
+
break;
|
|
104
|
+
case 'map_ke':
|
|
105
|
+
// Emissive map
|
|
106
|
+
currentMaterial.emissiveTextureUrl = value;
|
|
107
|
+
// setMapForType('emissiveMap', value);
|
|
108
|
+
break;
|
|
109
|
+
|
|
110
|
+
case 'ns':
|
|
111
|
+
// Ns is material specular exponent (defines the focus of the specular highlight)
|
|
112
|
+
// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.
|
|
113
|
+
currentMaterial.shininess = parseFloat(value);
|
|
114
|
+
break;
|
|
115
|
+
case 'map_ns':
|
|
116
|
+
// Ns is material specular exponent
|
|
117
|
+
// TODO?
|
|
118
|
+
// currentMaterial.shininessMap = parseFloat(value);
|
|
119
|
+
break;
|
|
120
|
+
case 'ni':
|
|
121
|
+
currentMaterial.refraction = parseFloat(value);
|
|
122
|
+
break;
|
|
123
|
+
case 'illum':
|
|
124
|
+
currentMaterial.illumination = parseFloat(value);
|
|
125
|
+
break;
|
|
126
|
+
|
|
127
|
+
default:
|
|
128
|
+
// log unknown message?
|
|
129
|
+
break;
|
|
130
|
+
|
|
131
|
+
/*
|
|
132
|
+
case 'norm':
|
|
133
|
+
setMapForType('normalMap', value);
|
|
134
|
+
break;
|
|
135
|
+
|
|
136
|
+
case 'map_bump':
|
|
137
|
+
case 'bump':
|
|
138
|
+
// Bump texture map
|
|
139
|
+
setMapForType('bumpMap', value);
|
|
140
|
+
break;
|
|
141
|
+
|
|
142
|
+
case 'd':
|
|
143
|
+
n = parseFloat(value);
|
|
144
|
+
if (n < 1) {
|
|
145
|
+
params.opacity = n;
|
|
146
|
+
params.transparent = true;
|
|
147
|
+
}
|
|
148
|
+
break;
|
|
149
|
+
|
|
150
|
+
case 'map_d':
|
|
151
|
+
// Alpha map
|
|
152
|
+
setMapForType('alphaMap', value);
|
|
153
|
+
params.transparent = true;
|
|
154
|
+
break;
|
|
155
|
+
|
|
156
|
+
case 'tr':
|
|
157
|
+
n = parseFloat(value);
|
|
158
|
+
if (this.options && this.options.invertTrProperty) n = 1 - n;
|
|
159
|
+
if (n > 0) {
|
|
160
|
+
params.opacity = 1 - n;
|
|
161
|
+
params.transparent = true;
|
|
162
|
+
}
|
|
163
|
+
*/
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return materials;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function parseColor(value: string, options?: ParseMTLOptions): [number, number, number] {
|
|
171
|
+
const rgb = value.split(DELIMITER_PATTERN, 3);
|
|
172
|
+
const color: [number, number, number] = [
|
|
173
|
+
parseFloat(rgb[0]),
|
|
174
|
+
parseFloat(rgb[1]),
|
|
175
|
+
parseFloat(rgb[2])
|
|
176
|
+
];
|
|
177
|
+
// TODO auto detect big values?
|
|
178
|
+
// if (this.options && this.options.normalizeRGB) {
|
|
179
|
+
// value = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];
|
|
180
|
+
// }
|
|
181
|
+
|
|
182
|
+
// if (this.options && this.options.ignoreZeroRGBs) {
|
|
183
|
+
// if (value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0) {
|
|
184
|
+
// // ignore
|
|
185
|
+
// save = false;
|
|
186
|
+
// }
|
|
187
|
+
// }
|
|
188
|
+
return color;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* TODO parse url options
|
|
192
|
+
function parseTexture(value, matParams) {
|
|
193
|
+
const texParams = {
|
|
194
|
+
scale: new Vector2(1, 1),
|
|
195
|
+
offset: new Vector2(0, 0)
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
const items = value.split(/\s+/);
|
|
199
|
+
let pos;
|
|
200
|
+
|
|
201
|
+
pos = items.indexOf('-bm');
|
|
202
|
+
if (pos >= 0) {
|
|
203
|
+
matParams.bumpScale = parseFloat(items[ pos + 1 ]);
|
|
204
|
+
items.splice(pos, 2);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
pos = items.indexOf('-s');
|
|
208
|
+
if (pos >= 0) {
|
|
209
|
+
texParams.scale.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));
|
|
210
|
+
items.splice(pos, 4); // we expect 3 parameters here!
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
pos = items.indexOf('-o');
|
|
215
|
+
|
|
216
|
+
if (pos >= 0) {
|
|
217
|
+
texParams.offset.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));
|
|
218
|
+
items.splice(pos, 4); // we expect 3 parameters here!
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
texParams.url = items.join(' ').trim();
|
|
222
|
+
return texParams;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
*function resolveURL(baseUrl, url) {
|
|
226
|
+
* baseUrl?: string;
|
|
227
|
+
// Absolute URL
|
|
228
|
+
if (/^https?:\/\//i.test(url)) return url;
|
|
229
|
+
return baseUrl + url;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function setMapForType(mapType, value) {
|
|
233
|
+
if (params[ mapType ]) return; // Keep the first encountered texture
|
|
234
|
+
|
|
235
|
+
const texParams = scope.getTextureParams(value, params);
|
|
236
|
+
const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));
|
|
237
|
+
|
|
238
|
+
map.repeat.copy(texParams.scale);
|
|
239
|
+
map.offset.copy(texParams.offset);
|
|
240
|
+
|
|
241
|
+
map.wrapS = scope.wrap;
|
|
242
|
+
map.wrapT = scope.wrap;
|
|
243
|
+
|
|
244
|
+
params[ mapType ] = map;
|
|
245
|
+
}
|
|
246
|
+
*/
|