@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.3.3 → 3.3.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/package.json +19 -20
- package/src/RenderingEngine.ts +0 -1336
- package/src/index.ts +0 -81
- package/src/injectors/Tag3dGeometryCreationInjector.ts +0 -154
- package/src/injectors/TextureUnifierInjector.ts +0 -214
- package/src/interfaces/ILoader.ts +0 -3
- package/src/interfaces/IPostProcessingEffectDefinitions.ts +0 -402
- package/src/interfaces/IRenderingEngine.ts +0 -48
- package/src/loaders/EnvironmentMapLoader.ts +0 -357
- package/src/loaders/GeometryLoader.ts +0 -585
- package/src/loaders/HTMLElementAnchorLoader.ts +0 -107
- package/src/loaders/LightLoader.ts +0 -171
- package/src/loaders/MaterialLoader.ts +0 -1413
- package/src/managers/CameraManager.ts +0 -178
- package/src/managers/EnvironmentGeometryManager.ts +0 -224
- package/src/managers/PostProcessingManager.ts +0 -1181
- package/src/managers/RenderingManager.ts +0 -657
- package/src/managers/SceneTracingManager.ts +0 -127
- package/src/managers/SceneTreeManager.ts +0 -576
- package/src/managers/postprocessing/GodRaysManager.ts +0 -52
- package/src/managers/postprocessing/OutlineManager.ts +0 -58
- package/src/managers/postprocessing/SSAARenderPass.ts +0 -339
- package/src/managers/postprocessing/SelectiveBloomManager.ts +0 -58
- package/src/managers/postprocessing/ao/ao/AOEffect.ts +0 -180
- package/src/managers/postprocessing/ao/ao/AOPass.ts +0 -128
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.glsl +0 -17
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.ts +0 -19
- package/src/managers/postprocessing/ao/hbao/HBAOEffect.ts +0 -41
- package/src/managers/postprocessing/ao/hbao/shader/hbao.glsl +0 -96
- package/src/managers/postprocessing/ao/hbao/shader/hbao.ts +0 -98
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.glsl +0 -92
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.ts +0 -95
- package/src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts +0 -259
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.glsl +0 -125
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts +0 -127
- package/src/managers/postprocessing/ao/ssao/SSAOEffect.ts +0 -106
- package/src/managers/postprocessing/ao/ssao/shader/ssao.glsl +0 -128
- package/src/managers/postprocessing/ao/ssao/shader/ssao.ts +0 -130
- package/src/managers/postprocessing/ao/utils/shader/basic.glsl +0 -6
- package/src/managers/postprocessing/ao/utils/shader/basic.ts +0 -8
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.glsl +0 -36
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts +0 -38
- package/src/managers/postprocessing/utils/CopyMaterial.ts +0 -130
- package/src/managers/postprocessing/utils/CopyShader.ts +0 -39
- package/src/managers/postprocessing/utils/FullScreenQuad.ts +0 -47
- package/src/managers/postprocessing/utils/NormalPass.ts +0 -222
- package/src/managers/postprocessing/utils/RenderPass.ts +0 -366
- package/src/materials/GemMaterial.ts +0 -268
- package/src/materials/MeshUnlitMaterialParameters.ts +0 -4
- package/src/materials/MultiPointsMaterial.ts +0 -646
- package/src/materials/SpecularGlossinessMaterial.ts +0 -182
- package/src/objects/SDBone.ts +0 -51
- package/src/objects/SDColor.ts +0 -54
- package/src/objects/SDData.ts +0 -44
- package/src/objects/SDObject.ts +0 -58
- package/src/shaders/PCSS.ts +0 -124
- package/src/shaders/gem.ts +0 -579
- package/src/shaders/gem_frag.glsl +0 -522
- package/src/shaders/gem_vert.glsl +0 -53
- package/src/shaders/multi_points.ts +0 -291
- package/src/shaders/multi_points_frag.glsl +0 -166
- package/src/shaders/multi_points_vert.glsl +0 -120
- package/src/styling/viewport-css.ts +0 -113
- package/src/styling/viewport.css +0 -111
- package/src/three/font.ts +0 -2
- package/src/three/geometries/TextGeometry.ts +0 -58
- package/src/three/loaders/FontLoader.ts +0 -205
- package/src/three/loaders/RGBELoader.ts +0 -496
- package/src/types/IThreejsData.ts +0 -16
- package/src/types/ThreejsData.ts +0 -43
- package/tsconfig.json +0 -20
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
-
/* eslint-disable no-async-promise-executor */
|
|
3
|
-
import * as THREE from 'three';
|
|
4
|
-
import { Logger, EventEngine, EVENTTYPE, StateEngine, StatePromise, ShapeDiverViewerEnvironmentMapError, HttpClient, HttpResponse, Converter, UuidGenerator } from '@shapediver/viewer.shared.services';
|
|
5
|
-
|
|
6
|
-
import { RenderingEngine } from '..';
|
|
7
|
-
import { RGBELoader } from '../three/loaders/RGBELoader';
|
|
8
|
-
import { ILoader } from '../interfaces/ILoader';
|
|
9
|
-
import { ITaskEvent, TASK_TYPE } from '@shapediver/viewer.shared.types';
|
|
10
|
-
|
|
11
|
-
export enum ENVIRONMENT_MAP_CUBE {
|
|
12
|
-
DEFAULT = 'default',
|
|
13
|
-
DEFAULT_BW = 'default_bw',
|
|
14
|
-
BLURRED_LIGHTS = 'blurred_lights',
|
|
15
|
-
GEORGENTOR = 'georgentor',
|
|
16
|
-
GEORGENTOR_BLUR = 'georgentor_blur',
|
|
17
|
-
GEORGENTOR_BLUE_BLUR = 'georgentor_blue_blur',
|
|
18
|
-
GEORGENTOR_BW_BLUR = 'georgentor_bw_blur',
|
|
19
|
-
LEVELSETS = 'levelsets',
|
|
20
|
-
LYTHWOOD_FIELD = 'lythwood_field',
|
|
21
|
-
MOUNTAINS = 'mountains',
|
|
22
|
-
OCEAN = 'ocean',
|
|
23
|
-
PIAZZA_SAN_MARCO = 'piazza_san_marco',
|
|
24
|
-
RESIDENTIAL_GARDEN = 'residential_garden',
|
|
25
|
-
ROOM_ABSTRACT_1 = 'room_abstract_1',
|
|
26
|
-
SKY = 'sky',
|
|
27
|
-
STORAGE_ROOM = 'storage_room',
|
|
28
|
-
STORM = 'storm',
|
|
29
|
-
SUBWAY_ENTRANCE = 'subway_entrance',
|
|
30
|
-
SUBWAY_ENTRANCE_BW_BLUR = 'subway_entrance_bw_blur',
|
|
31
|
-
WHITE = 'white',
|
|
32
|
-
YOKOHAMA = 'yokohama',
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export enum ENVIRONMENT_MAP {
|
|
36
|
-
ANNIVERSARY_LOUNGE = 'anniversary_lounge',
|
|
37
|
-
BALLROOM = 'ballroom',
|
|
38
|
-
CANNON_EXTERIOR = 'cannon_exterior',
|
|
39
|
-
CAPE_HILL = 'cape_hill',
|
|
40
|
-
CHRISTMAS_PHOTO_STUDIO = 'christmas_photo_studio',
|
|
41
|
-
CIRCUS_MAXIMUS = 'circus_maximus',
|
|
42
|
-
COLORFUL_STUDIO = 'colorful_studio',
|
|
43
|
-
COMBINATION_ROOM = 'combination_room',
|
|
44
|
-
GREEN_POINT_PARK = 'green_point_park',
|
|
45
|
-
HILLTOP_CONSTRUCTION = 'hilltop_construction',
|
|
46
|
-
LARGE_CORRIDOR = 'large_corridor',
|
|
47
|
-
LYTHWOOD_LOUNGE = 'lythwood_lounge',
|
|
48
|
-
NEUTRAL = 'neutral',
|
|
49
|
-
OBERER_KUHBERG = 'oberer_kuhberg',
|
|
50
|
-
OLD_HALL = 'old_hall',
|
|
51
|
-
PAUL_LOBE_HAUS = 'paul_lobe_haus',
|
|
52
|
-
PHOTO_STUDIO = 'photo_studio',
|
|
53
|
-
PHOTO_STUDIO_BROADWAY_HALL = 'photo_studio_broadway_hall',
|
|
54
|
-
SNOWY_FIELD = 'snowy_field',
|
|
55
|
-
STUDIO_SMALL = 'studio_small',
|
|
56
|
-
SUNFLOWERS = 'sunflowers',
|
|
57
|
-
TABLE_MOUNTAIN = 'table_mountain',
|
|
58
|
-
VENICE_SUNSET = 'venice_sunset',
|
|
59
|
-
WIDE_STREET = 'wide_street',
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export enum ENVIRONMENT_MAP_EMPTY {
|
|
63
|
-
NONE = 'none',
|
|
64
|
-
NULL = 'null'
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export enum ENVIRONMENT_MAP_TYPE {
|
|
68
|
-
LDR = 'ldr',
|
|
69
|
-
HDR = 'hdr',
|
|
70
|
-
NONE = 'none',
|
|
71
|
-
NULL = 'null'
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export class EnvironmentMapLoader implements ILoader {
|
|
75
|
-
// #region Properties (15)
|
|
76
|
-
|
|
77
|
-
private readonly _environmentMapFilenames = ['px', 'nx', 'pz', 'nz', 'py', 'ny'];
|
|
78
|
-
private readonly _environmentMapHDR: string[] = [];
|
|
79
|
-
private readonly _environmentMapNamesHDR = Object.values(ENVIRONMENT_MAP).filter(value => typeof value === 'string') as string[];
|
|
80
|
-
private readonly _environmentMapNamesHDRKhronos = ['cannon_exterior', 'colorful_studio', 'neutral', 'wide_street'];
|
|
81
|
-
private readonly _environmentMapNamesJPG = ['default', 'default_bw', 'blurred_lights', 'georgentor', 'georgentor_blur', 'georgentor_blue_blur', 'georgentor_bw_blur', 'levelsets', 'lythwood_field', 'mountains', 'ocean', 'piazza_san_marco', 'residential_garden', 'room_abstract_1', 'sky', 'storage_room', 'storm', 'subway_entrance', 'subway_entrance_bw_blur', 'white', 'yokohama'];
|
|
82
|
-
private readonly _environmentMaps: {
|
|
83
|
-
[key: string]: {
|
|
84
|
-
name: string,
|
|
85
|
-
map: Promise<THREE.CubeTexture | THREE.Texture | null>,
|
|
86
|
-
type: ENVIRONMENT_MAP_TYPE,
|
|
87
|
-
resolved?: boolean
|
|
88
|
-
}
|
|
89
|
-
} = {};
|
|
90
|
-
private readonly _eventEngine: EventEngine = EventEngine.instance;
|
|
91
|
-
private readonly _httpClient: HttpClient = HttpClient.instance;
|
|
92
|
-
private readonly _stateEngine: StateEngine = StateEngine.instance;
|
|
93
|
-
private readonly _uuidGenerator: UuidGenerator = UuidGenerator.instance;
|
|
94
|
-
|
|
95
|
-
private _envMap: THREE.CubeTexture | THREE.Texture | null = null;
|
|
96
|
-
private _isHDRMap: boolean = false;
|
|
97
|
-
private _pmremGenerator!: THREE.PMREMGenerator;
|
|
98
|
-
private _textureEncoding: THREE.ColorSpace = THREE.SRGBColorSpace;
|
|
99
|
-
private _type: ENVIRONMENT_MAP_TYPE = ENVIRONMENT_MAP_TYPE.NULL;
|
|
100
|
-
|
|
101
|
-
// #endregion Properties (15)
|
|
102
|
-
|
|
103
|
-
// #region Constructors (1)
|
|
104
|
-
|
|
105
|
-
constructor(private readonly _renderingEngine: RenderingEngine) { }
|
|
106
|
-
|
|
107
|
-
// #endregion Constructors (1)
|
|
108
|
-
|
|
109
|
-
// #region Public Accessors (4)
|
|
110
|
-
|
|
111
|
-
public get environmentMap(): THREE.CubeTexture | THREE.Texture | null {
|
|
112
|
-
return this._envMap;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
public get isHDRMap(): boolean {
|
|
116
|
-
return this._isHDRMap;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
public get textureEncoding(): THREE.ColorSpace {
|
|
120
|
-
return this._textureEncoding;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
public set textureEncoding(value: THREE.ColorSpace) {
|
|
124
|
-
this._textureEncoding = value;
|
|
125
|
-
this.assignTextureEncoding();
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// #endregion Public Accessors (4)
|
|
129
|
-
|
|
130
|
-
// #region Public Methods (4)
|
|
131
|
-
|
|
132
|
-
public getEnvironmentMapImageUrl(name: string | string[]): string {
|
|
133
|
-
if (Array.isArray(name)) return '';
|
|
134
|
-
|
|
135
|
-
if (this._environmentMapNamesHDR.indexOf(name) >= 0) {
|
|
136
|
-
let url_hdr = 'https://viewer.shapediver.com/v3/envmaps/1k/' + name + '_1k.hdr';
|
|
137
|
-
if (this._environmentMapNamesHDRKhronos.indexOf(name) >= 0)
|
|
138
|
-
url_hdr = 'https://viewer.shapediver.com/v3/envmaps/khronos/' + name + '.hdr';
|
|
139
|
-
|
|
140
|
-
return url_hdr;
|
|
141
|
-
} else if (name.startsWith('https://') || name.startsWith('http://')) {
|
|
142
|
-
if (name.endsWith('.hdr') || name.endsWith('.jpg') || name.endsWith('.png')) {
|
|
143
|
-
return name;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return '';
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
public init(): void {
|
|
150
|
-
this._environmentMaps['null'] = {
|
|
151
|
-
name: 'null',
|
|
152
|
-
map: Promise.resolve(null),
|
|
153
|
-
type: ENVIRONMENT_MAP_TYPE.NULL
|
|
154
|
-
};
|
|
155
|
-
this._environmentMaps['none'] = {
|
|
156
|
-
name: 'none',
|
|
157
|
-
map: Promise.resolve(null),
|
|
158
|
-
type: ENVIRONMENT_MAP_TYPE.NONE
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
this._pmremGenerator = new THREE.PMREMGenerator(this._renderingEngine.renderer);
|
|
162
|
-
this._pmremGenerator.compileEquirectangularShader();
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
public async load(name: string | string[]): Promise<boolean> {
|
|
166
|
-
const eventId = this._uuidGenerator.create();
|
|
167
|
-
const res = this.loadEnvMap(name, eventId);
|
|
168
|
-
await this.assignEnvironmentMap(res.name, res.type, eventId);
|
|
169
|
-
return Promise.resolve(true);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
public loadEnvMap(name: string | string[], eId?: string): {
|
|
173
|
-
name: string,
|
|
174
|
-
map: Promise<THREE.CubeTexture | THREE.Texture | null>,
|
|
175
|
-
type: ENVIRONMENT_MAP_TYPE
|
|
176
|
-
} {
|
|
177
|
-
const eventId = eId || this._uuidGenerator.create();
|
|
178
|
-
const event: ITaskEvent = { type: TASK_TYPE.ENVIRONMENT_MAP_LOADING, id: eventId, data: { input: name }, progress: 0, status: 'Loading EnvironmentMap' };
|
|
179
|
-
this._eventEngine.emitEvent(EVENTTYPE.TASK.TASK_START, event);
|
|
180
|
-
|
|
181
|
-
if (name === 'none' || name === 'null')
|
|
182
|
-
return this._environmentMaps[name];
|
|
183
|
-
|
|
184
|
-
let name_internal: string, name_caching: string, url: string[];
|
|
185
|
-
|
|
186
|
-
// check if name is a JSON.stringified version of an array of urls
|
|
187
|
-
if (!Array.isArray(name) && (name.startsWith('["https') && name.endsWith('"]')))
|
|
188
|
-
try { name = JSON.parse(name); } catch (e) {
|
|
189
|
-
this.notify(eventId, true);
|
|
190
|
-
throw new ShapeDiverViewerEnvironmentMapError('EnvironmentMapLoader.load: Was not able to load environment map.', name);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// deal with string or array, define names for loading and caching
|
|
194
|
-
if (!Array.isArray(name)) {
|
|
195
|
-
name_internal = name.toLowerCase().replace(/ /g, '_');
|
|
196
|
-
name_caching = name_internal + this._renderingEngine.environmentMapResolution;
|
|
197
|
-
} else {
|
|
198
|
-
if (name.length !== 6) {
|
|
199
|
-
this.notify(eventId, true);
|
|
200
|
-
throw new ShapeDiverViewerEnvironmentMapError('EnvironmentMapLoader.load: Was not able to load environment map, exactly 6 files are needed in the array.', name);
|
|
201
|
-
}
|
|
202
|
-
name_internal = JSON.stringify(name, null, 0);
|
|
203
|
-
name_caching = name_internal;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// check if environment map is already cached
|
|
207
|
-
for (const environmentMap in this._environmentMaps)
|
|
208
|
-
if (environmentMap === name_caching)
|
|
209
|
-
return this._environmentMaps[environmentMap];
|
|
210
|
-
|
|
211
|
-
try {
|
|
212
|
-
// define urls for 6 cube images ourselves
|
|
213
|
-
if (!Array.isArray(name)) {
|
|
214
|
-
url = [];
|
|
215
|
-
let i;
|
|
216
|
-
if (this._environmentMapNamesHDR.indexOf(name_internal) >= 0) {
|
|
217
|
-
let url_hdr = 'https://viewer.shapediver.com/v3/envmaps/1k/' + name_internal + '_1k.hdr';
|
|
218
|
-
if (this._environmentMapNamesHDRKhronos.indexOf(name_internal) >= 0)
|
|
219
|
-
url_hdr = 'https://viewer.shapediver.com/v3/envmaps/khronos/' + name_internal + '.hdr';
|
|
220
|
-
|
|
221
|
-
this._environmentMapHDR.push(url_hdr);
|
|
222
|
-
return this.loadEnvironmentMap(name_caching, url_hdr, eventId);
|
|
223
|
-
} else if (this._environmentMapNamesJPG.indexOf(name_internal) >= 0) {
|
|
224
|
-
// found in list of available environment maps with file type jpg
|
|
225
|
-
for (i = 0; i < this._environmentMapFilenames.length; i++)
|
|
226
|
-
url.push('https://viewer.shapediver.com/v2/envmaps/' + this._renderingEngine.environmentMapResolution + '/' + name_internal + '/' + this._environmentMapFilenames[i] + '.jpg');
|
|
227
|
-
} else if (name.startsWith('https://') || name.startsWith('http://')) {
|
|
228
|
-
if (name.endsWith('.hdr')) {
|
|
229
|
-
this._environmentMapHDR.push(name);
|
|
230
|
-
return this.loadEnvironmentMap(name_caching, name, eventId);
|
|
231
|
-
} else {
|
|
232
|
-
if (!name.endsWith('/'))
|
|
233
|
-
name += '/';
|
|
234
|
-
|
|
235
|
-
for (i = 0; i < this._environmentMapFilenames.length; i++)
|
|
236
|
-
url.push(name + this._environmentMapFilenames[i] + '.jpg');
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
this.notify(eventId, true);
|
|
241
|
-
throw new ShapeDiverViewerEnvironmentMapError('EnvironmentMapLoader.load: Was not able to load environment map, format not supported.', name);
|
|
242
|
-
}
|
|
243
|
-
} else {
|
|
244
|
-
url = name;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
return this.loadEnvironmentMap(name_caching, url, eventId);
|
|
248
|
-
}
|
|
249
|
-
catch (e) {
|
|
250
|
-
this.notify(eventId, true);
|
|
251
|
-
throw e;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// #endregion Public Methods (4)
|
|
256
|
-
|
|
257
|
-
// #region Private Methods (4)
|
|
258
|
-
|
|
259
|
-
private async assignEnvironmentMap(name: string, type: ENVIRONMENT_MAP_TYPE, eventId: string) {
|
|
260
|
-
if (name in this._environmentMaps === false) return;
|
|
261
|
-
this._type = type;
|
|
262
|
-
const map = await this._environmentMaps[name].map;
|
|
263
|
-
this._renderingEngine.materialLoader.assignEnvironmentMap(map, type);
|
|
264
|
-
this._envMap = map;
|
|
265
|
-
this.notify(eventId);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
private assignTextureEncoding() {
|
|
269
|
-
for (const e in this._environmentMaps) {
|
|
270
|
-
if (this._environmentMaps[e]) {
|
|
271
|
-
if (this._environmentMaps[e].resolved === true) {
|
|
272
|
-
this._environmentMaps[e].map.then(m => {
|
|
273
|
-
if (m instanceof THREE.Texture) {
|
|
274
|
-
m.dispose();
|
|
275
|
-
m.colorSpace = this._textureEncoding;
|
|
276
|
-
m.needsUpdate = true;
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
private loadEnvironmentMap(name: string, url: string | string[], eventId: string): {
|
|
285
|
-
name: string,
|
|
286
|
-
map: Promise<THREE.CubeTexture | THREE.Texture | null>,
|
|
287
|
-
type: ENVIRONMENT_MAP_TYPE
|
|
288
|
-
} {
|
|
289
|
-
this._environmentMaps[name] = {
|
|
290
|
-
name,
|
|
291
|
-
type: !Array.isArray(url) ? ENVIRONMENT_MAP_TYPE.HDR : ENVIRONMENT_MAP_TYPE.LDR,
|
|
292
|
-
map: new Promise<THREE.CubeTexture | THREE.Texture | null>(async (resolve, reject) => {
|
|
293
|
-
try {
|
|
294
|
-
if (!Array.isArray(url)) {
|
|
295
|
-
const response: HttpResponse<ArrayBuffer> = await this._httpClient.get(url, undefined, true) as HttpResponse<ArrayBuffer>;
|
|
296
|
-
const arrayBufferView = new Uint8Array(response.data);
|
|
297
|
-
const blob = new Blob([arrayBufferView], { type: response.headers['content-type'] });
|
|
298
|
-
const blobUrl = URL.createObjectURL(blob);
|
|
299
|
-
new RGBELoader().load(blobUrl, (texture) => {
|
|
300
|
-
const map = this._pmremGenerator.fromEquirectangular(texture).texture;
|
|
301
|
-
this._pmremGenerator.dispose();
|
|
302
|
-
map;
|
|
303
|
-
URL.revokeObjectURL(blobUrl);
|
|
304
|
-
this._environmentMaps[name].resolved = true;
|
|
305
|
-
resolve(map);
|
|
306
|
-
},
|
|
307
|
-
() => { },
|
|
308
|
-
(error) => reject(error));
|
|
309
|
-
} else {
|
|
310
|
-
const promises: Promise<HttpResponse<ArrayBuffer>>[] = [];
|
|
311
|
-
url.forEach(u => promises.push(this._httpClient.get(u, undefined, true) as Promise<HttpResponse<ArrayBuffer>>));
|
|
312
|
-
const responses = await Promise.all(promises);
|
|
313
|
-
|
|
314
|
-
const urls = responses.map(response => {
|
|
315
|
-
const arrayBufferView = new Uint8Array(response.data);
|
|
316
|
-
const blob = new Blob([arrayBufferView], { type: response.headers['content-type'] });
|
|
317
|
-
return URL.createObjectURL(blob);
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
new THREE.CubeTextureLoader().load(urls,
|
|
321
|
-
(map: THREE.CubeTexture) => {
|
|
322
|
-
map.colorSpace = THREE.SRGBColorSpace;
|
|
323
|
-
map.format = THREE.RGBAFormat;
|
|
324
|
-
map.mapping = THREE.CubeReflectionMapping;
|
|
325
|
-
urls.forEach(u => URL.revokeObjectURL(u));
|
|
326
|
-
this._environmentMaps[name].resolved = true;
|
|
327
|
-
resolve(map);
|
|
328
|
-
},
|
|
329
|
-
() => { },
|
|
330
|
-
(error) => reject(error));
|
|
331
|
-
}
|
|
332
|
-
} catch (e) {
|
|
333
|
-
this.notify(eventId, true);
|
|
334
|
-
throw e;
|
|
335
|
-
}
|
|
336
|
-
})
|
|
337
|
-
};
|
|
338
|
-
return this._environmentMaps[name];
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
private notify(eventId: string, failed = false) {
|
|
342
|
-
let event: ITaskEvent;
|
|
343
|
-
if (failed) {
|
|
344
|
-
event = { type: TASK_TYPE.ENVIRONMENT_MAP_LOADING, id: eventId, progress: 1, status: 'Loading of EnvironmentMap failed' };
|
|
345
|
-
this._eventEngine.emitEvent(EVENTTYPE.TASK.TASK_CANCEL, event);
|
|
346
|
-
} else {
|
|
347
|
-
event = { type: TASK_TYPE.ENVIRONMENT_MAP_LOADING, id: eventId, progress: 1, status: 'Loaded EnvironmentMap' };
|
|
348
|
-
if(this._stateEngine.viewportEngines[this._renderingEngine.id]) {
|
|
349
|
-
this._stateEngine.viewportEngines[this._renderingEngine.id]!.environmentMapLoaded.resolve(true);
|
|
350
|
-
this._stateEngine.viewportEngines[this._renderingEngine.id]!.environmentMapLoaded = new StatePromise();
|
|
351
|
-
}
|
|
352
|
-
this._eventEngine.emitEvent(EVENTTYPE.TASK.TASK_END, event);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// #endregion Private Methods (4)
|
|
357
|
-
}
|