@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +73 -0
- package/README.md +3 -0
- package/dist/RenderingEngine.d.ts +296 -0
- package/dist/RenderingEngine.d.ts.map +1 -0
- package/dist/RenderingEngine.js +1079 -0
- package/dist/RenderingEngine.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.d.ts +11 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.d.ts.map +1 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.js +169 -0
- package/dist/injectors/Tag3dGeometryCreationInjector.js.map +1 -0
- package/dist/injectors/TextureUnifierInjector.d.ts +14 -0
- package/dist/injectors/TextureUnifierInjector.d.ts.map +1 -0
- package/dist/injectors/TextureUnifierInjector.js +227 -0
- package/dist/injectors/TextureUnifierInjector.js.map +1 -0
- package/dist/interfaces/ILoader.d.ts +4 -0
- package/dist/interfaces/ILoader.d.ts.map +1 -0
- package/dist/interfaces/ILoader.js +3 -0
- package/dist/interfaces/ILoader.js.map +1 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts +307 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts.map +1 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.js +31 -0
- package/dist/interfaces/IPostProcessingEffectDefinitions.js.map +1 -0
- package/dist/interfaces/IRenderingEngine.d.ts +43 -0
- package/dist/interfaces/IRenderingEngine.d.ts.map +1 -0
- package/dist/interfaces/IRenderingEngine.js +3 -0
- package/dist/interfaces/IRenderingEngine.js.map +1 -0
- package/dist/loaders/EnvironmentMapLoader.d.ts +98 -0
- package/dist/loaders/EnvironmentMapLoader.d.ts.map +1 -0
- package/dist/loaders/EnvironmentMapLoader.js +348 -0
- package/dist/loaders/EnvironmentMapLoader.js.map +1 -0
- package/dist/loaders/GeometryLoader.d.ts +38 -0
- package/dist/loaders/GeometryLoader.d.ts.map +1 -0
- package/dist/loaders/GeometryLoader.js +505 -0
- package/dist/loaders/GeometryLoader.js.map +1 -0
- package/dist/loaders/HTMLElementAnchorLoader.d.ts +17 -0
- package/dist/loaders/HTMLElementAnchorLoader.d.ts.map +1 -0
- package/dist/loaders/HTMLElementAnchorLoader.js +84 -0
- package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -0
- package/dist/loaders/LightLoader.d.ts +19 -0
- package/dist/loaders/LightLoader.d.ts.map +1 -0
- package/dist/loaders/LightLoader.js +152 -0
- package/dist/loaders/LightLoader.js.map +1 -0
- package/dist/loaders/MaterialLoader.d.ts +99 -0
- package/dist/loaders/MaterialLoader.d.ts.map +1 -0
- package/dist/loaders/MaterialLoader.js +1175 -0
- package/dist/loaders/MaterialLoader.js.map +1 -0
- package/dist/managers/CameraManager.d.ts +20 -0
- package/dist/managers/CameraManager.d.ts.map +1 -0
- package/dist/managers/CameraManager.js +195 -0
- package/dist/managers/CameraManager.js.map +1 -0
- package/dist/managers/EnvironmentGeometryManager.d.ts +43 -0
- package/dist/managers/EnvironmentGeometryManager.d.ts.map +1 -0
- package/dist/managers/EnvironmentGeometryManager.js +210 -0
- package/dist/managers/EnvironmentGeometryManager.js.map +1 -0
- package/dist/managers/PostProcessingManager.d.ts +1014 -0
- package/dist/managers/PostProcessingManager.d.ts.map +1 -0
- package/dist/managers/PostProcessingManager.js +1013 -0
- package/dist/managers/PostProcessingManager.js.map +1 -0
- package/dist/managers/RenderingManager.d.ts +83 -0
- package/dist/managers/RenderingManager.d.ts.map +1 -0
- package/dist/managers/RenderingManager.js +567 -0
- package/dist/managers/RenderingManager.js.map +1 -0
- package/dist/managers/SceneTracingManager.d.ts +26 -0
- package/dist/managers/SceneTracingManager.d.ts.map +1 -0
- package/dist/managers/SceneTracingManager.js +122 -0
- package/dist/managers/SceneTracingManager.js.map +1 -0
- package/dist/managers/SceneTreeManager.d.ts +55 -0
- package/dist/managers/SceneTreeManager.d.ts.map +1 -0
- package/dist/managers/SceneTreeManager.js +501 -0
- package/dist/managers/SceneTreeManager.js.map +1 -0
- package/dist/managers/postprocessing/GodRaysManager.d.ts +13 -0
- package/dist/managers/postprocessing/GodRaysManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/GodRaysManager.js +64 -0
- package/dist/managers/postprocessing/GodRaysManager.js.map +1 -0
- package/dist/managers/postprocessing/OutlineManager.d.ts +15 -0
- package/dist/managers/postprocessing/OutlineManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/OutlineManager.js +67 -0
- package/dist/managers/postprocessing/OutlineManager.js.map +1 -0
- package/dist/managers/postprocessing/SSAARenderPass.d.ts +54 -0
- package/dist/managers/postprocessing/SSAARenderPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/SSAARenderPass.js +234 -0
- package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +15 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.d.ts.map +1 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.js +67 -0
- package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +47 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.js +134 -0
- package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +13 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.js +78 -0
- package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +2 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +23 -0
- package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +15 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +25 -0
- package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +2 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +102 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao.js.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts +2 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js +99 -0
- package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +37 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +171 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +2 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +131 -0
- package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +15 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +76 -0
- package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +2 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +134 -0
- package/dist/managers/postprocessing/ao/ssao/shader/ssao.js.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +2 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.js +12 -0
- package/dist/managers/postprocessing/ao/utils/shader/basic.js.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +2 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts.map +1 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +42 -0
- package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js.map +1 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +38 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.js +106 -0
- package/dist/managers/postprocessing/utils/CopyMaterial.js.map +1 -0
- package/dist/managers/postprocessing/utils/CopyShader.d.ts +14 -0
- package/dist/managers/postprocessing/utils/CopyShader.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/CopyShader.js +36 -0
- package/dist/managers/postprocessing/utils/CopyShader.js.map +1 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +10 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.js +29 -0
- package/dist/managers/postprocessing/utils/FullScreenQuad.js.map +1 -0
- package/dist/managers/postprocessing/utils/NormalPass.d.ts +88 -0
- package/dist/managers/postprocessing/utils/NormalPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/NormalPass.js +157 -0
- package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -0
- package/dist/managers/postprocessing/utils/RenderPass.d.ts +115 -0
- package/dist/managers/postprocessing/utils/RenderPass.d.ts.map +1 -0
- package/dist/managers/postprocessing/utils/RenderPass.js +251 -0
- package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -0
- package/dist/materials/GemMaterial.d.ts +38 -0
- package/dist/materials/GemMaterial.d.ts.map +1 -0
- package/dist/materials/GemMaterial.js +253 -0
- package/dist/materials/GemMaterial.js.map +1 -0
- package/dist/materials/MeshUnlitMaterialParameters.d.ts +4 -0
- package/dist/materials/MeshUnlitMaterialParameters.d.ts.map +1 -0
- package/dist/materials/MeshUnlitMaterialParameters.js +3 -0
- package/dist/materials/MeshUnlitMaterialParameters.js.map +1 -0
- package/dist/materials/MultiPointsMaterial.d.ts +94 -0
- package/dist/materials/MultiPointsMaterial.d.ts.map +1 -0
- package/dist/materials/MultiPointsMaterial.js +567 -0
- package/dist/materials/MultiPointsMaterial.js.map +1 -0
- package/dist/materials/SpecularGlossinessMaterial.d.ts +14 -0
- package/dist/materials/SpecularGlossinessMaterial.d.ts.map +1 -0
- package/dist/materials/SpecularGlossinessMaterial.js +162 -0
- package/dist/materials/SpecularGlossinessMaterial.js.map +1 -0
- package/dist/objects/SDBone.d.ts +13 -0
- package/dist/objects/SDBone.d.ts.map +1 -0
- package/dist/objects/SDBone.js +75 -0
- package/dist/objects/SDBone.js.map +1 -0
- package/dist/objects/SDColor.d.ts +17 -0
- package/dist/objects/SDColor.d.ts.map +1 -0
- package/dist/objects/SDColor.js +49 -0
- package/dist/objects/SDColor.js.map +1 -0
- package/dist/objects/SDData.d.ts +19 -0
- package/dist/objects/SDData.d.ts.map +1 -0
- package/dist/objects/SDData.js +48 -0
- package/dist/objects/SDData.js.map +1 -0
- package/dist/objects/SDObject.d.ts +14 -0
- package/dist/objects/SDObject.d.ts.map +1 -0
- package/dist/objects/SDObject.js +81 -0
- package/dist/objects/SDObject.js.map +1 -0
- package/dist/shaders/PCSS.d.ts +3 -0
- package/dist/shaders/PCSS.d.ts.map +1 -0
- package/dist/shaders/PCSS.js +127 -0
- package/dist/shaders/PCSS.js.map +1 -0
- package/dist/shaders/gem.d.ts +3 -0
- package/dist/shaders/gem.d.ts.map +1 -0
- package/dist/shaders/gem.js +578 -0
- package/dist/shaders/gem.js.map +1 -0
- package/dist/shaders/multi_points.d.ts +3 -0
- package/dist/shaders/multi_points.d.ts.map +1 -0
- package/dist/shaders/multi_points.js +294 -0
- package/dist/shaders/multi_points.js.map +1 -0
- package/dist/styling/viewport-css.d.ts +2 -0
- package/dist/styling/viewport-css.d.ts.map +1 -0
- package/dist/styling/viewport-css.js +117 -0
- package/dist/styling/viewport-css.js.map +1 -0
- package/dist/three/font.d.ts +2365 -0
- package/dist/three/font.d.ts.map +1 -0
- package/dist/three/font.js +6 -0
- package/dist/three/font.js.map +1 -0
- package/dist/three/geometries/TextGeometry.d.ts +22 -0
- package/dist/three/geometries/TextGeometry.d.ts.map +1 -0
- package/dist/three/geometries/TextGeometry.js +45 -0
- package/dist/three/geometries/TextGeometry.js.map +1 -0
- package/dist/three/loaders/FontLoader.d.ts +15 -0
- package/dist/three/loaders/FontLoader.d.ts.map +1 -0
- package/dist/three/loaders/FontLoader.js +118 -0
- package/dist/three/loaders/FontLoader.js.map +1 -0
- package/dist/three/loaders/RGBELoader.d.ts +24 -0
- package/dist/three/loaders/RGBELoader.d.ts.map +1 -0
- package/dist/three/loaders/RGBELoader.js +299 -0
- package/dist/three/loaders/RGBELoader.js.map +1 -0
- package/dist/types/IThreejsData.d.ts +7 -0
- package/dist/types/IThreejsData.d.ts.map +1 -0
- package/dist/types/IThreejsData.js +3 -0
- package/dist/types/IThreejsData.js.map +1 -0
- package/dist/types/ThreejsData.d.ts +11 -0
- package/dist/types/ThreejsData.d.ts.map +1 -0
- package/dist/types/ThreejsData.js +42 -0
- package/dist/types/ThreejsData.js.map +1 -0
- package/package.json +65 -0
- package/src/RenderingEngine.ts +1342 -0
- package/src/index.ts +23 -0
- package/src/injectors/Tag3dGeometryCreationInjector.ts +170 -0
- package/src/injectors/TextureUnifierInjector.ts +224 -0
- package/src/interfaces/ILoader.ts +3 -0
- package/src/interfaces/IPostProcessingEffectDefinitions.ts +402 -0
- package/src/interfaces/IRenderingEngine.ts +48 -0
- package/src/loaders/EnvironmentMapLoader.ts +355 -0
- package/src/loaders/GeometryLoader.ts +565 -0
- package/src/loaders/HTMLElementAnchorLoader.ts +107 -0
- package/src/loaders/LightLoader.ts +171 -0
- package/src/loaders/MaterialLoader.ts +1418 -0
- package/src/managers/CameraManager.ts +178 -0
- package/src/managers/EnvironmentGeometryManager.ts +224 -0
- package/src/managers/PostProcessingManager.ts +1169 -0
- package/src/managers/RenderingManager.ts +657 -0
- package/src/managers/SceneTracingManager.ts +120 -0
- package/src/managers/SceneTreeManager.ts +569 -0
- package/src/managers/postprocessing/GodRaysManager.ts +52 -0
- package/src/managers/postprocessing/OutlineManager.ts +58 -0
- package/src/managers/postprocessing/SSAARenderPass.ts +339 -0
- package/src/managers/postprocessing/SelectiveBloomManager.ts +58 -0
- package/src/managers/postprocessing/ao/ao/AOEffect.ts +180 -0
- package/src/managers/postprocessing/ao/ao/AOPass.ts +128 -0
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.glsl +17 -0
- package/src/managers/postprocessing/ao/ao/shader/ao_compose.ts +19 -0
- package/src/managers/postprocessing/ao/hbao/HBAOEffect.ts +41 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao.glsl +96 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao.ts +98 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.glsl +92 -0
- package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.ts +95 -0
- package/src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts +245 -0
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.glsl +125 -0
- package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts +127 -0
- package/src/managers/postprocessing/ao/ssao/SSAOEffect.ts +106 -0
- package/src/managers/postprocessing/ao/ssao/shader/ssao.glsl +128 -0
- package/src/managers/postprocessing/ao/ssao/shader/ssao.ts +130 -0
- package/src/managers/postprocessing/ao/utils/shader/basic.glsl +6 -0
- package/src/managers/postprocessing/ao/utils/shader/basic.ts +8 -0
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.glsl +36 -0
- package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts +38 -0
- package/src/managers/postprocessing/utils/CopyMaterial.ts +130 -0
- package/src/managers/postprocessing/utils/CopyShader.ts +39 -0
- package/src/managers/postprocessing/utils/FullScreenQuad.ts +47 -0
- package/src/managers/postprocessing/utils/NormalPass.ts +222 -0
- package/src/managers/postprocessing/utils/RenderPass.ts +366 -0
- package/src/materials/GemMaterial.ts +268 -0
- package/src/materials/MeshUnlitMaterialParameters.ts +4 -0
- package/src/materials/MultiPointsMaterial.ts +646 -0
- package/src/materials/SpecularGlossinessMaterial.ts +182 -0
- package/src/objects/SDBone.ts +51 -0
- package/src/objects/SDColor.ts +54 -0
- package/src/objects/SDData.ts +44 -0
- package/src/objects/SDObject.ts +58 -0
- package/src/shaders/PCSS.ts +124 -0
- package/src/shaders/gem.ts +575 -0
- package/src/shaders/gem_frag.glsl +517 -0
- package/src/shaders/gem_vert.glsl +53 -0
- package/src/shaders/multi_points.ts +291 -0
- package/src/shaders/multi_points_frag.glsl +166 -0
- package/src/shaders/multi_points_vert.glsl +120 -0
- package/src/styling/viewport-css.ts +113 -0
- package/src/styling/viewport.css +111 -0
- package/src/three/font.ts +2 -0
- package/src/three/geometries/TextGeometry.ts +58 -0
- package/src/three/loaders/FontLoader.ts +205 -0
- package/src/three/loaders/RGBELoader.ts +496 -0
- package/src/types/IThreejsData.ts +16 -0
- package/src/types/ThreejsData.ts +43 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,505 @@
|
|
|
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 (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.GeometryLoader = void 0;
|
|
27
|
+
const THREE = __importStar(require("three"));
|
|
28
|
+
const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
|
|
29
|
+
const GemMaterial_1 = require("../materials/GemMaterial");
|
|
30
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
31
|
+
const viewer_rendering_engine_rendering_engine_1 = require("@shapediver/viewer.rendering-engine.rendering-engine");
|
|
32
|
+
const SDData_1 = require("../objects/SDData");
|
|
33
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
34
|
+
class GeometryLoader {
|
|
35
|
+
// #endregion Properties (8)
|
|
36
|
+
// #region Constructors (1)
|
|
37
|
+
constructor(_renderingEngine) {
|
|
38
|
+
this._renderingEngine = _renderingEngine;
|
|
39
|
+
this._gemSphericalMapsCache = {};
|
|
40
|
+
this._geometryCache = {};
|
|
41
|
+
this._logger = viewer_shared_services_1.Logger.instance;
|
|
42
|
+
this._primitiveCache = {};
|
|
43
|
+
}
|
|
44
|
+
// #endregion Constructors (1)
|
|
45
|
+
// #region Public Methods (7)
|
|
46
|
+
emptyGeometryCache() {
|
|
47
|
+
this._geometryCache = {};
|
|
48
|
+
this._primitiveCache = {};
|
|
49
|
+
}
|
|
50
|
+
init() { }
|
|
51
|
+
/**
|
|
52
|
+
* Create a geometry object with the provided geometry data.
|
|
53
|
+
*
|
|
54
|
+
* @param geometry the geometry data
|
|
55
|
+
* @returns the geometry object
|
|
56
|
+
*/
|
|
57
|
+
load(geometry, parent, newChild, skeleton) {
|
|
58
|
+
const threeGeometry = (() => {
|
|
59
|
+
if (!this._primitiveCache[geometry.primitive.id + '_' + geometry.primitive.version]) {
|
|
60
|
+
return this.loadPrimitive(geometry.primitive);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this._primitiveCache[geometry.primitive.id + '_' + geometry.primitive.version].counter++;
|
|
64
|
+
const clone = this._primitiveCache[geometry.primitive.id + '_' + geometry.primitive.version].threeGeometry.clone();
|
|
65
|
+
this._primitiveCache[geometry.primitive.id + '_' + geometry.primitive.version].clones.push(clone);
|
|
66
|
+
return clone;
|
|
67
|
+
}
|
|
68
|
+
})();
|
|
69
|
+
let incomingMaterialData;
|
|
70
|
+
if (geometry.effectMaterials.length > 0) {
|
|
71
|
+
incomingMaterialData = geometry.effectMaterials[geometry.effectMaterials.length - 1].material;
|
|
72
|
+
}
|
|
73
|
+
else if (this._renderingEngine.type === viewer_rendering_engine_rendering_engine_1.RENDERER_TYPE.ATTRIBUTES) {
|
|
74
|
+
incomingMaterialData = geometry.attributeMaterial;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
incomingMaterialData = geometry.material;
|
|
78
|
+
}
|
|
79
|
+
const materialSettings = {
|
|
80
|
+
mode: geometry.mode,
|
|
81
|
+
useVertexTangents: threeGeometry.attributes.tangent !== undefined,
|
|
82
|
+
useVertexColors: threeGeometry.attributes.color !== undefined && this._renderingEngine.type !== viewer_rendering_engine_rendering_engine_1.RENDERER_TYPE.ATTRIBUTES,
|
|
83
|
+
useFlatShading: threeGeometry.attributes.normal === undefined,
|
|
84
|
+
useMorphTargets: Object.keys(threeGeometry.morphAttributes).length > 0,
|
|
85
|
+
useMorphNormals: Object.keys(threeGeometry.morphAttributes).length > 0 && threeGeometry.morphAttributes.normal !== undefined
|
|
86
|
+
};
|
|
87
|
+
if (incomingMaterialData instanceof viewer_shared_types_1.MaterialGemData) {
|
|
88
|
+
const gemMaterialData = incomingMaterialData;
|
|
89
|
+
threeGeometry.computeBoundingSphere();
|
|
90
|
+
const sphericalNormalMap = this.createCubeNormalMap(geometry, threeGeometry);
|
|
91
|
+
const center = threeGeometry.boundingSphere.center, radius = threeGeometry.boundingSphere.radius;
|
|
92
|
+
gemMaterialData.side = viewer_shared_types_1.MATERIAL_SIDE.FRONT;
|
|
93
|
+
gemMaterialData.center = gl_matrix_1.vec3.fromValues(center.x, center.y, center.z);
|
|
94
|
+
gemMaterialData.radius = radius;
|
|
95
|
+
gemMaterialData.sphericalNormalMap = sphericalNormalMap;
|
|
96
|
+
}
|
|
97
|
+
while (parent.children.length !== 0)
|
|
98
|
+
parent.remove(parent.children[0]);
|
|
99
|
+
const material = this._renderingEngine.materialLoader.load(incomingMaterialData || geometry, materialSettings);
|
|
100
|
+
let obj;
|
|
101
|
+
if (this._geometryCache[geometry.id + '_' + geometry.version] && !skeleton) {
|
|
102
|
+
obj = this._geometryCache[geometry.id + '_' + geometry.version].obj;
|
|
103
|
+
// case 1: in case the geometry data was cloned and this is a different object
|
|
104
|
+
// case 2: it is a new child
|
|
105
|
+
if (newChild === false && obj.parent !== parent || newChild === true) {
|
|
106
|
+
obj = obj.cloneObject();
|
|
107
|
+
parent.add(obj);
|
|
108
|
+
}
|
|
109
|
+
obj.traverse(o => {
|
|
110
|
+
if (o instanceof THREE.Points ||
|
|
111
|
+
o instanceof THREE.LineSegments ||
|
|
112
|
+
o instanceof THREE.LineLoop ||
|
|
113
|
+
o instanceof THREE.Line ||
|
|
114
|
+
o instanceof THREE.Mesh)
|
|
115
|
+
o.material = material;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
obj = new SDData_1.SDData(geometry.id, geometry.version);
|
|
120
|
+
this.createMesh(obj, geometry, threeGeometry, material, skeleton);
|
|
121
|
+
this._geometryCache[geometry.id + '_' + geometry.version] = { obj };
|
|
122
|
+
parent.add(obj);
|
|
123
|
+
}
|
|
124
|
+
obj.children.forEach(m => m.castShadow = true);
|
|
125
|
+
if (material instanceof GemMaterial_1.GemMaterial) {
|
|
126
|
+
obj.children.forEach(m => m.receiveShadow = false);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
obj.children.forEach(m => m.receiveShadow = true);
|
|
130
|
+
}
|
|
131
|
+
return geometry.boundingBox.clone();
|
|
132
|
+
}
|
|
133
|
+
loadPrimitive(primitive) {
|
|
134
|
+
const geometry = new THREE.BufferGeometry();
|
|
135
|
+
if (primitive.indices)
|
|
136
|
+
geometry.setIndex(new THREE.BufferAttribute(primitive.indices.array, primitive.indices.itemSize));
|
|
137
|
+
for (const attributeId in primitive.attributes) {
|
|
138
|
+
const buffer = this.loadAttribute(primitive.attributes[attributeId], attributeId);
|
|
139
|
+
const attributeName = this.getAttributeName(attributeId);
|
|
140
|
+
if (attributeId === 'NORMAL')
|
|
141
|
+
if (this.checkNormals(primitive, attributeId, buffer, geometry))
|
|
142
|
+
continue;
|
|
143
|
+
geometry.setAttribute(attributeName, buffer);
|
|
144
|
+
const morphAttributeData = primitive.attributes[attributeId].morphAttributeData;
|
|
145
|
+
if (morphAttributeData.length > 0) {
|
|
146
|
+
geometry.morphTargetsRelative = true;
|
|
147
|
+
const buffers = [];
|
|
148
|
+
for (let i = 0; i < morphAttributeData.length; i++)
|
|
149
|
+
buffers.push(this.loadAttribute(morphAttributeData[i], attributeId));
|
|
150
|
+
geometry.morphAttributes[attributeName] = buffers;
|
|
151
|
+
}
|
|
152
|
+
// we copy the uv coordinates into the second set of uv coordinates if there are none
|
|
153
|
+
// this allows for the usage of AO and light maps that share this coordinate set
|
|
154
|
+
const attributeIdUV2 = 'TEXCOORD_1', attributeNameUV2 = 'uv1';
|
|
155
|
+
if (attributeName === 'uv' && !primitive.attributes[attributeIdUV2]) {
|
|
156
|
+
geometry.setAttribute(attributeNameUV2, buffer);
|
|
157
|
+
const morphAttributeData = primitive.attributes[attributeId].morphAttributeData;
|
|
158
|
+
if (morphAttributeData.length > 0) {
|
|
159
|
+
geometry.morphTargetsRelative = true;
|
|
160
|
+
const buffers = [];
|
|
161
|
+
for (let i = 0; i < morphAttributeData.length; i++)
|
|
162
|
+
buffers.push(this.loadAttribute(morphAttributeData[i], attributeId));
|
|
163
|
+
geometry.morphAttributes[attributeNameUV2] = buffers;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
primitive.convertedObject[this._renderingEngine.id] = geometry;
|
|
168
|
+
this._primitiveCache[primitive.id + '_' + primitive.version] = { threeGeometry: geometry, counter: 1, clones: [] };
|
|
169
|
+
return geometry;
|
|
170
|
+
}
|
|
171
|
+
removeFromGemSphericalMapsCache(id) {
|
|
172
|
+
if (this._gemSphericalMapsCache[id]) {
|
|
173
|
+
if (this._gemSphericalMapsCache[id].counter === 1) {
|
|
174
|
+
this._gemSphericalMapsCache[id].renderTarget.dispose();
|
|
175
|
+
this._gemSphericalMapsCache[id].texture.dispose();
|
|
176
|
+
delete this._gemSphericalMapsCache[id];
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this._gemSphericalMapsCache[id].counter--;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
removeFromGeometryCache(id) {
|
|
184
|
+
if (this._geometryCache[id])
|
|
185
|
+
delete this._geometryCache[id];
|
|
186
|
+
}
|
|
187
|
+
removeFromPrimitiveCache(id) {
|
|
188
|
+
if (this._primitiveCache[id]) {
|
|
189
|
+
if (this._primitiveCache[id].counter === 1) {
|
|
190
|
+
this._primitiveCache[id].threeGeometry.dispose();
|
|
191
|
+
for (const key in this._primitiveCache[id].threeGeometry.attributes)
|
|
192
|
+
this._primitiveCache[id].threeGeometry.deleteAttribute(key);
|
|
193
|
+
this._primitiveCache[id].threeGeometry.setIndex(null);
|
|
194
|
+
this._primitiveCache[id].clones.forEach(c => {
|
|
195
|
+
c.dispose();
|
|
196
|
+
for (const key in c.attributes)
|
|
197
|
+
c.deleteAttribute(key);
|
|
198
|
+
c.setIndex(null);
|
|
199
|
+
});
|
|
200
|
+
delete this._primitiveCache[id];
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
this._primitiveCache[id].counter--;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// #endregion Public Methods (7)
|
|
208
|
+
// #region Private Methods (6)
|
|
209
|
+
checkNormals(primitive, attributeId, buffer, geometry) {
|
|
210
|
+
let blnNormalsOk = false;
|
|
211
|
+
for (let index = 0; index < 10; ++index) {
|
|
212
|
+
if (Math.abs(buffer.array[index * 3]) > 0.001) {
|
|
213
|
+
blnNormalsOk = true;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
if (Math.abs(buffer.array[index * 3 + 1]) > 0.001) {
|
|
217
|
+
blnNormalsOk = true;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
if (Math.abs(buffer.array[index * 3 + 2]) > 0.001) {
|
|
221
|
+
blnNormalsOk = true;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (!blnNormalsOk) {
|
|
226
|
+
geometry.computeVertexNormals();
|
|
227
|
+
const computedNormalAttribute = geometry.getAttribute('normal');
|
|
228
|
+
// store the computed normals in the attribute data
|
|
229
|
+
primitive.attributes[attributeId] = new viewer_shared_types_1.AttributeData(new Float32Array(computedNormalAttribute.array), computedNormalAttribute.itemSize, 0, 0, 3, computedNormalAttribute.normalized, computedNormalAttribute.array.length / 3);
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
convertToTriangleMode(geometry, drawMode) {
|
|
235
|
+
let index = geometry.getIndex();
|
|
236
|
+
// generate index if not present
|
|
237
|
+
if (index === null) {
|
|
238
|
+
const indices = [];
|
|
239
|
+
const position = geometry.getAttribute('position');
|
|
240
|
+
if (position !== undefined) {
|
|
241
|
+
for (let i = 0; i < position.count; i++)
|
|
242
|
+
indices.push(i);
|
|
243
|
+
geometry.setIndex(indices);
|
|
244
|
+
index = geometry.getIndex();
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('GeometryLoader.convertToTriangleMode: Undefined position attribute. Processing not possible.');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (index === null)
|
|
251
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('GeometryLoader.convertToTriangleMode: Undefined index. Processing not possible.');
|
|
252
|
+
const numberOfTriangles = index.count - 2;
|
|
253
|
+
const newIndices = [];
|
|
254
|
+
if (drawMode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN) {
|
|
255
|
+
for (let i = 1; i <= numberOfTriangles; i++) {
|
|
256
|
+
newIndices.push(index.getX(0));
|
|
257
|
+
newIndices.push(index.getX(i));
|
|
258
|
+
newIndices.push(index.getX(i + 1));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
for (let i = 0; i < numberOfTriangles; i++) {
|
|
263
|
+
if (i % 2 === 0) {
|
|
264
|
+
newIndices.push(index.getX(i));
|
|
265
|
+
newIndices.push(index.getX(i + 1));
|
|
266
|
+
newIndices.push(index.getX(i + 2));
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
newIndices.push(index.getX(i + 2));
|
|
270
|
+
newIndices.push(index.getX(i + 1));
|
|
271
|
+
newIndices.push(index.getX(i));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if ((newIndices.length / 3) !== numberOfTriangles)
|
|
276
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('GeometryLoader.convertToTriangleMode: Unable to generate correct amount of triangle.');
|
|
277
|
+
geometry.setIndex(newIndices);
|
|
278
|
+
}
|
|
279
|
+
createCubeNormalMap(geometryData, geometry, resolution = 1024) {
|
|
280
|
+
if (this._gemSphericalMapsCache[geometryData.primitive.id + '_' + geometryData.primitive.version]) {
|
|
281
|
+
this._gemSphericalMapsCache[geometryData.primitive.id + '_' + geometryData.primitive.version].counter++;
|
|
282
|
+
return this._gemSphericalMapsCache[geometryData.primitive.id + '_' + geometryData.primitive.version].texture;
|
|
283
|
+
}
|
|
284
|
+
if (!this._gemScene) {
|
|
285
|
+
this._gemScene = new THREE.Scene();
|
|
286
|
+
this._gemCubeCameraRenderTarget = new THREE.WebGLCubeRenderTarget(resolution, { format: THREE.RGBAFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter });
|
|
287
|
+
this._gemCubeCameraRenderTarget.texture.generateMipmaps = false;
|
|
288
|
+
this._gemCubeCameraRenderTarget.texture.minFilter = THREE.NearestFilter;
|
|
289
|
+
this._gemCubeCameraRenderTarget.texture.magFilter = THREE.NearestFilter;
|
|
290
|
+
this._gemCubeCameraRenderTarget.texture.format = THREE.RGBAFormat;
|
|
291
|
+
this._gemCubeCamera = new THREE.CubeCamera(0.001, 10000, this._gemCubeCameraRenderTarget);
|
|
292
|
+
this._gemScene.add(this._gemCubeCamera);
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
this._gemCubeCameraRenderTarget = new THREE.WebGLCubeRenderTarget(resolution, { format: THREE.RGBAFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter });
|
|
296
|
+
this._gemCubeCameraRenderTarget.texture.generateMipmaps = false;
|
|
297
|
+
this._gemCubeCameraRenderTarget.texture.minFilter = THREE.NearestFilter;
|
|
298
|
+
this._gemCubeCameraRenderTarget.texture.magFilter = THREE.NearestFilter;
|
|
299
|
+
this._gemCubeCameraRenderTarget.texture.format = THREE.RGBAFormat;
|
|
300
|
+
this._gemCubeCamera.renderTarget = this._gemCubeCameraRenderTarget;
|
|
301
|
+
}
|
|
302
|
+
if (!this._gemNormalMaterial) {
|
|
303
|
+
const _normalShader = {
|
|
304
|
+
defines: {},
|
|
305
|
+
uniforms: THREE.UniformsUtils.merge([
|
|
306
|
+
THREE.UniformsLib.common
|
|
307
|
+
]),
|
|
308
|
+
vertexShader: `
|
|
309
|
+
varying vec3 vNormal;
|
|
310
|
+
|
|
311
|
+
void main() {
|
|
312
|
+
vNormal = normal;
|
|
313
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
314
|
+
}
|
|
315
|
+
`,
|
|
316
|
+
fragmentShader: `
|
|
317
|
+
varying highp vec3 vNormal;
|
|
318
|
+
|
|
319
|
+
float decodeFloat(float f) {
|
|
320
|
+
float r = mod(f, 1.0/255.0);
|
|
321
|
+
return /*r > 0.5/256.0 ? f + (1.0/256.0) - r : */f - r;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
vec3 decodeVec3(vec3 v) {
|
|
325
|
+
return vec3(decodeFloat(v.x), decodeFloat(v.y), decodeFloat(v.z));
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
float signEncoding(vec3 v) {
|
|
329
|
+
float code = 1.0;
|
|
330
|
+
if(v.x < 0.0 && v.y < 0.0 && v.z < 0.0) {
|
|
331
|
+
code = 0.0;
|
|
332
|
+
} else if (v.x < 0.0 && v.y < 0.0) {
|
|
333
|
+
code = 2.0/256.0;
|
|
334
|
+
} else if (v.x < 0.0 && v.z < 0.0) {
|
|
335
|
+
code = 4.0/256.0;
|
|
336
|
+
} else if (v.y < 0.0 && v.z < 0.0) {
|
|
337
|
+
code = 6.0/256.0;
|
|
338
|
+
} else if (v.x < 0.0) {
|
|
339
|
+
code = 8.0/256.0;
|
|
340
|
+
} else if (v.y < 0.0) {
|
|
341
|
+
code = 10.0/256.0;
|
|
342
|
+
} else if (v.z < 0.0) {
|
|
343
|
+
code = 12.0/256.0;
|
|
344
|
+
}
|
|
345
|
+
return code;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
void main() {
|
|
349
|
+
vec3 n = normalize(vNormal);
|
|
350
|
+
gl_FragColor = vec4(decodeVec3(abs(n)), signEncoding(n));
|
|
351
|
+
}
|
|
352
|
+
`
|
|
353
|
+
};
|
|
354
|
+
this._gemNormalMaterial = new THREE.ShaderMaterial({
|
|
355
|
+
uniforms: THREE.UniformsUtils.clone(_normalShader.uniforms),
|
|
356
|
+
defines: _normalShader.defines,
|
|
357
|
+
vertexShader: _normalShader.vertexShader,
|
|
358
|
+
fragmentShader: _normalShader.fragmentShader
|
|
359
|
+
});
|
|
360
|
+
this._gemNormalMaterial.blending = THREE.NoBlending;
|
|
361
|
+
this._gemNormalMaterial.side = THREE.DoubleSide;
|
|
362
|
+
this._gemScene.overrideMaterial = this._gemNormalMaterial;
|
|
363
|
+
}
|
|
364
|
+
const mesh = new THREE.Mesh(geometry.clone(), this._gemNormalMaterial);
|
|
365
|
+
mesh.geometry.center();
|
|
366
|
+
this._gemScene.add(mesh);
|
|
367
|
+
this._gemCubeCamera.update(this._renderingEngine.renderer, this._gemScene);
|
|
368
|
+
this._gemScene.remove(mesh);
|
|
369
|
+
mesh.geometry.dispose();
|
|
370
|
+
mesh.material.dispose();
|
|
371
|
+
this._gemCubeCamera.renderTarget.texture.userData = {
|
|
372
|
+
SDid: geometryData.primitive.id,
|
|
373
|
+
SDversion: geometryData.primitive.version
|
|
374
|
+
};
|
|
375
|
+
this._gemSphericalMapsCache[geometryData.primitive.id + '_' + geometryData.primitive.version] = { texture: this._gemCubeCameraRenderTarget.texture, renderTarget: this._gemCubeCameraRenderTarget, counter: 1 };
|
|
376
|
+
return this._gemSphericalMapsCache[geometryData.primitive.id + '_' + geometryData.primitive.version].texture;
|
|
377
|
+
}
|
|
378
|
+
createMesh(obj, geometry, threeGeometry, material, skeleton) {
|
|
379
|
+
if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.POINTS) {
|
|
380
|
+
const points = new THREE.Points(threeGeometry, material);
|
|
381
|
+
geometry.convertedObject[this._renderingEngine.id] = points;
|
|
382
|
+
obj.add(points);
|
|
383
|
+
}
|
|
384
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINES) {
|
|
385
|
+
const lineSegments = new THREE.LineSegments(threeGeometry, material);
|
|
386
|
+
geometry.convertedObject[this._renderingEngine.id] = lineSegments;
|
|
387
|
+
obj.add(lineSegments);
|
|
388
|
+
}
|
|
389
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_LOOP) {
|
|
390
|
+
const lineLoop = new THREE.LineLoop(threeGeometry, material);
|
|
391
|
+
geometry.convertedObject[this._renderingEngine.id] = lineLoop;
|
|
392
|
+
obj.add(lineLoop);
|
|
393
|
+
}
|
|
394
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_STRIP) {
|
|
395
|
+
const line = new THREE.Line(threeGeometry, material);
|
|
396
|
+
geometry.convertedObject[this._renderingEngine.id] = line;
|
|
397
|
+
obj.add(line);
|
|
398
|
+
}
|
|
399
|
+
else if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLES || geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_STRIP || geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN) {
|
|
400
|
+
const bufferGeometry = threeGeometry;
|
|
401
|
+
if (geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_STRIP || geometry.mode === viewer_shared_types_1.PRIMITIVE_MODE.TRIANGLE_FAN)
|
|
402
|
+
this.convertToTriangleMode(bufferGeometry, geometry.mode);
|
|
403
|
+
if (skeleton) {
|
|
404
|
+
const skinnedMesh = new THREE.SkinnedMesh(bufferGeometry, material);
|
|
405
|
+
geometry.convertedObject[this._renderingEngine.id] = skinnedMesh;
|
|
406
|
+
skinnedMesh.bind(skeleton, skinnedMesh.matrixWorld);
|
|
407
|
+
if (bufferGeometry.attributes.skinWeight.normalized)
|
|
408
|
+
skinnedMesh.normalizeSkinWeights();
|
|
409
|
+
obj.add(skinnedMesh);
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
const mesh = new THREE.Mesh(bufferGeometry, material);
|
|
413
|
+
geometry.convertedObject[this._renderingEngine.id] = mesh;
|
|
414
|
+
obj.add(mesh);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError(`GeometryLoader.load: Unrecognized primitive mode ${geometry.mode}.`);
|
|
419
|
+
}
|
|
420
|
+
obj.traverse(m => {
|
|
421
|
+
if (m instanceof THREE.Mesh || m instanceof THREE.Points || m instanceof THREE.LineSegments || m instanceof THREE.LineLoop || m instanceof THREE.Line) {
|
|
422
|
+
m.geometry.userData = {
|
|
423
|
+
SDid: geometry.id,
|
|
424
|
+
SDversion: geometry.version,
|
|
425
|
+
primitiveSDid: geometry.primitive.id,
|
|
426
|
+
primitiveSDversion: geometry.primitive.version
|
|
427
|
+
};
|
|
428
|
+
m.renderOrder = geometry.renderOrder;
|
|
429
|
+
}
|
|
430
|
+
if (m instanceof THREE.Mesh && m.userData.transparencyPlaceholder !== true) {
|
|
431
|
+
m.geometry.boundingBox = new THREE.Box3(new THREE.Vector3(geometry.boundingBox.min[0], geometry.boundingBox.min[1], geometry.boundingBox.min[2]), new THREE.Vector3(geometry.boundingBox.max[0], geometry.boundingBox.max[1], geometry.boundingBox.max[2]));
|
|
432
|
+
m.geometry.boundingSphere = new THREE.Sphere(new THREE.Vector3(geometry.boundingBox.boundingSphere.center[0], geometry.boundingBox.boundingSphere.center[1], geometry.boundingBox.boundingSphere.center[2]), geometry.boundingBox.boundingSphere.radius);
|
|
433
|
+
m.morphTargetInfluences = geometry.morphWeights;
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
getAttributeName(attributeId) {
|
|
438
|
+
switch (attributeId) {
|
|
439
|
+
case 'POSITION':
|
|
440
|
+
return 'position';
|
|
441
|
+
case 'NORMAL':
|
|
442
|
+
return 'normal';
|
|
443
|
+
case 'TEXCOORD_0':
|
|
444
|
+
case 'TEXCOORD0':
|
|
445
|
+
case 'TEXCOORD':
|
|
446
|
+
case 'UV':
|
|
447
|
+
return 'uv';
|
|
448
|
+
case 'TEXCOORD_1':
|
|
449
|
+
return 'uv1';
|
|
450
|
+
case 'TEXCOORD_2':
|
|
451
|
+
return 'uv2';
|
|
452
|
+
case 'TEXCOORD_3':
|
|
453
|
+
return 'uv3';
|
|
454
|
+
case 'COLOR_0':
|
|
455
|
+
case 'COLOR0':
|
|
456
|
+
case 'COLOR':
|
|
457
|
+
return 'color';
|
|
458
|
+
case 'WEIGHT':
|
|
459
|
+
case 'WEIGHTS_0':
|
|
460
|
+
return 'skinWeight';
|
|
461
|
+
case 'JOINT':
|
|
462
|
+
case 'JOINTS_0':
|
|
463
|
+
return 'skinIndex';
|
|
464
|
+
case 'TANGENT':
|
|
465
|
+
return 'tangent';
|
|
466
|
+
case 'POSITION_INDEX':
|
|
467
|
+
return 'positionIndex';
|
|
468
|
+
default:
|
|
469
|
+
this._logger.warn(`GeometryLoader.loadPrimitive: Unrecognized attribute id ${attributeId}.`);
|
|
470
|
+
}
|
|
471
|
+
return '';
|
|
472
|
+
}
|
|
473
|
+
loadAttribute(bufferAttribute, attributeId) {
|
|
474
|
+
let buffer;
|
|
475
|
+
if (bufferAttribute.byteStride && bufferAttribute.byteStride !== bufferAttribute.itemBytes) {
|
|
476
|
+
// Integer parameters to IB/IBA are in array elements, not bytes.
|
|
477
|
+
const ib = new THREE.InterleavedBuffer(bufferAttribute.array, bufferAttribute.byteStride / bufferAttribute.elementBytes);
|
|
478
|
+
buffer = new THREE.InterleavedBufferAttribute(ib, bufferAttribute.itemSize, (bufferAttribute.byteOffset % bufferAttribute.byteStride) / bufferAttribute.elementBytes, bufferAttribute.normalized);
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
buffer = new THREE.BufferAttribute(bufferAttribute.array, bufferAttribute.itemSize, (attributeId === 'COLOR_0' || attributeId === 'COLOR0' || attributeId === 'COLOR') ? true : bufferAttribute.normalized);
|
|
482
|
+
}
|
|
483
|
+
if (bufferAttribute.sparse) {
|
|
484
|
+
if (bufferAttribute.array !== null) {
|
|
485
|
+
// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.
|
|
486
|
+
buffer = new THREE.BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized);
|
|
487
|
+
}
|
|
488
|
+
for (let i = 0, il = bufferAttribute.sparseIndices.length; i < il; i++) {
|
|
489
|
+
const index = bufferAttribute.sparseIndices[i];
|
|
490
|
+
buffer.setX(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize]);
|
|
491
|
+
if (bufferAttribute.itemSize >= 2)
|
|
492
|
+
buffer.setY(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 1]);
|
|
493
|
+
if (bufferAttribute.itemSize >= 3)
|
|
494
|
+
buffer.setZ(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 2]);
|
|
495
|
+
if (bufferAttribute.itemSize >= 4)
|
|
496
|
+
buffer.setW(index, bufferAttribute.sparseValues[i * bufferAttribute.itemSize + 3]);
|
|
497
|
+
if (bufferAttribute.itemSize >= 5)
|
|
498
|
+
throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('GeometryLoader.loadPrimitive: Unsupported itemSize in sparse BufferAttribute.');
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return buffer;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
exports.GeometryLoader = GeometryLoader;
|
|
505
|
+
//# sourceMappingURL=GeometryLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeometryLoader.js","sourceRoot":"","sources":["../../src/loaders/GeometryLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { HTMLElementAnchorData } from '@shapediver/viewer.shared.types';
|
|
2
|
+
import { ILoader } from '../interfaces/ILoader';
|
|
3
|
+
import { ITreeNode } from '@shapediver/viewer.shared.node-tree';
|
|
4
|
+
import { RenderingEngine } from '../RenderingEngine';
|
|
5
|
+
export declare class HTMLElementAnchorLoader implements ILoader {
|
|
6
|
+
private readonly _renderingEngine;
|
|
7
|
+
private readonly _htmlElements;
|
|
8
|
+
private readonly _parentDiv;
|
|
9
|
+
constructor(_renderingEngine: RenderingEngine);
|
|
10
|
+
get parentDiv(): HTMLDivElement;
|
|
11
|
+
adjustPositions(scaleWidth: number, scaleHeight: number): void;
|
|
12
|
+
init(): void;
|
|
13
|
+
load(node: ITreeNode, anchor: HTMLElementAnchorData, isVisibleInHierarchy: boolean): void;
|
|
14
|
+
removeData(id: string, version: string): void;
|
|
15
|
+
toggleBusyMode(toggle: boolean): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=HTMLElementAnchorLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTMLElementAnchorLoader.d.ts","sourceRoot":"","sources":["../../src/loaders/HTMLElementAnchorLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,qBAAa,uBAAwB,YAAW,OAAO;IAevC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAZ7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAKvB;IACP,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAMf,gBAAgB,EAAE,eAAe;IAS9D,IAAW,SAAS,IAAI,cAAc,CAErC;IAMM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAuB9D,IAAI,IAAI,IAAI;IAIZ,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,OAAO,GAAG,IAAI;IAiBzF,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAYtC,cAAc,CAAC,MAAM,EAAE,OAAO;CAWxC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HTMLElementAnchorLoader = void 0;
|
|
4
|
+
const viewer_rendering_engine_rendering_engine_1 = require("@shapediver/viewer.rendering-engine.rendering-engine");
|
|
5
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
6
|
+
class HTMLElementAnchorLoader {
|
|
7
|
+
// #endregion Properties (2)
|
|
8
|
+
// #region Constructors (1)
|
|
9
|
+
constructor(_renderingEngine) {
|
|
10
|
+
this._renderingEngine = _renderingEngine;
|
|
11
|
+
// #region Properties (2)
|
|
12
|
+
this._htmlElements = {};
|
|
13
|
+
this._parentDiv = document.createElement('div');
|
|
14
|
+
this._parentDiv.classList.add('sdv-anchor-container');
|
|
15
|
+
}
|
|
16
|
+
// #endregion Constructors (1)
|
|
17
|
+
// #region Public Getters And Setters (1)
|
|
18
|
+
get parentDiv() {
|
|
19
|
+
return this._parentDiv;
|
|
20
|
+
}
|
|
21
|
+
// #endregion Public Getters And Setters (1)
|
|
22
|
+
// #region Public Methods (5)
|
|
23
|
+
adjustPositions(scaleWidth, scaleHeight) {
|
|
24
|
+
for (const anchorId in this._htmlElements) {
|
|
25
|
+
const anchor = this._htmlElements[anchorId].anchor;
|
|
26
|
+
const { page, container, client, hidden } = this._renderingEngine.sceneTracingManager.convert3Dto2D(gl_matrix_1.vec3.clone(anchor.location));
|
|
27
|
+
const htmlElement = anchor.createViewerHtmlElement(this._renderingEngine.id);
|
|
28
|
+
if (!htmlElement)
|
|
29
|
+
continue;
|
|
30
|
+
let node = this._htmlElements[anchorId].node;
|
|
31
|
+
let visible = node.visible;
|
|
32
|
+
while (node.parent) {
|
|
33
|
+
node = node.parent;
|
|
34
|
+
visible = node.visible && visible;
|
|
35
|
+
}
|
|
36
|
+
if (this._renderingEngine.show === false)
|
|
37
|
+
visible = false;
|
|
38
|
+
anchor.update({ anchor, htmlElement, page, container, client, scale: gl_matrix_1.vec2.fromValues(scaleWidth, scaleHeight), hidden, visible });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
init() {
|
|
42
|
+
var _a;
|
|
43
|
+
(_a = this._renderingEngine.canvas.parentNode) === null || _a === void 0 ? void 0 : _a.appendChild(this._parentDiv);
|
|
44
|
+
}
|
|
45
|
+
load(node, anchor, isVisibleInHierarchy) {
|
|
46
|
+
const htmlElement = anchor.createViewerHtmlElement(this._renderingEngine.id);
|
|
47
|
+
if (!htmlElement)
|
|
48
|
+
return;
|
|
49
|
+
// set the display property to "none" if the viewport is not shown or the node is not visible
|
|
50
|
+
if (this._renderingEngine.show === false || isVisibleInHierarchy === false)
|
|
51
|
+
htmlElement.style.display = 'none';
|
|
52
|
+
// if the node is not visible return
|
|
53
|
+
if (isVisibleInHierarchy === false)
|
|
54
|
+
return;
|
|
55
|
+
this._parentDiv.appendChild(htmlElement);
|
|
56
|
+
this._htmlElements[anchor.id + '_' + anchor.version] = {
|
|
57
|
+
node,
|
|
58
|
+
anchor
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
removeData(id, version) {
|
|
62
|
+
// since the data object might be there, but no data is loaded for this viewport
|
|
63
|
+
// this check is needed
|
|
64
|
+
if (!this._htmlElements[id + '_' + version])
|
|
65
|
+
return;
|
|
66
|
+
const anchor = this._htmlElements[id + '_' + version].anchor;
|
|
67
|
+
if (anchor && anchor.getViewerHtmlElement(this._renderingEngine.id)) {
|
|
68
|
+
this._parentDiv.removeChild(anchor.getViewerHtmlElement(this._renderingEngine.id));
|
|
69
|
+
delete this._htmlElements[id + '_' + version];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
toggleBusyMode(toggle) {
|
|
73
|
+
if (toggle && this._renderingEngine.busyModeDisplay === viewer_rendering_engine_rendering_engine_1.BUSY_MODE_DISPLAY.BLUR) {
|
|
74
|
+
if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && navigator.userAgent.toLowerCase().indexOf('android') > -1)
|
|
75
|
+
return;
|
|
76
|
+
this._parentDiv.style.filter = 'blur(3px)';
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this._parentDiv.style.filter = '';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.HTMLElementAnchorLoader = HTMLElementAnchorLoader;
|
|
84
|
+
//# sourceMappingURL=HTMLElementAnchorLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTMLElementAnchorLoader.js","sourceRoot":"","sources":["../../src/loaders/HTMLElementAnchorLoader.ts"],"names":[],"mappings":"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"}
|