@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.8 → 3.16.10
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/RenderingEngine.d.ts +294 -294
- package/dist/RenderingEngine.js +987 -977
- package/dist/RenderingEngine.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.js +57 -57
- package/dist/injectors/TextureUnifierInjector.d.ts +13 -13
- package/dist/injectors/TextureUnifierInjector.js +181 -171
- package/dist/injectors/TextureUnifierInjector.js.map +1 -1
- package/dist/interfaces/ILoader.d.ts +3 -3
- package/dist/interfaces/ILoader.js +2 -2
- package/dist/interfaces/IRenderingEngine.d.ts +45 -45
- package/dist/interfaces/IRenderingEngine.js +2 -2
- package/dist/loaders/EnvironmentMapLoader.d.ts +119 -119
- package/dist/loaders/EnvironmentMapLoader.js +512 -502
- package/dist/loaders/EnvironmentMapLoader.js.map +1 -1
- package/dist/loaders/GeometryLoader.d.ts +39 -39
- package/dist/loaders/GeometryLoader.d.ts.map +1 -1
- package/dist/loaders/GeometryLoader.js +603 -593
- package/dist/loaders/GeometryLoader.js.map +1 -1
- package/dist/loaders/HTMLElementAnchorLoader.d.ts +15 -15
- package/dist/loaders/HTMLElementAnchorLoader.js +98 -98
- package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
- package/dist/loaders/LightLoader.d.ts +19 -19
- package/dist/loaders/LightLoader.js +197 -187
- package/dist/loaders/LightLoader.js.map +1 -1
- package/dist/loaders/MaterialLoader.d.ts +115 -115
- package/dist/loaders/MaterialLoader.d.ts.map +1 -1
- package/dist/loaders/MaterialLoader.js +1612 -1602
- package/dist/loaders/MaterialLoader.js.map +1 -1
- package/dist/managers/ARManager.d.ts +17 -17
- package/dist/managers/ARManager.js +128 -128
- package/dist/managers/ARManager.js.map +1 -1
- package/dist/managers/CameraManager.d.ts +19 -19
- package/dist/managers/CameraManager.js +244 -234
- package/dist/managers/CameraManager.js.map +1 -1
- package/dist/managers/EnvironmentGeometryManager.d.ts +32 -32
- package/dist/managers/EnvironmentGeometryManager.js +114 -114
- package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
- package/dist/managers/FlagManager.d.ts +19 -19
- package/dist/managers/FlagManager.js +143 -143
- package/dist/managers/FlagManager.js.map +1 -1
- package/dist/managers/PostProcessingManager.d.ts +1019 -1019
- package/dist/managers/PostProcessingManager.js +1306 -1296
- package/dist/managers/PostProcessingManager.js.map +1 -1
- package/dist/managers/RenderingManager.d.ts +84 -84
- package/dist/managers/RenderingManager.d.ts.map +1 -1
- package/dist/managers/RenderingManager.js +679 -669
- package/dist/managers/RenderingManager.js.map +1 -1
- package/dist/managers/SceneTracingManager.d.ts +28 -28
- package/dist/managers/SceneTracingManager.js +160 -150
- package/dist/managers/SceneTracingManager.js.map +1 -1
- package/dist/managers/SceneTreeManager.d.ts +81 -81
- package/dist/managers/SceneTreeManager.d.ts.map +1 -1
- package/dist/managers/SceneTreeManager.js +500 -490
- package/dist/managers/SceneTreeManager.js.map +1 -1
- package/dist/managers/SettingsManager.d.ts +28 -28
- package/dist/managers/SettingsManager.js +284 -284
- package/dist/managers/SettingsManager.js.map +1 -1
- package/dist/managers/environmentGeometry/ContactShadow.d.ts +42 -42
- package/dist/managers/environmentGeometry/ContactShadow.js +295 -285
- package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
- package/dist/managers/environmentGeometry/Grid.d.ts +20 -20
- package/dist/managers/environmentGeometry/Grid.js +110 -100
- package/dist/managers/environmentGeometry/Grid.js.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlane.d.ts +21 -21
- package/dist/managers/environmentGeometry/GroundPlane.js +105 -95
- package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
- package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts +21 -21
- package/dist/managers/environmentGeometry/GroundPlaneShadow.js +96 -86
- package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
- package/dist/managers/environmentGeometry/IEnvironmentGeometry.d.ts +8 -8
- package/dist/managers/environmentGeometry/IEnvironmentGeometry.js +2 -2
- package/dist/managers/postprocessing/GodRaysManager.d.ts +12 -12
- package/dist/managers/postprocessing/GodRaysManager.js +73 -63
- package/dist/managers/postprocessing/GodRaysManager.js.map +1 -1
- package/dist/managers/postprocessing/OutlineManager.d.ts +15 -15
- package/dist/managers/postprocessing/OutlineManager.js +86 -76
- package/dist/managers/postprocessing/OutlineManager.js.map +1 -1
- package/dist/managers/postprocessing/SSAARenderPass.d.ts +53 -53
- package/dist/managers/postprocessing/SSAARenderPass.js +281 -281
- package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -1
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +14 -14
- package/dist/managers/postprocessing/SelectiveBloomManager.js +76 -66
- package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -1
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +46 -46
- package/dist/managers/postprocessing/ao/ao/AOEffect.js +142 -142
- package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -1
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +12 -12
- package/dist/managers/postprocessing/ao/ao/AOPass.js +108 -108
- package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -1
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +1 -1
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +4 -4
- package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts +1 -1
- package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js +4 -4
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +14 -14
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +24 -24
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +1 -1
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +4 -4
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +33 -33
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +211 -211
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -1
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +1 -1
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +4 -4
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +14 -14
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +82 -82
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -1
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +1 -1
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +4 -4
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +1 -1
- package/dist/managers/postprocessing/ao/utils/shader/basic.js +4 -4
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +1 -1
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +4 -4
- package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.d.ts +165 -165
- package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js +299 -299
- package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js.map +1 -1
- package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.d.ts +1 -1
- package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.js +4 -4
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +37 -37
- package/dist/managers/postprocessing/utils/CopyMaterial.js +69 -69
- package/dist/managers/postprocessing/utils/CopyShader.d.ts +13 -13
- package/dist/managers/postprocessing/utils/CopyShader.js +12 -12
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +9 -9
- package/dist/managers/postprocessing/utils/FullScreenQuad.js +28 -28
- package/dist/managers/postprocessing/utils/NormalPass.d.ts +87 -87
- package/dist/managers/postprocessing/utils/NormalPass.js +156 -156
- package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -1
- package/dist/managers/postprocessing/utils/RenderPass.d.ts +114 -114
- package/dist/managers/postprocessing/utils/RenderPass.js +259 -259
- package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -1
- package/dist/managers/sceneTree/SDTFUtils.d.ts +6 -6
- package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/SDTFUtils.js +50 -50
- package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
- package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +7 -7
- package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/SceenTreeManagerUtils.js +175 -165
- package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
- package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts +6 -6
- package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts.map +1 -1
- package/dist/managers/sceneTree/ThreeJsDataUtils.js +80 -70
- package/dist/managers/sceneTree/ThreeJsDataUtils.js.map +1 -1
- package/dist/materials/GemMaterial.d.ts +37 -37
- package/dist/materials/GemMaterial.js +262 -252
- package/dist/materials/GemMaterial.js.map +1 -1
- package/dist/materials/MeshUnlitMaterialParameters.d.ts +3 -3
- package/dist/materials/MeshUnlitMaterialParameters.js +2 -2
- package/dist/materials/MultiPointsMaterial.d.ts +93 -93
- package/dist/materials/MultiPointsMaterial.js +577 -567
- package/dist/materials/MultiPointsMaterial.js.map +1 -1
- package/dist/materials/SpecularGlossinessMaterial.d.ts +13 -13
- package/dist/materials/SpecularGlossinessMaterial.js +171 -161
- package/dist/materials/SpecularGlossinessMaterial.js.map +1 -1
- package/dist/objects/SDColor.d.ts +16 -16
- package/dist/objects/SDColor.js +52 -52
- package/dist/objects/SDColor.js.map +1 -1
- package/dist/objects/SDObject.d.ts +27 -27
- package/dist/objects/SDObject.js +112 -102
- package/dist/objects/SDObject.js.map +1 -1
- package/dist/shaders/PCSS.d.ts +2 -2
- package/dist/shaders/PCSS.js +5 -5
- package/dist/shaders/gem.d.ts +2 -2
- package/dist/shaders/gem.js +5 -5
- package/dist/shaders/multi_points.d.ts +2 -2
- package/dist/shaders/multi_points.js +5 -5
- package/dist/styling/viewport-css.d.ts +1 -1
- package/dist/styling/viewport-css.js +4 -4
- package/dist/three/CSS2DRenderer.d.ts +31 -31
- package/dist/three/CSS2DRenderer.d.ts.map +1 -1
- package/dist/three/CSS2DRenderer.js +152 -152
- package/dist/three/CSS2DRenderer.js.map +1 -1
- package/dist/three/geometries/TextGeometry.d.ts +21 -21
- package/dist/three/geometries/TextGeometry.js +45 -45
- package/dist/three/geometries/TextGeometry.js.map +1 -1
- package/dist/three/loaders/RGBELoader.d.ts +23 -23
- package/dist/three/loaders/RGBELoader.js +311 -311
- package/dist/three/loaders/RGBELoader.js.map +1 -1
- package/dist/types/IThreejsData.d.ts +6 -6
- package/dist/types/IThreejsData.js +2 -2
- package/dist/types/ThreejsData.d.ts +10 -10
- package/dist/types/ThreejsData.js +41 -41
- package/package.json +18 -18
- package/dist/managers/InstanceGroupManager.d.ts +0 -58
- package/dist/managers/InstanceGroupManager.d.ts.map +0 -1
- package/dist/managers/InstanceGroupManager.js +0 -372
- package/dist/managers/InstanceGroupManager.js.map +0 -1
|
@@ -1,386 +1,396 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// #
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this._primitiveCache = {};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
gemMaterialData
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
material
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
this.
|
|
358
|
-
this.
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
this._gemCubeCameraRenderTarget
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
this._gemCubeCameraRenderTarget =
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
this._gemCubeCameraRenderTarget.texture.
|
|
373
|
-
this.
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
this._gemCubeCameraRenderTarget
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.GeometryLoader = void 0;
|
|
37
|
+
const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
|
|
38
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
39
|
+
const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
|
|
40
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
41
|
+
const THREE = __importStar(require("three"));
|
|
42
|
+
const GemMaterial_1 = require("../materials/GemMaterial");
|
|
43
|
+
class GeometryLoader {
|
|
44
|
+
// #endregion Properties (8)
|
|
45
|
+
// #region Constructors (1)
|
|
46
|
+
constructor(_renderingEngine) {
|
|
47
|
+
this._renderingEngine = _renderingEngine;
|
|
48
|
+
this._gemSphericalMapsCache = {};
|
|
49
|
+
this._geometryCache = {};
|
|
50
|
+
this._logger = viewer_shared_services_1.Logger.instance;
|
|
51
|
+
this._primitiveCache = {};
|
|
52
|
+
}
|
|
53
|
+
// #endregion Constructors (1)
|
|
54
|
+
// #region Public Methods (6)
|
|
55
|
+
emptyGeometryCache() {
|
|
56
|
+
for (const key in this._geometryCache)
|
|
57
|
+
this.removeFromGeometryCache(key);
|
|
58
|
+
this._geometryCache = {};
|
|
59
|
+
for (const key in this._primitiveCache)
|
|
60
|
+
this.removeFromPrimitiveCache(key);
|
|
61
|
+
this._primitiveCache = {};
|
|
62
|
+
}
|
|
63
|
+
init() { }
|
|
64
|
+
/**
|
|
65
|
+
* Create a geometry object with the provided geometry data.
|
|
66
|
+
*
|
|
67
|
+
* @param geometry the geometry data
|
|
68
|
+
* @returns the geometry object
|
|
69
|
+
*/
|
|
70
|
+
load(geometry, instanceData) {
|
|
71
|
+
// Cache key to avoid repeated string concatenation
|
|
72
|
+
const primitiveCacheKey = geometry.primitive.id + "_" + geometry.primitive.version;
|
|
73
|
+
const threeGeometry = (() => {
|
|
74
|
+
const cachedPrimitive = this._primitiveCache[primitiveCacheKey];
|
|
75
|
+
if (!cachedPrimitive) {
|
|
76
|
+
return this.loadPrimitive(geometry.primitive);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
cachedPrimitive.counter++;
|
|
80
|
+
const clone = cachedPrimitive.threeGeometry.clone();
|
|
81
|
+
cachedPrimitive.clones.push(clone);
|
|
82
|
+
return clone;
|
|
83
|
+
}
|
|
84
|
+
})();
|
|
85
|
+
let incomingMaterialData;
|
|
86
|
+
if (geometry.effectMaterials.length > 0) {
|
|
87
|
+
incomingMaterialData =
|
|
88
|
+
geometry.effectMaterials[geometry.effectMaterials.length - 1]
|
|
89
|
+
.material;
|
|
90
|
+
}
|
|
91
|
+
else if (this._renderingEngine.type === viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES) {
|
|
92
|
+
incomingMaterialData = geometry.attributeMaterial;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
incomingMaterialData = geometry.material;
|
|
96
|
+
}
|
|
97
|
+
const attributes = threeGeometry.attributes;
|
|
98
|
+
const morphAttributes = threeGeometry.morphAttributes;
|
|
99
|
+
const hasMorphTargets = Object.keys(morphAttributes).length > 0;
|
|
100
|
+
// Performance: Normalize settings to maximize shader program sharing
|
|
101
|
+
// These settings affect shader generation, so keep them consistent across materials
|
|
102
|
+
const materialSettings = {
|
|
103
|
+
mode: geometry.mode,
|
|
104
|
+
useVertexTangents: attributes.tangent !== undefined,
|
|
105
|
+
useVertexColors: attributes.color !== undefined &&
|
|
106
|
+
this._renderingEngine.type !== viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES,
|
|
107
|
+
useFlatShading: attributes.normal === undefined,
|
|
108
|
+
useMorphTargets: hasMorphTargets,
|
|
109
|
+
useMorphNormals: hasMorphTargets && morphAttributes.normal !== undefined,
|
|
110
|
+
};
|
|
111
|
+
if (incomingMaterialData instanceof viewer_shared_node_tree_1.MaterialGemData) {
|
|
112
|
+
const gemMaterialData = incomingMaterialData;
|
|
113
|
+
// Only compute if not already computed
|
|
114
|
+
if (!threeGeometry.boundingSphere) {
|
|
115
|
+
threeGeometry.computeBoundingSphere();
|
|
116
|
+
}
|
|
117
|
+
const sphericalNormalMap = this.createCubeNormalMap(geometry, threeGeometry);
|
|
118
|
+
const center = threeGeometry.boundingSphere.center, radius = threeGeometry.boundingSphere.radius;
|
|
119
|
+
gemMaterialData.side = viewer_shared_types_1.MATERIAL_SIDE.FRONT;
|
|
120
|
+
gemMaterialData.center = gl_matrix_1.vec3.fromValues(center.x, center.y, center.z);
|
|
121
|
+
gemMaterialData.radius = radius;
|
|
122
|
+
gemMaterialData.sphericalNormalMap = sphericalNormalMap;
|
|
123
|
+
}
|
|
124
|
+
const material = this._renderingEngine.materialLoader.load(incomingMaterialData || geometry, materialSettings);
|
|
125
|
+
// Performance: Disable unnecessary material features for static materials
|
|
126
|
+
if (!hasMorphTargets) {
|
|
127
|
+
// For non-transparent materials, ensure depth write/test are optimized
|
|
128
|
+
if (!material.transparent) {
|
|
129
|
+
material.depthWrite = true;
|
|
130
|
+
material.depthTest = true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Performance: Mark material as not needing update to avoid shader recompilation
|
|
134
|
+
// unless properties that affect the shader have changed
|
|
135
|
+
material.needsUpdate = false;
|
|
136
|
+
let threeGeometryObject;
|
|
137
|
+
if (this._geometryCache[geometry.id + "_" + geometry.version]) {
|
|
138
|
+
this._geometryCache[geometry.id + "_" + geometry.version].counter++;
|
|
139
|
+
threeGeometryObject =
|
|
140
|
+
this._geometryCache[geometry.id + "_" + geometry.version].obj;
|
|
141
|
+
threeGeometryObject.material = material;
|
|
142
|
+
// Clear instance colors when in ATTRIBUTES mode to prevent them
|
|
143
|
+
// from multiplying with the attribute material color
|
|
144
|
+
if (threeGeometryObject instanceof THREE.InstancedMesh) {
|
|
145
|
+
if (this._renderingEngine.type === viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES) {
|
|
146
|
+
threeGeometryObject.instanceColor = null;
|
|
147
|
+
}
|
|
148
|
+
else if (instanceData && !threeGeometryObject.instanceColor) {
|
|
149
|
+
for (let i = 0; i < instanceData.instanceColors.length; i++) {
|
|
150
|
+
threeGeometryObject.setColorAt(i, this._renderingEngine.createThreeJsColor(instanceData.instanceColors[i]));
|
|
151
|
+
}
|
|
152
|
+
// setColorAt creates instanceColor; re-read after mutation
|
|
153
|
+
threeGeometryObject.instanceColor.needsUpdate = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
threeGeometryObject = this.createMesh(geometry, threeGeometry, material, instanceData);
|
|
159
|
+
threeGeometryObject.userData.cacheKey =
|
|
160
|
+
geometry.id + "_" + geometry.version;
|
|
161
|
+
this._geometryCache[geometry.id + "_" + geometry.version] = {
|
|
162
|
+
obj: threeGeometryObject,
|
|
163
|
+
counter: 1,
|
|
164
|
+
clones: [],
|
|
165
|
+
primitiveCacheId: geometry.primitive.id + "_" + geometry.primitive.version,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
threeGeometryObject.castShadow = geometry.castShadow;
|
|
169
|
+
threeGeometryObject.receiveShadow = !(material instanceof GemMaterial_1.GemMaterial)
|
|
170
|
+
? geometry.receiveShadow
|
|
171
|
+
: false;
|
|
172
|
+
return threeGeometryObject;
|
|
173
|
+
}
|
|
174
|
+
loadPrimitive(primitive) {
|
|
175
|
+
const geometry = new THREE.BufferGeometry();
|
|
176
|
+
if (primitive.indices)
|
|
177
|
+
geometry.setIndex(new THREE.BufferAttribute(primitive.indices.array, primitive.indices.itemSize));
|
|
178
|
+
for (const attributeId in primitive.attributes) {
|
|
179
|
+
const buffer = this.loadAttribute(primitive.attributes[attributeId], attributeId);
|
|
180
|
+
const attributeName = this.getAttributeName(attributeId);
|
|
181
|
+
if (attributeId === "NORMAL")
|
|
182
|
+
if (this.checkNormals(primitive, attributeId, buffer, geometry))
|
|
183
|
+
continue;
|
|
184
|
+
geometry.setAttribute(attributeName, buffer);
|
|
185
|
+
const morphAttributeData = primitive.attributes[attributeId].morphAttributeData;
|
|
186
|
+
if (morphAttributeData.length > 0) {
|
|
187
|
+
geometry.morphTargetsRelative = true;
|
|
188
|
+
const buffers = [];
|
|
189
|
+
for (let i = 0; i < morphAttributeData.length; i++)
|
|
190
|
+
buffers.push(this.loadAttribute(morphAttributeData[i], attributeId));
|
|
191
|
+
geometry.morphAttributes[attributeName] = buffers;
|
|
192
|
+
}
|
|
193
|
+
// we copy the uv coordinates into the second set of uv coordinates if there are none
|
|
194
|
+
// this allows for the usage of AO and light maps that share this coordinate set
|
|
195
|
+
const attributeIdUV2 = "TEXCOORD_1", attributeNameUV2 = "uv1";
|
|
196
|
+
if (attributeName === "uv" &&
|
|
197
|
+
!primitive.attributes[attributeIdUV2]) {
|
|
198
|
+
geometry.setAttribute(attributeNameUV2, buffer);
|
|
199
|
+
const morphAttributeData = primitive.attributes[attributeId].morphAttributeData;
|
|
200
|
+
if (morphAttributeData.length > 0) {
|
|
201
|
+
geometry.morphTargetsRelative = true;
|
|
202
|
+
const buffers = [];
|
|
203
|
+
for (let i = 0; i < morphAttributeData.length; i++)
|
|
204
|
+
buffers.push(this.loadAttribute(morphAttributeData[i], attributeId));
|
|
205
|
+
geometry.morphAttributes[attributeNameUV2] = buffers;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
primitive.convertedObject[this._renderingEngine.id] = geometry;
|
|
210
|
+
const primitiveCacheKey = primitive.id + "_" + primitive.version;
|
|
211
|
+
this._primitiveCache[primitiveCacheKey] = {
|
|
212
|
+
threeGeometry: geometry,
|
|
213
|
+
counter: 1,
|
|
214
|
+
clones: [],
|
|
215
|
+
};
|
|
216
|
+
return geometry;
|
|
217
|
+
}
|
|
218
|
+
removeFromGemSphericalMapsCache(id) {
|
|
219
|
+
if (this._gemSphericalMapsCache[id]) {
|
|
220
|
+
if (this._gemSphericalMapsCache[id].counter === 1) {
|
|
221
|
+
this._gemSphericalMapsCache[id].renderTarget.dispose();
|
|
222
|
+
this._gemSphericalMapsCache[id].texture.dispose();
|
|
223
|
+
delete this._gemSphericalMapsCache[id];
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this._gemSphericalMapsCache[id].counter--;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
updateGeometryMaterial(geometry) {
|
|
231
|
+
const cacheKey = geometry.id + "_" + geometry.version;
|
|
232
|
+
const cached = this._geometryCache[cacheKey];
|
|
233
|
+
if (!cached)
|
|
234
|
+
return;
|
|
235
|
+
let incomingMaterialData;
|
|
236
|
+
if (geometry.effectMaterials.length > 0) {
|
|
237
|
+
incomingMaterialData =
|
|
238
|
+
geometry.effectMaterials[geometry.effectMaterials.length - 1]
|
|
239
|
+
.material;
|
|
240
|
+
}
|
|
241
|
+
else if (this._renderingEngine.type === viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES) {
|
|
242
|
+
incomingMaterialData = geometry.attributeMaterial;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
incomingMaterialData = geometry.material;
|
|
246
|
+
}
|
|
247
|
+
const threeGeometry = cached.obj.geometry;
|
|
248
|
+
const attributes = threeGeometry.attributes;
|
|
249
|
+
const morphAttributes = threeGeometry.morphAttributes;
|
|
250
|
+
const hasMorphTargets = Object.keys(morphAttributes).length > 0;
|
|
251
|
+
const materialSettings = {
|
|
252
|
+
mode: geometry.mode,
|
|
253
|
+
useVertexTangents: attributes.tangent !== undefined,
|
|
254
|
+
useVertexColors: attributes.color !== undefined &&
|
|
255
|
+
this._renderingEngine.type !== viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES,
|
|
256
|
+
useFlatShading: attributes.normal === undefined,
|
|
257
|
+
useMorphTargets: hasMorphTargets,
|
|
258
|
+
useMorphNormals: hasMorphTargets && morphAttributes.normal !== undefined,
|
|
259
|
+
};
|
|
260
|
+
cached.obj.material = this._renderingEngine.materialLoader.load(incomingMaterialData || geometry, materialSettings);
|
|
261
|
+
// Clear instance colors when in ATTRIBUTES mode to prevent them
|
|
262
|
+
// from multiplying with the attribute material color
|
|
263
|
+
if (cached.obj instanceof THREE.InstancedMesh) {
|
|
264
|
+
if (this._renderingEngine.type === viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES) {
|
|
265
|
+
cached.obj.instanceColor = null;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
removeFromGeometryCache(id) {
|
|
270
|
+
if (this._geometryCache[id]) {
|
|
271
|
+
if (this._geometryCache[id].counter === 1) {
|
|
272
|
+
this.removeFromPrimitiveCache(this._geometryCache[id].primitiveCacheId);
|
|
273
|
+
this._geometryCache[id].clones.forEach((c) => {
|
|
274
|
+
this.removeFromPrimitiveCache(this._geometryCache[id].primitiveCacheId);
|
|
275
|
+
});
|
|
276
|
+
delete this._geometryCache[id];
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
this._geometryCache[id].counter--;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// #endregion Public Methods (6)
|
|
284
|
+
// #region Private Methods (7)
|
|
285
|
+
checkNormals(primitive, attributeId, buffer, geometry) {
|
|
286
|
+
let blnNormalsOk = false;
|
|
287
|
+
for (let index = 0; index < 10; ++index) {
|
|
288
|
+
if (Math.abs(buffer.array[index * 3]) > 0.001) {
|
|
289
|
+
blnNormalsOk = true;
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
if (Math.abs(buffer.array[index * 3 + 1]) > 0.001) {
|
|
293
|
+
blnNormalsOk = true;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
if (Math.abs(buffer.array[index * 3 + 2]) > 0.001) {
|
|
297
|
+
blnNormalsOk = true;
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (!blnNormalsOk) {
|
|
302
|
+
geometry.computeVertexNormals();
|
|
303
|
+
const computedNormalAttribute = (geometry.getAttribute("normal"));
|
|
304
|
+
// store the computed normals in the attribute data
|
|
305
|
+
primitive.attributes[attributeId] = new viewer_shared_node_tree_1.AttributeData(new Float32Array(computedNormalAttribute.array), computedNormalAttribute.itemSize, 0, 0, 3, computedNormalAttribute.normalized, computedNormalAttribute.array.length / 3);
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
convertToTriangleMode(geometry, drawMode) {
|
|
311
|
+
let index = geometry.getIndex();
|
|
312
|
+
// generate index if not present
|
|
313
|
+
if (index === null) {
|
|
314
|
+
const indices = [];
|
|
315
|
+
const position = geometry.getAttribute("position");
|
|
316
|
+
if (position !== undefined) {
|
|
317
|
+
for (let i = 0; i < position.count; i++)
|
|
318
|
+
indices.push(i);
|
|
319
|
+
geometry.setIndex(indices);
|
|
320
|
+
index = geometry.getIndex();
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError("GeometryLoader.convertToTriangleMode: Undefined position attribute. Processing not possible.");
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (index === null)
|
|
327
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError("GeometryLoader.convertToTriangleMode: Undefined index. Processing not possible.");
|
|
328
|
+
const numberOfTriangles = index.count - 2;
|
|
329
|
+
const newIndices = [];
|
|
330
|
+
if (drawMode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN) {
|
|
331
|
+
for (let i = 1; i <= numberOfTriangles; i++) {
|
|
332
|
+
newIndices.push(index.getX(0));
|
|
333
|
+
newIndices.push(index.getX(i));
|
|
334
|
+
newIndices.push(index.getX(i + 1));
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
for (let i = 0; i < numberOfTriangles; i++) {
|
|
339
|
+
if (i % 2 === 0) {
|
|
340
|
+
newIndices.push(index.getX(i));
|
|
341
|
+
newIndices.push(index.getX(i + 1));
|
|
342
|
+
newIndices.push(index.getX(i + 2));
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
newIndices.push(index.getX(i + 2));
|
|
346
|
+
newIndices.push(index.getX(i + 1));
|
|
347
|
+
newIndices.push(index.getX(i));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (newIndices.length / 3 !== numberOfTriangles)
|
|
352
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError("GeometryLoader.convertToTriangleMode: Unable to generate correct amount of triangle.");
|
|
353
|
+
geometry.setIndex(newIndices);
|
|
354
|
+
}
|
|
355
|
+
createCubeNormalMap(geometryData, geometry, resolution = 1024) {
|
|
356
|
+
if (this._gemSphericalMapsCache[geometryData.primitive.id + "_" + geometryData.primitive.version]) {
|
|
357
|
+
this._gemSphericalMapsCache[geometryData.primitive.id + "_" + geometryData.primitive.version].counter++;
|
|
358
|
+
return this._gemSphericalMapsCache[geometryData.primitive.id + "_" + geometryData.primitive.version].texture;
|
|
359
|
+
}
|
|
360
|
+
if (!this._gemScene) {
|
|
361
|
+
this._gemScene = new THREE.Scene();
|
|
362
|
+
this._gemCubeCameraRenderTarget = new THREE.WebGLCubeRenderTarget(resolution, {
|
|
363
|
+
format: THREE.RGBAFormat,
|
|
364
|
+
magFilter: THREE.LinearFilter,
|
|
365
|
+
minFilter: THREE.LinearFilter,
|
|
366
|
+
});
|
|
367
|
+
this._gemCubeCameraRenderTarget.texture.generateMipmaps = false;
|
|
368
|
+
this._gemCubeCameraRenderTarget.texture.minFilter =
|
|
369
|
+
THREE.NearestFilter;
|
|
370
|
+
this._gemCubeCameraRenderTarget.texture.magFilter =
|
|
371
|
+
THREE.NearestFilter;
|
|
372
|
+
this._gemCubeCameraRenderTarget.texture.format = THREE.RGBAFormat;
|
|
373
|
+
this._gemCubeCamera = new THREE.CubeCamera(0.001, 10000, this._gemCubeCameraRenderTarget);
|
|
374
|
+
this._gemScene.add(this._gemCubeCamera);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this._gemCubeCameraRenderTarget = new THREE.WebGLCubeRenderTarget(resolution, {
|
|
378
|
+
format: THREE.RGBAFormat,
|
|
379
|
+
magFilter: THREE.LinearFilter,
|
|
380
|
+
minFilter: THREE.LinearFilter,
|
|
381
|
+
});
|
|
382
|
+
this._gemCubeCameraRenderTarget.texture.generateMipmaps = false;
|
|
383
|
+
this._gemCubeCameraRenderTarget.texture.minFilter =
|
|
384
|
+
THREE.NearestFilter;
|
|
385
|
+
this._gemCubeCameraRenderTarget.texture.magFilter =
|
|
386
|
+
THREE.NearestFilter;
|
|
387
|
+
this._gemCubeCameraRenderTarget.texture.format = THREE.RGBAFormat;
|
|
388
|
+
this._gemCubeCamera.renderTarget = this._gemCubeCameraRenderTarget;
|
|
389
|
+
}
|
|
390
|
+
if (!this._gemNormalMaterial) {
|
|
391
|
+
const _normalShader = {
|
|
392
|
+
defines: {},
|
|
393
|
+
uniforms: THREE.UniformsUtils.merge([THREE.UniformsLib.common]),
|
|
384
394
|
vertexShader: `
|
|
385
395
|
varying vec3 vNormal;
|
|
386
396
|
|
|
@@ -388,7 +398,7 @@ class GeometryLoader {
|
|
|
388
398
|
vNormal = normal;
|
|
389
399
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
390
400
|
}
|
|
391
|
-
`,
|
|
401
|
+
`,
|
|
392
402
|
fragmentShader: `
|
|
393
403
|
varying highp vec3 vNormal;
|
|
394
404
|
|
|
@@ -425,213 +435,213 @@ class GeometryLoader {
|
|
|
425
435
|
vec3 n = normalize(vNormal);
|
|
426
436
|
gl_FragColor = vec4(decodeVec3(abs(n)), signEncoding(n));
|
|
427
437
|
}
|
|
428
|
-
`,
|
|
429
|
-
};
|
|
430
|
-
this._gemNormalMaterial = new THREE.ShaderMaterial({
|
|
431
|
-
uniforms: THREE.UniformsUtils.clone(_normalShader.uniforms),
|
|
432
|
-
defines: _normalShader.defines,
|
|
433
|
-
vertexShader: _normalShader.vertexShader,
|
|
434
|
-
fragmentShader: _normalShader.fragmentShader,
|
|
435
|
-
});
|
|
436
|
-
this._gemNormalMaterial.blending = THREE.NoBlending;
|
|
437
|
-
this._gemNormalMaterial.side = THREE.DoubleSide;
|
|
438
|
-
this._gemScene.overrideMaterial = this._gemNormalMaterial;
|
|
439
|
-
}
|
|
440
|
-
const mesh = new THREE.Mesh(geometry.clone(), this._gemNormalMaterial);
|
|
441
|
-
mesh.geometry.center();
|
|
442
|
-
this._gemScene.add(mesh);
|
|
443
|
-
this._gemCubeCamera.update(this._renderingEngine.renderer, this._gemScene);
|
|
444
|
-
this._gemScene.remove(mesh);
|
|
445
|
-
mesh.geometry.dispose();
|
|
446
|
-
mesh.material.dispose();
|
|
447
|
-
this._gemCubeCamera.renderTarget.texture.userData = {
|
|
448
|
-
SDid: geometryData.primitive.id,
|
|
449
|
-
SDversion: geometryData.primitive.version,
|
|
450
|
-
};
|
|
451
|
-
this._gemSphericalMapsCache[geometryData.primitive.id + "_" + geometryData.primitive.version] = {
|
|
452
|
-
texture: this._gemCubeCameraRenderTarget.texture,
|
|
453
|
-
renderTarget: this._gemCubeCameraRenderTarget,
|
|
454
|
-
counter: 1,
|
|
455
|
-
};
|
|
456
|
-
return this._gemSphericalMapsCache[geometryData.primitive.id + "_" + geometryData.primitive.version].texture;
|
|
457
|
-
}
|
|
458
|
-
createMesh(geometry, threeGeometry, material, instanceData) {
|
|
459
|
-
let threeGeometryObject;
|
|
460
|
-
if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.POINTS) {
|
|
461
|
-
const points = new THREE.Points(threeGeometry, material);
|
|
462
|
-
geometry.convertedObject[this._renderingEngine.id] = points;
|
|
463
|
-
threeGeometryObject = points;
|
|
464
|
-
}
|
|
465
|
-
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINES) {
|
|
466
|
-
const lineSegments = new THREE.LineSegments(threeGeometry, material);
|
|
467
|
-
geometry.convertedObject[this._renderingEngine.id] = lineSegments;
|
|
468
|
-
threeGeometryObject = lineSegments;
|
|
469
|
-
}
|
|
470
|
-
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_LOOP) {
|
|
471
|
-
const lineLoop = new THREE.LineLoop(threeGeometry, material);
|
|
472
|
-
geometry.convertedObject[this._renderingEngine.id] = lineLoop;
|
|
473
|
-
threeGeometryObject = lineLoop;
|
|
474
|
-
}
|
|
475
|
-
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_STRIP) {
|
|
476
|
-
const line = new THREE.Line(threeGeometry, material);
|
|
477
|
-
geometry.convertedObject[this._renderingEngine.id] = line;
|
|
478
|
-
threeGeometryObject = line;
|
|
479
|
-
}
|
|
480
|
-
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLES ||
|
|
481
|
-
geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_STRIP ||
|
|
482
|
-
geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN) {
|
|
483
|
-
const bufferGeometry = threeGeometry;
|
|
484
|
-
if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_STRIP ||
|
|
485
|
-
geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN)
|
|
486
|
-
this.convertToTriangleMode(bufferGeometry, geometry.mode);
|
|
487
|
-
if (instanceData && instanceData.instanceMatrices.length > 0) {
|
|
488
|
-
const instanceCount = instanceData.instanceMatrices.length;
|
|
489
|
-
const instancedMesh = new THREE.InstancedMesh(bufferGeometry, material, instanceCount);
|
|
490
|
-
// Reuse matrix object to reduce allocations
|
|
491
|
-
const tempMatrix = new THREE.Matrix4();
|
|
492
|
-
const useInstanceColors = this._renderingEngine.type !== viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES;
|
|
493
|
-
for (let i = 0; i < instanceCount; i++) {
|
|
494
|
-
tempMatrix.fromArray(instanceData.instanceMatrices[i]);
|
|
495
|
-
instancedMesh.setMatrixAt(i, tempMatrix);
|
|
496
|
-
if (useInstanceColors) {
|
|
497
|
-
instancedMesh.setColorAt(i, this._renderingEngine.createThreeJsColor(instanceData.instanceColors[i]));
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
if (instancedMesh.instanceColor)
|
|
501
|
-
instancedMesh.instanceColor.needsUpdate = true;
|
|
502
|
-
instancedMesh.instanceMatrix.needsUpdate = true;
|
|
503
|
-
// Enable frustum culling for instanced meshes
|
|
504
|
-
instancedMesh.frustumCulled = true;
|
|
505
|
-
geometry.convertedObject[this._renderingEngine.id] =
|
|
506
|
-
instancedMesh;
|
|
507
|
-
threeGeometryObject = instancedMesh;
|
|
508
|
-
}
|
|
509
|
-
else {
|
|
510
|
-
const mesh = new THREE.Mesh(bufferGeometry, material);
|
|
511
|
-
geometry.convertedObject[this._renderingEngine.id] = mesh;
|
|
512
|
-
threeGeometryObject = mesh;
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
else {
|
|
516
|
-
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError(`GeometryLoader.load: Unrecognized primitive mode ${geometry.mode}.`);
|
|
517
|
-
}
|
|
518
|
-
// Cache userData and bounding box data to reduce allocations
|
|
519
|
-
const userDataCache = {
|
|
520
|
-
SDid: geometry.id,
|
|
521
|
-
SDversion: geometry.version,
|
|
522
|
-
primitiveSDid: geometry.primitive.id,
|
|
523
|
-
primitiveSDversion: geometry.primitive.version,
|
|
524
|
-
};
|
|
525
|
-
const bbox = geometry.boundingBox;
|
|
526
|
-
const bboxMin = new THREE.Vector3(bbox.min[0], bbox.min[1], bbox.min[2]);
|
|
527
|
-
const bboxMax = new THREE.Vector3(bbox.max[0], bbox.max[1], bbox.max[2]);
|
|
528
|
-
const bsphereCenter = new THREE.Vector3(bbox.boundingSphere.center[0], bbox.boundingSphere.center[1], bbox.boundingSphere.center[2]);
|
|
529
|
-
const renderOrder = geometry.renderOrder;
|
|
530
|
-
const threeGeom = threeGeometryObject.geometry;
|
|
531
|
-
threeGeom.userData = userDataCache;
|
|
532
|
-
threeGeometryObject.renderOrder = renderOrder;
|
|
533
|
-
// Performance: Disable matrixAutoUpdate for static geometry (no animations/transforms)
|
|
534
|
-
// This prevents Three.js from recalculating matrices every frame
|
|
535
|
-
if (!instanceData) {
|
|
536
|
-
threeGeometryObject.matrixAutoUpdate = false;
|
|
537
|
-
}
|
|
538
|
-
if (threeGeometryObject instanceof THREE.Mesh &&
|
|
539
|
-
threeGeometryObject.userData.transparencyPlaceholder !== true) {
|
|
540
|
-
// Assign bounding box directly without unnecessary clones
|
|
541
|
-
threeGeom.boundingBox = new THREE.Box3(bboxMin, bboxMax);
|
|
542
|
-
threeGeom.boundingSphere = new THREE.Sphere(bsphereCenter, bbox.boundingSphere.radius);
|
|
543
|
-
threeGeometryObject.morphTargetInfluences =
|
|
544
|
-
geometry.morphWeights;
|
|
545
|
-
}
|
|
546
|
-
return threeGeometryObject;
|
|
547
|
-
}
|
|
548
|
-
getAttributeName(attributeId) {
|
|
549
|
-
switch (attributeId) {
|
|
550
|
-
case "POSITION":
|
|
551
|
-
return "position";
|
|
552
|
-
case "NORMAL":
|
|
553
|
-
return "normal";
|
|
554
|
-
case "TEXCOORD_0":
|
|
555
|
-
case "TEXCOORD0":
|
|
556
|
-
case "TEXCOORD":
|
|
557
|
-
case "UV":
|
|
558
|
-
return "uv";
|
|
559
|
-
case "TEXCOORD_1":
|
|
560
|
-
return "uv1";
|
|
561
|
-
case "TEXCOORD_2":
|
|
562
|
-
return "uv2";
|
|
563
|
-
case "TEXCOORD_3":
|
|
564
|
-
return "uv3";
|
|
565
|
-
case "COLOR_0":
|
|
566
|
-
case "COLOR0":
|
|
567
|
-
case "COLOR":
|
|
568
|
-
return "color";
|
|
569
|
-
case "TANGENT":
|
|
570
|
-
return "tangent";
|
|
571
|
-
case "POSITION_INDEX":
|
|
572
|
-
return "positionIndex";
|
|
573
|
-
default:
|
|
574
|
-
this._logger.warn(`GeometryLoader.loadPrimitive: Unrecognized attribute id ${attributeId}.`);
|
|
575
|
-
}
|
|
576
|
-
return "";
|
|
577
|
-
}
|
|
578
|
-
loadAttribute(bufferAttribute, attributeId) {
|
|
579
|
-
let buffer;
|
|
580
|
-
if (bufferAttribute.byteStride &&
|
|
581
|
-
bufferAttribute.byteStride !== bufferAttribute.itemBytes) {
|
|
582
|
-
// Integer parameters to IB/IBA are in array elements, not bytes.
|
|
583
|
-
const ib = new THREE.InterleavedBuffer(bufferAttribute.array, bufferAttribute.byteStride / bufferAttribute.elementBytes);
|
|
584
|
-
buffer = new THREE.InterleavedBufferAttribute(ib, bufferAttribute.itemSize, (bufferAttribute.byteOffset % bufferAttribute.byteStride) /
|
|
585
|
-
bufferAttribute.elementBytes, bufferAttribute.normalized);
|
|
586
|
-
}
|
|
587
|
-
else {
|
|
588
|
-
buffer = new THREE.BufferAttribute(bufferAttribute.array, bufferAttribute.itemSize, attributeId === "COLOR_0" ||
|
|
589
|
-
attributeId === "COLOR0" ||
|
|
590
|
-
attributeId === "COLOR"
|
|
591
|
-
? true
|
|
592
|
-
: bufferAttribute.normalized);
|
|
593
|
-
}
|
|
594
|
-
if (bufferAttribute.sparse) {
|
|
595
|
-
if (bufferAttribute.array !== null) {
|
|
596
|
-
// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.
|
|
597
|
-
buffer = new THREE.BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized);
|
|
598
|
-
}
|
|
599
|
-
for (let i = 0, il = bufferAttribute.sparseIndices.length; i < il; i++) {
|
|
600
|
-
const index = bufferAttribute.sparseIndices[i];
|
|
601
|
-
buffer.setX(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize]);
|
|
602
|
-
if (bufferAttribute.itemSize >= 2)
|
|
603
|
-
buffer.setY(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 1]);
|
|
604
|
-
if (bufferAttribute.itemSize >= 3)
|
|
605
|
-
buffer.setZ(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 2]);
|
|
606
|
-
if (bufferAttribute.itemSize >= 4)
|
|
607
|
-
buffer.setW(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 3]);
|
|
608
|
-
if (bufferAttribute.itemSize >= 5)
|
|
609
|
-
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError("GeometryLoader.loadPrimitive: Unsupported itemSize in sparse BufferAttribute.");
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
return buffer;
|
|
613
|
-
}
|
|
614
|
-
removeFromPrimitiveCache(id) {
|
|
615
|
-
if (this._primitiveCache[id]) {
|
|
616
|
-
if (this._primitiveCache[id].counter === 1) {
|
|
617
|
-
this._primitiveCache[id].threeGeometry.dispose();
|
|
618
|
-
for (const key in this._primitiveCache[id].threeGeometry
|
|
619
|
-
.attributes)
|
|
620
|
-
this._primitiveCache[id].threeGeometry.deleteAttribute(key);
|
|
621
|
-
this._primitiveCache[id].threeGeometry.setIndex(null);
|
|
622
|
-
this._primitiveCache[id].clones.forEach((c) => {
|
|
623
|
-
c.dispose();
|
|
624
|
-
for (const key in c.attributes)
|
|
625
|
-
c.deleteAttribute(key);
|
|
626
|
-
c.setIndex(null);
|
|
627
|
-
});
|
|
628
|
-
delete this._primitiveCache[id];
|
|
629
|
-
}
|
|
630
|
-
else {
|
|
631
|
-
this._primitiveCache[id].counter--;
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
exports.GeometryLoader = GeometryLoader;
|
|
438
|
+
`,
|
|
439
|
+
};
|
|
440
|
+
this._gemNormalMaterial = new THREE.ShaderMaterial({
|
|
441
|
+
uniforms: THREE.UniformsUtils.clone(_normalShader.uniforms),
|
|
442
|
+
defines: _normalShader.defines,
|
|
443
|
+
vertexShader: _normalShader.vertexShader,
|
|
444
|
+
fragmentShader: _normalShader.fragmentShader,
|
|
445
|
+
});
|
|
446
|
+
this._gemNormalMaterial.blending = THREE.NoBlending;
|
|
447
|
+
this._gemNormalMaterial.side = THREE.DoubleSide;
|
|
448
|
+
this._gemScene.overrideMaterial = this._gemNormalMaterial;
|
|
449
|
+
}
|
|
450
|
+
const mesh = new THREE.Mesh(geometry.clone(), this._gemNormalMaterial);
|
|
451
|
+
mesh.geometry.center();
|
|
452
|
+
this._gemScene.add(mesh);
|
|
453
|
+
this._gemCubeCamera.update(this._renderingEngine.renderer, this._gemScene);
|
|
454
|
+
this._gemScene.remove(mesh);
|
|
455
|
+
mesh.geometry.dispose();
|
|
456
|
+
mesh.material.dispose();
|
|
457
|
+
this._gemCubeCamera.renderTarget.texture.userData = {
|
|
458
|
+
SDid: geometryData.primitive.id,
|
|
459
|
+
SDversion: geometryData.primitive.version,
|
|
460
|
+
};
|
|
461
|
+
this._gemSphericalMapsCache[geometryData.primitive.id + "_" + geometryData.primitive.version] = {
|
|
462
|
+
texture: this._gemCubeCameraRenderTarget.texture,
|
|
463
|
+
renderTarget: this._gemCubeCameraRenderTarget,
|
|
464
|
+
counter: 1,
|
|
465
|
+
};
|
|
466
|
+
return this._gemSphericalMapsCache[geometryData.primitive.id + "_" + geometryData.primitive.version].texture;
|
|
467
|
+
}
|
|
468
|
+
createMesh(geometry, threeGeometry, material, instanceData) {
|
|
469
|
+
let threeGeometryObject;
|
|
470
|
+
if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.POINTS) {
|
|
471
|
+
const points = new THREE.Points(threeGeometry, material);
|
|
472
|
+
geometry.convertedObject[this._renderingEngine.id] = points;
|
|
473
|
+
threeGeometryObject = points;
|
|
474
|
+
}
|
|
475
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINES) {
|
|
476
|
+
const lineSegments = new THREE.LineSegments(threeGeometry, material);
|
|
477
|
+
geometry.convertedObject[this._renderingEngine.id] = lineSegments;
|
|
478
|
+
threeGeometryObject = lineSegments;
|
|
479
|
+
}
|
|
480
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_LOOP) {
|
|
481
|
+
const lineLoop = new THREE.LineLoop(threeGeometry, material);
|
|
482
|
+
geometry.convertedObject[this._renderingEngine.id] = lineLoop;
|
|
483
|
+
threeGeometryObject = lineLoop;
|
|
484
|
+
}
|
|
485
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_STRIP) {
|
|
486
|
+
const line = new THREE.Line(threeGeometry, material);
|
|
487
|
+
geometry.convertedObject[this._renderingEngine.id] = line;
|
|
488
|
+
threeGeometryObject = line;
|
|
489
|
+
}
|
|
490
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLES ||
|
|
491
|
+
geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_STRIP ||
|
|
492
|
+
geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN) {
|
|
493
|
+
const bufferGeometry = threeGeometry;
|
|
494
|
+
if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_STRIP ||
|
|
495
|
+
geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN)
|
|
496
|
+
this.convertToTriangleMode(bufferGeometry, geometry.mode);
|
|
497
|
+
if (instanceData && instanceData.instanceMatrices.length > 0) {
|
|
498
|
+
const instanceCount = instanceData.instanceMatrices.length;
|
|
499
|
+
const instancedMesh = new THREE.InstancedMesh(bufferGeometry, material, instanceCount);
|
|
500
|
+
// Reuse matrix object to reduce allocations
|
|
501
|
+
const tempMatrix = new THREE.Matrix4();
|
|
502
|
+
const useInstanceColors = this._renderingEngine.type !== viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES;
|
|
503
|
+
for (let i = 0; i < instanceCount; i++) {
|
|
504
|
+
tempMatrix.fromArray(instanceData.instanceMatrices[i]);
|
|
505
|
+
instancedMesh.setMatrixAt(i, tempMatrix);
|
|
506
|
+
if (useInstanceColors) {
|
|
507
|
+
instancedMesh.setColorAt(i, this._renderingEngine.createThreeJsColor(instanceData.instanceColors[i]));
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
if (instancedMesh.instanceColor)
|
|
511
|
+
instancedMesh.instanceColor.needsUpdate = true;
|
|
512
|
+
instancedMesh.instanceMatrix.needsUpdate = true;
|
|
513
|
+
// Enable frustum culling for instanced meshes
|
|
514
|
+
instancedMesh.frustumCulled = true;
|
|
515
|
+
geometry.convertedObject[this._renderingEngine.id] =
|
|
516
|
+
instancedMesh;
|
|
517
|
+
threeGeometryObject = instancedMesh;
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
const mesh = new THREE.Mesh(bufferGeometry, material);
|
|
521
|
+
geometry.convertedObject[this._renderingEngine.id] = mesh;
|
|
522
|
+
threeGeometryObject = mesh;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError(`GeometryLoader.load: Unrecognized primitive mode ${geometry.mode}.`);
|
|
527
|
+
}
|
|
528
|
+
// Cache userData and bounding box data to reduce allocations
|
|
529
|
+
const userDataCache = {
|
|
530
|
+
SDid: geometry.id,
|
|
531
|
+
SDversion: geometry.version,
|
|
532
|
+
primitiveSDid: geometry.primitive.id,
|
|
533
|
+
primitiveSDversion: geometry.primitive.version,
|
|
534
|
+
};
|
|
535
|
+
const bbox = geometry.boundingBox;
|
|
536
|
+
const bboxMin = new THREE.Vector3(bbox.min[0], bbox.min[1], bbox.min[2]);
|
|
537
|
+
const bboxMax = new THREE.Vector3(bbox.max[0], bbox.max[1], bbox.max[2]);
|
|
538
|
+
const bsphereCenter = new THREE.Vector3(bbox.boundingSphere.center[0], bbox.boundingSphere.center[1], bbox.boundingSphere.center[2]);
|
|
539
|
+
const renderOrder = geometry.renderOrder;
|
|
540
|
+
const threeGeom = threeGeometryObject.geometry;
|
|
541
|
+
threeGeom.userData = userDataCache;
|
|
542
|
+
threeGeometryObject.renderOrder = renderOrder;
|
|
543
|
+
// Performance: Disable matrixAutoUpdate for static geometry (no animations/transforms)
|
|
544
|
+
// This prevents Three.js from recalculating matrices every frame
|
|
545
|
+
if (!instanceData) {
|
|
546
|
+
threeGeometryObject.matrixAutoUpdate = false;
|
|
547
|
+
}
|
|
548
|
+
if (threeGeometryObject instanceof THREE.Mesh &&
|
|
549
|
+
threeGeometryObject.userData.transparencyPlaceholder !== true) {
|
|
550
|
+
// Assign bounding box directly without unnecessary clones
|
|
551
|
+
threeGeom.boundingBox = new THREE.Box3(bboxMin, bboxMax);
|
|
552
|
+
threeGeom.boundingSphere = new THREE.Sphere(bsphereCenter, bbox.boundingSphere.radius);
|
|
553
|
+
threeGeometryObject.morphTargetInfluences =
|
|
554
|
+
geometry.morphWeights;
|
|
555
|
+
}
|
|
556
|
+
return threeGeometryObject;
|
|
557
|
+
}
|
|
558
|
+
getAttributeName(attributeId) {
|
|
559
|
+
switch (attributeId) {
|
|
560
|
+
case "POSITION":
|
|
561
|
+
return "position";
|
|
562
|
+
case "NORMAL":
|
|
563
|
+
return "normal";
|
|
564
|
+
case "TEXCOORD_0":
|
|
565
|
+
case "TEXCOORD0":
|
|
566
|
+
case "TEXCOORD":
|
|
567
|
+
case "UV":
|
|
568
|
+
return "uv";
|
|
569
|
+
case "TEXCOORD_1":
|
|
570
|
+
return "uv1";
|
|
571
|
+
case "TEXCOORD_2":
|
|
572
|
+
return "uv2";
|
|
573
|
+
case "TEXCOORD_3":
|
|
574
|
+
return "uv3";
|
|
575
|
+
case "COLOR_0":
|
|
576
|
+
case "COLOR0":
|
|
577
|
+
case "COLOR":
|
|
578
|
+
return "color";
|
|
579
|
+
case "TANGENT":
|
|
580
|
+
return "tangent";
|
|
581
|
+
case "POSITION_INDEX":
|
|
582
|
+
return "positionIndex";
|
|
583
|
+
default:
|
|
584
|
+
this._logger.warn(`GeometryLoader.loadPrimitive: Unrecognized attribute id ${attributeId}.`);
|
|
585
|
+
}
|
|
586
|
+
return "";
|
|
587
|
+
}
|
|
588
|
+
loadAttribute(bufferAttribute, attributeId) {
|
|
589
|
+
let buffer;
|
|
590
|
+
if (bufferAttribute.byteStride &&
|
|
591
|
+
bufferAttribute.byteStride !== bufferAttribute.itemBytes) {
|
|
592
|
+
// Integer parameters to IB/IBA are in array elements, not bytes.
|
|
593
|
+
const ib = new THREE.InterleavedBuffer(bufferAttribute.array, bufferAttribute.byteStride / bufferAttribute.elementBytes);
|
|
594
|
+
buffer = new THREE.InterleavedBufferAttribute(ib, bufferAttribute.itemSize, (bufferAttribute.byteOffset % bufferAttribute.byteStride) /
|
|
595
|
+
bufferAttribute.elementBytes, bufferAttribute.normalized);
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
buffer = new THREE.BufferAttribute(bufferAttribute.array, bufferAttribute.itemSize, attributeId === "COLOR_0" ||
|
|
599
|
+
attributeId === "COLOR0" ||
|
|
600
|
+
attributeId === "COLOR"
|
|
601
|
+
? true
|
|
602
|
+
: bufferAttribute.normalized);
|
|
603
|
+
}
|
|
604
|
+
if (bufferAttribute.sparse) {
|
|
605
|
+
if (bufferAttribute.array !== null) {
|
|
606
|
+
// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.
|
|
607
|
+
buffer = new THREE.BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized);
|
|
608
|
+
}
|
|
609
|
+
for (let i = 0, il = bufferAttribute.sparseIndices.length; i < il; i++) {
|
|
610
|
+
const index = bufferAttribute.sparseIndices[i];
|
|
611
|
+
buffer.setX(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize]);
|
|
612
|
+
if (bufferAttribute.itemSize >= 2)
|
|
613
|
+
buffer.setY(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 1]);
|
|
614
|
+
if (bufferAttribute.itemSize >= 3)
|
|
615
|
+
buffer.setZ(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 2]);
|
|
616
|
+
if (bufferAttribute.itemSize >= 4)
|
|
617
|
+
buffer.setW(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 3]);
|
|
618
|
+
if (bufferAttribute.itemSize >= 5)
|
|
619
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError("GeometryLoader.loadPrimitive: Unsupported itemSize in sparse BufferAttribute.");
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
return buffer;
|
|
623
|
+
}
|
|
624
|
+
removeFromPrimitiveCache(id) {
|
|
625
|
+
if (this._primitiveCache[id]) {
|
|
626
|
+
if (this._primitiveCache[id].counter === 1) {
|
|
627
|
+
this._primitiveCache[id].threeGeometry.dispose();
|
|
628
|
+
for (const key in this._primitiveCache[id].threeGeometry
|
|
629
|
+
.attributes)
|
|
630
|
+
this._primitiveCache[id].threeGeometry.deleteAttribute(key);
|
|
631
|
+
this._primitiveCache[id].threeGeometry.setIndex(null);
|
|
632
|
+
this._primitiveCache[id].clones.forEach((c) => {
|
|
633
|
+
c.dispose();
|
|
634
|
+
for (const key in c.attributes)
|
|
635
|
+
c.deleteAttribute(key);
|
|
636
|
+
c.setIndex(null);
|
|
637
|
+
});
|
|
638
|
+
delete this._primitiveCache[id];
|
|
639
|
+
}
|
|
640
|
+
else {
|
|
641
|
+
this._primitiveCache[id].counter--;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
exports.GeometryLoader = GeometryLoader;
|
|
637
647
|
//# sourceMappingURL=GeometryLoader.js.map
|