@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.
Files changed (301) hide show
  1. package/LICENSE +73 -0
  2. package/README.md +3 -0
  3. package/dist/RenderingEngine.d.ts +296 -0
  4. package/dist/RenderingEngine.d.ts.map +1 -0
  5. package/dist/RenderingEngine.js +1079 -0
  6. package/dist/RenderingEngine.js.map +1 -0
  7. package/dist/index.d.ts +12 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +47 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/injectors/Tag3dGeometryCreationInjector.d.ts +11 -0
  12. package/dist/injectors/Tag3dGeometryCreationInjector.d.ts.map +1 -0
  13. package/dist/injectors/Tag3dGeometryCreationInjector.js +169 -0
  14. package/dist/injectors/Tag3dGeometryCreationInjector.js.map +1 -0
  15. package/dist/injectors/TextureUnifierInjector.d.ts +14 -0
  16. package/dist/injectors/TextureUnifierInjector.d.ts.map +1 -0
  17. package/dist/injectors/TextureUnifierInjector.js +227 -0
  18. package/dist/injectors/TextureUnifierInjector.js.map +1 -0
  19. package/dist/interfaces/ILoader.d.ts +4 -0
  20. package/dist/interfaces/ILoader.d.ts.map +1 -0
  21. package/dist/interfaces/ILoader.js +3 -0
  22. package/dist/interfaces/ILoader.js.map +1 -0
  23. package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts +307 -0
  24. package/dist/interfaces/IPostProcessingEffectDefinitions.d.ts.map +1 -0
  25. package/dist/interfaces/IPostProcessingEffectDefinitions.js +31 -0
  26. package/dist/interfaces/IPostProcessingEffectDefinitions.js.map +1 -0
  27. package/dist/interfaces/IRenderingEngine.d.ts +43 -0
  28. package/dist/interfaces/IRenderingEngine.d.ts.map +1 -0
  29. package/dist/interfaces/IRenderingEngine.js +3 -0
  30. package/dist/interfaces/IRenderingEngine.js.map +1 -0
  31. package/dist/loaders/EnvironmentMapLoader.d.ts +98 -0
  32. package/dist/loaders/EnvironmentMapLoader.d.ts.map +1 -0
  33. package/dist/loaders/EnvironmentMapLoader.js +348 -0
  34. package/dist/loaders/EnvironmentMapLoader.js.map +1 -0
  35. package/dist/loaders/GeometryLoader.d.ts +38 -0
  36. package/dist/loaders/GeometryLoader.d.ts.map +1 -0
  37. package/dist/loaders/GeometryLoader.js +505 -0
  38. package/dist/loaders/GeometryLoader.js.map +1 -0
  39. package/dist/loaders/HTMLElementAnchorLoader.d.ts +17 -0
  40. package/dist/loaders/HTMLElementAnchorLoader.d.ts.map +1 -0
  41. package/dist/loaders/HTMLElementAnchorLoader.js +84 -0
  42. package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -0
  43. package/dist/loaders/LightLoader.d.ts +19 -0
  44. package/dist/loaders/LightLoader.d.ts.map +1 -0
  45. package/dist/loaders/LightLoader.js +152 -0
  46. package/dist/loaders/LightLoader.js.map +1 -0
  47. package/dist/loaders/MaterialLoader.d.ts +99 -0
  48. package/dist/loaders/MaterialLoader.d.ts.map +1 -0
  49. package/dist/loaders/MaterialLoader.js +1175 -0
  50. package/dist/loaders/MaterialLoader.js.map +1 -0
  51. package/dist/managers/CameraManager.d.ts +20 -0
  52. package/dist/managers/CameraManager.d.ts.map +1 -0
  53. package/dist/managers/CameraManager.js +195 -0
  54. package/dist/managers/CameraManager.js.map +1 -0
  55. package/dist/managers/EnvironmentGeometryManager.d.ts +43 -0
  56. package/dist/managers/EnvironmentGeometryManager.d.ts.map +1 -0
  57. package/dist/managers/EnvironmentGeometryManager.js +210 -0
  58. package/dist/managers/EnvironmentGeometryManager.js.map +1 -0
  59. package/dist/managers/PostProcessingManager.d.ts +1014 -0
  60. package/dist/managers/PostProcessingManager.d.ts.map +1 -0
  61. package/dist/managers/PostProcessingManager.js +1013 -0
  62. package/dist/managers/PostProcessingManager.js.map +1 -0
  63. package/dist/managers/RenderingManager.d.ts +83 -0
  64. package/dist/managers/RenderingManager.d.ts.map +1 -0
  65. package/dist/managers/RenderingManager.js +567 -0
  66. package/dist/managers/RenderingManager.js.map +1 -0
  67. package/dist/managers/SceneTracingManager.d.ts +26 -0
  68. package/dist/managers/SceneTracingManager.d.ts.map +1 -0
  69. package/dist/managers/SceneTracingManager.js +122 -0
  70. package/dist/managers/SceneTracingManager.js.map +1 -0
  71. package/dist/managers/SceneTreeManager.d.ts +55 -0
  72. package/dist/managers/SceneTreeManager.d.ts.map +1 -0
  73. package/dist/managers/SceneTreeManager.js +501 -0
  74. package/dist/managers/SceneTreeManager.js.map +1 -0
  75. package/dist/managers/postprocessing/GodRaysManager.d.ts +13 -0
  76. package/dist/managers/postprocessing/GodRaysManager.d.ts.map +1 -0
  77. package/dist/managers/postprocessing/GodRaysManager.js +64 -0
  78. package/dist/managers/postprocessing/GodRaysManager.js.map +1 -0
  79. package/dist/managers/postprocessing/OutlineManager.d.ts +15 -0
  80. package/dist/managers/postprocessing/OutlineManager.d.ts.map +1 -0
  81. package/dist/managers/postprocessing/OutlineManager.js +67 -0
  82. package/dist/managers/postprocessing/OutlineManager.js.map +1 -0
  83. package/dist/managers/postprocessing/SSAARenderPass.d.ts +54 -0
  84. package/dist/managers/postprocessing/SSAARenderPass.d.ts.map +1 -0
  85. package/dist/managers/postprocessing/SSAARenderPass.js +234 -0
  86. package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -0
  87. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +15 -0
  88. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts.map +1 -0
  89. package/dist/managers/postprocessing/SelectiveBloomManager.js +67 -0
  90. package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -0
  91. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +47 -0
  92. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts.map +1 -0
  93. package/dist/managers/postprocessing/ao/ao/AOEffect.js +134 -0
  94. package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -0
  95. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +13 -0
  96. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts.map +1 -0
  97. package/dist/managers/postprocessing/ao/ao/AOPass.js +78 -0
  98. package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -0
  99. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +2 -0
  100. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts.map +1 -0
  101. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +23 -0
  102. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js.map +1 -0
  103. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +15 -0
  104. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts.map +1 -0
  105. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +25 -0
  106. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js.map +1 -0
  107. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +2 -0
  108. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts.map +1 -0
  109. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +102 -0
  110. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js.map +1 -0
  111. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts +2 -0
  112. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.d.ts.map +1 -0
  113. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js +99 -0
  114. package/dist/managers/postprocessing/ao/hbao/shader/hbao_utils.js.map +1 -0
  115. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +37 -0
  116. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts.map +1 -0
  117. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +171 -0
  118. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -0
  119. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +2 -0
  120. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts.map +1 -0
  121. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +131 -0
  122. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js.map +1 -0
  123. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +15 -0
  124. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts.map +1 -0
  125. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +76 -0
  126. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -0
  127. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +2 -0
  128. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts.map +1 -0
  129. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +134 -0
  130. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js.map +1 -0
  131. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +2 -0
  132. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts.map +1 -0
  133. package/dist/managers/postprocessing/ao/utils/shader/basic.js +12 -0
  134. package/dist/managers/postprocessing/ao/utils/shader/basic.js.map +1 -0
  135. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +2 -0
  136. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts.map +1 -0
  137. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +42 -0
  138. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js.map +1 -0
  139. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +38 -0
  140. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts.map +1 -0
  141. package/dist/managers/postprocessing/utils/CopyMaterial.js +106 -0
  142. package/dist/managers/postprocessing/utils/CopyMaterial.js.map +1 -0
  143. package/dist/managers/postprocessing/utils/CopyShader.d.ts +14 -0
  144. package/dist/managers/postprocessing/utils/CopyShader.d.ts.map +1 -0
  145. package/dist/managers/postprocessing/utils/CopyShader.js +36 -0
  146. package/dist/managers/postprocessing/utils/CopyShader.js.map +1 -0
  147. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +10 -0
  148. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts.map +1 -0
  149. package/dist/managers/postprocessing/utils/FullScreenQuad.js +29 -0
  150. package/dist/managers/postprocessing/utils/FullScreenQuad.js.map +1 -0
  151. package/dist/managers/postprocessing/utils/NormalPass.d.ts +88 -0
  152. package/dist/managers/postprocessing/utils/NormalPass.d.ts.map +1 -0
  153. package/dist/managers/postprocessing/utils/NormalPass.js +157 -0
  154. package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -0
  155. package/dist/managers/postprocessing/utils/RenderPass.d.ts +115 -0
  156. package/dist/managers/postprocessing/utils/RenderPass.d.ts.map +1 -0
  157. package/dist/managers/postprocessing/utils/RenderPass.js +251 -0
  158. package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -0
  159. package/dist/materials/GemMaterial.d.ts +38 -0
  160. package/dist/materials/GemMaterial.d.ts.map +1 -0
  161. package/dist/materials/GemMaterial.js +253 -0
  162. package/dist/materials/GemMaterial.js.map +1 -0
  163. package/dist/materials/MeshUnlitMaterialParameters.d.ts +4 -0
  164. package/dist/materials/MeshUnlitMaterialParameters.d.ts.map +1 -0
  165. package/dist/materials/MeshUnlitMaterialParameters.js +3 -0
  166. package/dist/materials/MeshUnlitMaterialParameters.js.map +1 -0
  167. package/dist/materials/MultiPointsMaterial.d.ts +94 -0
  168. package/dist/materials/MultiPointsMaterial.d.ts.map +1 -0
  169. package/dist/materials/MultiPointsMaterial.js +567 -0
  170. package/dist/materials/MultiPointsMaterial.js.map +1 -0
  171. package/dist/materials/SpecularGlossinessMaterial.d.ts +14 -0
  172. package/dist/materials/SpecularGlossinessMaterial.d.ts.map +1 -0
  173. package/dist/materials/SpecularGlossinessMaterial.js +162 -0
  174. package/dist/materials/SpecularGlossinessMaterial.js.map +1 -0
  175. package/dist/objects/SDBone.d.ts +13 -0
  176. package/dist/objects/SDBone.d.ts.map +1 -0
  177. package/dist/objects/SDBone.js +75 -0
  178. package/dist/objects/SDBone.js.map +1 -0
  179. package/dist/objects/SDColor.d.ts +17 -0
  180. package/dist/objects/SDColor.d.ts.map +1 -0
  181. package/dist/objects/SDColor.js +49 -0
  182. package/dist/objects/SDColor.js.map +1 -0
  183. package/dist/objects/SDData.d.ts +19 -0
  184. package/dist/objects/SDData.d.ts.map +1 -0
  185. package/dist/objects/SDData.js +48 -0
  186. package/dist/objects/SDData.js.map +1 -0
  187. package/dist/objects/SDObject.d.ts +14 -0
  188. package/dist/objects/SDObject.d.ts.map +1 -0
  189. package/dist/objects/SDObject.js +81 -0
  190. package/dist/objects/SDObject.js.map +1 -0
  191. package/dist/shaders/PCSS.d.ts +3 -0
  192. package/dist/shaders/PCSS.d.ts.map +1 -0
  193. package/dist/shaders/PCSS.js +127 -0
  194. package/dist/shaders/PCSS.js.map +1 -0
  195. package/dist/shaders/gem.d.ts +3 -0
  196. package/dist/shaders/gem.d.ts.map +1 -0
  197. package/dist/shaders/gem.js +578 -0
  198. package/dist/shaders/gem.js.map +1 -0
  199. package/dist/shaders/multi_points.d.ts +3 -0
  200. package/dist/shaders/multi_points.d.ts.map +1 -0
  201. package/dist/shaders/multi_points.js +294 -0
  202. package/dist/shaders/multi_points.js.map +1 -0
  203. package/dist/styling/viewport-css.d.ts +2 -0
  204. package/dist/styling/viewport-css.d.ts.map +1 -0
  205. package/dist/styling/viewport-css.js +117 -0
  206. package/dist/styling/viewport-css.js.map +1 -0
  207. package/dist/three/font.d.ts +2365 -0
  208. package/dist/three/font.d.ts.map +1 -0
  209. package/dist/three/font.js +6 -0
  210. package/dist/three/font.js.map +1 -0
  211. package/dist/three/geometries/TextGeometry.d.ts +22 -0
  212. package/dist/three/geometries/TextGeometry.d.ts.map +1 -0
  213. package/dist/three/geometries/TextGeometry.js +45 -0
  214. package/dist/three/geometries/TextGeometry.js.map +1 -0
  215. package/dist/three/loaders/FontLoader.d.ts +15 -0
  216. package/dist/three/loaders/FontLoader.d.ts.map +1 -0
  217. package/dist/three/loaders/FontLoader.js +118 -0
  218. package/dist/three/loaders/FontLoader.js.map +1 -0
  219. package/dist/three/loaders/RGBELoader.d.ts +24 -0
  220. package/dist/three/loaders/RGBELoader.d.ts.map +1 -0
  221. package/dist/three/loaders/RGBELoader.js +299 -0
  222. package/dist/three/loaders/RGBELoader.js.map +1 -0
  223. package/dist/types/IThreejsData.d.ts +7 -0
  224. package/dist/types/IThreejsData.d.ts.map +1 -0
  225. package/dist/types/IThreejsData.js +3 -0
  226. package/dist/types/IThreejsData.js.map +1 -0
  227. package/dist/types/ThreejsData.d.ts +11 -0
  228. package/dist/types/ThreejsData.d.ts.map +1 -0
  229. package/dist/types/ThreejsData.js +42 -0
  230. package/dist/types/ThreejsData.js.map +1 -0
  231. package/package.json +65 -0
  232. package/src/RenderingEngine.ts +1342 -0
  233. package/src/index.ts +23 -0
  234. package/src/injectors/Tag3dGeometryCreationInjector.ts +170 -0
  235. package/src/injectors/TextureUnifierInjector.ts +224 -0
  236. package/src/interfaces/ILoader.ts +3 -0
  237. package/src/interfaces/IPostProcessingEffectDefinitions.ts +402 -0
  238. package/src/interfaces/IRenderingEngine.ts +48 -0
  239. package/src/loaders/EnvironmentMapLoader.ts +355 -0
  240. package/src/loaders/GeometryLoader.ts +565 -0
  241. package/src/loaders/HTMLElementAnchorLoader.ts +107 -0
  242. package/src/loaders/LightLoader.ts +171 -0
  243. package/src/loaders/MaterialLoader.ts +1418 -0
  244. package/src/managers/CameraManager.ts +178 -0
  245. package/src/managers/EnvironmentGeometryManager.ts +224 -0
  246. package/src/managers/PostProcessingManager.ts +1169 -0
  247. package/src/managers/RenderingManager.ts +657 -0
  248. package/src/managers/SceneTracingManager.ts +120 -0
  249. package/src/managers/SceneTreeManager.ts +569 -0
  250. package/src/managers/postprocessing/GodRaysManager.ts +52 -0
  251. package/src/managers/postprocessing/OutlineManager.ts +58 -0
  252. package/src/managers/postprocessing/SSAARenderPass.ts +339 -0
  253. package/src/managers/postprocessing/SelectiveBloomManager.ts +58 -0
  254. package/src/managers/postprocessing/ao/ao/AOEffect.ts +180 -0
  255. package/src/managers/postprocessing/ao/ao/AOPass.ts +128 -0
  256. package/src/managers/postprocessing/ao/ao/shader/ao_compose.glsl +17 -0
  257. package/src/managers/postprocessing/ao/ao/shader/ao_compose.ts +19 -0
  258. package/src/managers/postprocessing/ao/hbao/HBAOEffect.ts +41 -0
  259. package/src/managers/postprocessing/ao/hbao/shader/hbao.glsl +96 -0
  260. package/src/managers/postprocessing/ao/hbao/shader/hbao.ts +98 -0
  261. package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.glsl +92 -0
  262. package/src/managers/postprocessing/ao/hbao/shader/hbao_utils.ts +95 -0
  263. package/src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts +245 -0
  264. package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.glsl +125 -0
  265. package/src/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.ts +127 -0
  266. package/src/managers/postprocessing/ao/ssao/SSAOEffect.ts +106 -0
  267. package/src/managers/postprocessing/ao/ssao/shader/ssao.glsl +128 -0
  268. package/src/managers/postprocessing/ao/ssao/shader/ssao.ts +130 -0
  269. package/src/managers/postprocessing/ao/utils/shader/basic.glsl +6 -0
  270. package/src/managers/postprocessing/ao/utils/shader/basic.ts +8 -0
  271. package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.glsl +36 -0
  272. package/src/managers/postprocessing/ao/utils/shader/sampleBlueNoise.ts +38 -0
  273. package/src/managers/postprocessing/utils/CopyMaterial.ts +130 -0
  274. package/src/managers/postprocessing/utils/CopyShader.ts +39 -0
  275. package/src/managers/postprocessing/utils/FullScreenQuad.ts +47 -0
  276. package/src/managers/postprocessing/utils/NormalPass.ts +222 -0
  277. package/src/managers/postprocessing/utils/RenderPass.ts +366 -0
  278. package/src/materials/GemMaterial.ts +268 -0
  279. package/src/materials/MeshUnlitMaterialParameters.ts +4 -0
  280. package/src/materials/MultiPointsMaterial.ts +646 -0
  281. package/src/materials/SpecularGlossinessMaterial.ts +182 -0
  282. package/src/objects/SDBone.ts +51 -0
  283. package/src/objects/SDColor.ts +54 -0
  284. package/src/objects/SDData.ts +44 -0
  285. package/src/objects/SDObject.ts +58 -0
  286. package/src/shaders/PCSS.ts +124 -0
  287. package/src/shaders/gem.ts +575 -0
  288. package/src/shaders/gem_frag.glsl +517 -0
  289. package/src/shaders/gem_vert.glsl +53 -0
  290. package/src/shaders/multi_points.ts +291 -0
  291. package/src/shaders/multi_points_frag.glsl +166 -0
  292. package/src/shaders/multi_points_vert.glsl +120 -0
  293. package/src/styling/viewport-css.ts +113 -0
  294. package/src/styling/viewport.css +111 -0
  295. package/src/three/font.ts +2 -0
  296. package/src/three/geometries/TextGeometry.ts +58 -0
  297. package/src/three/loaders/FontLoader.ts +205 -0
  298. package/src/three/loaders/RGBELoader.ts +496 -0
  299. package/src/types/IThreejsData.ts +16 -0
  300. package/src/types/ThreejsData.ts +43 -0
  301. package/tsconfig.json +20 -0
@@ -0,0 +1,178 @@
1
+ import * as THREE from 'three';
2
+ import { IManager } from '@shapediver/viewer.rendering-engine.rendering-engine';
3
+ import { mat4, vec3 } from 'gl-matrix';
4
+ import { RenderingEngine } from '../RenderingEngine';
5
+ import { SDData } from '../objects/SDData';
6
+ import {
7
+ AbstractCamera,
8
+ CAMERA_TYPE,
9
+ OrthographicCamera,
10
+ PerspectiveCamera,
11
+ } from '@shapediver/viewer.rendering-engine.camera-engine';
12
+
13
+ export class CameraManager implements IManager {
14
+ // #region Properties (2)
15
+
16
+ #camera: THREE.Camera = new THREE.PerspectiveCamera();
17
+ #cameraCache: { [key: string]: THREE.Camera } = {};
18
+
19
+ // #endregion Properties (2)
20
+
21
+ // #region Constructors (1)
22
+
23
+ constructor(private readonly _renderingEngine: RenderingEngine) { }
24
+
25
+ // #endregion Constructors (1)
26
+
27
+ // #region Public Getters And Setters (1)
28
+
29
+ public get camera(): THREE.Camera {
30
+ return this.#camera;
31
+ }
32
+
33
+ // #endregion Public Getters And Setters (1)
34
+
35
+ // #region Public Methods (4)
36
+
37
+ public adjustCamera(aspect: number): { camera: THREE.Camera, matrix?: mat4 } {
38
+ let cameraThree: THREE.Camera;
39
+ let matrix;
40
+
41
+ const camera = this._renderingEngine.cameraEngine.camera!;
42
+ if (camera.useNodeData) {
43
+ const sdCameraNode = camera.convertedObject[this._renderingEngine.id] as THREE.Object3D;
44
+ const sdCameraData = sdCameraNode.children[0];
45
+ cameraThree = <THREE.Camera>sdCameraData.children[0];
46
+ } else {
47
+ if (this._renderingEngine.cameraEngine.camera!.type === CAMERA_TYPE.ORTHOGRAPHIC) {
48
+ const orthographicCameraData = <OrthographicCamera>camera;
49
+ let orthographicCameraThreeJs = orthographicCameraData.convertedObject[this._renderingEngine.id] as THREE.OrthographicCamera;
50
+ if (!orthographicCameraThreeJs) this.load(orthographicCameraData);
51
+ orthographicCameraThreeJs = orthographicCameraData.convertedObject[this._renderingEngine.id] as THREE.OrthographicCamera;
52
+
53
+ const distance = vec3.distance(orthographicCameraData.position, orthographicCameraData.target) / 2;
54
+ orthographicCameraThreeJs.up.set(orthographicCameraData.up[0], orthographicCameraData.up[1], orthographicCameraData.up[2]);
55
+ orthographicCameraThreeJs.left = orthographicCameraData.left = -distance * aspect;
56
+ orthographicCameraThreeJs.bottom = orthographicCameraData.bottom = -distance;
57
+ orthographicCameraThreeJs.right = orthographicCameraData.right = distance * aspect;
58
+ orthographicCameraThreeJs.top = orthographicCameraData.top = distance;
59
+ orthographicCameraThreeJs.near = orthographicCameraData.near = 0.01;
60
+ orthographicCameraThreeJs.far = orthographicCameraData.far = 100 * distance;
61
+ orthographicCameraThreeJs.position.set(orthographicCameraData.position[0], orthographicCameraData.position[1], orthographicCameraData.position[2]);
62
+ orthographicCameraThreeJs.lookAt(orthographicCameraData.target[0], orthographicCameraData.target[1], orthographicCameraData.target[2]);
63
+ orthographicCameraThreeJs.updateProjectionMatrix();
64
+
65
+ if (orthographicCameraData.controls.enableTurntableControls === true) {
66
+ matrix = mat4.create();
67
+ mat4.rotateZ(matrix, matrix, -orthographicCameraData.sceneRotation[1]);
68
+ mat4.translate(matrix, matrix, orthographicCameraData.controls.turntableCenter);
69
+ } else if (orthographicCameraData.controls.enableObjectControls === true) {
70
+ matrix = mat4.create();
71
+ mat4.rotateX(matrix, matrix, -orthographicCameraData.sceneRotation[0]);
72
+ mat4.rotateZ(matrix, matrix, -orthographicCameraData.sceneRotation[1]);
73
+ mat4.translate(matrix, matrix, orthographicCameraData.controls.objectControlsCenter);
74
+ }
75
+
76
+ cameraThree = orthographicCameraThreeJs;
77
+ } else {
78
+ const perspectiveCameraData = <PerspectiveCamera>camera;
79
+ let perspectiveCameraThreeJs = perspectiveCameraData.convertedObject[this._renderingEngine.id] as THREE.PerspectiveCamera;
80
+ if (!perspectiveCameraThreeJs) this.load(perspectiveCameraData);
81
+ perspectiveCameraThreeJs = perspectiveCameraData.convertedObject[this._renderingEngine.id] as THREE.PerspectiveCamera;
82
+
83
+ perspectiveCameraThreeJs.up.set(0, 0, 1);
84
+ const fov = (<PerspectiveCamera>this._renderingEngine.cameraEngine.camera).fov;
85
+ const bs = this._renderingEngine.sceneTreeManager.boundingBox.boundingSphere;
86
+ const radius = bs.radius > 0 ? bs.radius : 2;
87
+ perspectiveCameraThreeJs.fov = perspectiveCameraData.fov = fov;
88
+ perspectiveCameraThreeJs.aspect = perspectiveCameraData.aspect = aspect;
89
+ perspectiveCameraThreeJs.far = perspectiveCameraData.far = (fov < 10 ? fov * 100.0 * 100 * radius : 100 * radius);
90
+ perspectiveCameraThreeJs.near = perspectiveCameraData.near = (fov < 10 ? fov * 100.0 * 0.01 * radius : 0.01 * radius);
91
+ perspectiveCameraThreeJs.position.set(perspectiveCameraData.position[0], perspectiveCameraData.position[1], perspectiveCameraData.position[2]);
92
+ perspectiveCameraThreeJs.lookAt(perspectiveCameraData.target[0], perspectiveCameraData.target[1], perspectiveCameraData.target[2]);
93
+ perspectiveCameraThreeJs.updateProjectionMatrix();
94
+
95
+ if (perspectiveCameraData.controls.enableTurntableControls === true) {
96
+ matrix = mat4.create();
97
+ mat4.rotateZ(matrix, matrix, -perspectiveCameraData.sceneRotation[1]);
98
+ mat4.translate(matrix, matrix, perspectiveCameraData.controls.turntableCenter);
99
+ } else if (perspectiveCameraData.controls.enableObjectControls === true) {
100
+ matrix = mat4.create();
101
+ mat4.rotateX(matrix, matrix, -perspectiveCameraData.sceneRotation[0]);
102
+ mat4.rotateZ(matrix, matrix, -perspectiveCameraData.sceneRotation[1]);
103
+ mat4.translate(matrix, matrix, perspectiveCameraData.controls.objectControlsCenter);
104
+ }
105
+
106
+ cameraThree = perspectiveCameraThreeJs;
107
+ }
108
+ }
109
+
110
+ this.#camera = cameraThree;
111
+ return { camera: cameraThree, matrix };
112
+ }
113
+
114
+ public init(): void { }
115
+
116
+ public load(camera: AbstractCamera, dataChild?: SDData) {
117
+ let threeCamera: THREE.Camera | null = this.#cameraCache[camera.id];
118
+
119
+ if (camera instanceof PerspectiveCamera) {
120
+ if (!threeCamera) {
121
+ threeCamera = new THREE.PerspectiveCamera();
122
+ this.#cameraCache[camera.id] = threeCamera;
123
+ camera.convertedObject[this._renderingEngine.id] = <THREE.PerspectiveCamera>threeCamera;
124
+ if (dataChild)
125
+ dataChild.add(threeCamera);
126
+ } else {
127
+ camera.convertedObject[this._renderingEngine.id] = <THREE.PerspectiveCamera>threeCamera;
128
+ if (dataChild && !dataChild.children.find(t => t === threeCamera))
129
+ dataChild.add(threeCamera);
130
+ }
131
+ const perspectiveCamera = <PerspectiveCamera>camera;
132
+ const threePerspectiveCamera = <THREE.PerspectiveCamera>threeCamera;
133
+
134
+ threePerspectiveCamera.up.set(0, 0, 1);
135
+ if (perspectiveCamera.useNodeData) {
136
+ threePerspectiveCamera.fov = perspectiveCamera.fov;
137
+ threePerspectiveCamera.aspect = perspectiveCamera.aspect!;
138
+ threePerspectiveCamera.far = perspectiveCamera.far;
139
+ threePerspectiveCamera.near = perspectiveCamera.near;
140
+ threePerspectiveCamera.updateProjectionMatrix();
141
+ }
142
+
143
+ } else {
144
+ if (!threeCamera) {
145
+ threeCamera = new THREE.OrthographicCamera(0, 0, 0, 0);
146
+ this.#cameraCache[camera.id] = threeCamera;
147
+ camera.convertedObject[this._renderingEngine.id] = <THREE.OrthographicCamera>threeCamera;
148
+ if (dataChild)
149
+ dataChild.add(threeCamera);
150
+ } else {
151
+ camera.convertedObject[this._renderingEngine.id] = <THREE.OrthographicCamera>threeCamera;
152
+ if (dataChild && !dataChild.children.find(t => t === threeCamera))
153
+ dataChild.add(threeCamera);
154
+ }
155
+ const orthographicCamera = <OrthographicCamera>camera;
156
+ const threeOrthographicCamera = <THREE.OrthographicCamera>threeCamera;
157
+
158
+ threeOrthographicCamera.up.set(orthographicCamera.up[0], orthographicCamera.up[1], orthographicCamera.up[2]);
159
+ if (orthographicCamera.useNodeData) {
160
+ threeOrthographicCamera.left = orthographicCamera.left;
161
+ threeOrthographicCamera.bottom = orthographicCamera.bottom;
162
+ threeOrthographicCamera.right = orthographicCamera.right;
163
+ threeOrthographicCamera.top = orthographicCamera.top;
164
+ threeOrthographicCamera.near = orthographicCamera.near;
165
+ threeOrthographicCamera.far = orthographicCamera.far;
166
+ threeOrthographicCamera.updateProjectionMatrix();
167
+ }
168
+ }
169
+ }
170
+
171
+ public updateCamera(time: number, aspect: number): boolean {
172
+ if (this._renderingEngine.cameraEngine.camera?.type === 'perspective')
173
+ (<PerspectiveCamera>this._renderingEngine.cameraEngine.camera).aspect = aspect;
174
+ return (<AbstractCamera>this._renderingEngine.cameraEngine.camera)!.update(time);
175
+ }
176
+
177
+ // #endregion Public Methods (4)
178
+ }
@@ -0,0 +1,224 @@
1
+ import * as THREE from 'three'
2
+ import { MATERIAL_SIDE, MaterialStandardData, ISceneEvent, MaterialShadowData, Color } from '@shapediver/viewer.shared.types'
3
+ import { vec3 } from 'gl-matrix'
4
+ import { Box, IBox } from '@shapediver/viewer.shared.math'
5
+ import { Converter, EventEngine, EVENTTYPE } from '@shapediver/viewer.shared.services'
6
+
7
+ import { RenderingEngine } from '..'
8
+ import { SDData } from '../objects/SDData'
9
+ import { SDObject } from '../objects/SDObject'
10
+ import { IManager } from '@shapediver/viewer.rendering-engine.rendering-engine'
11
+
12
+ export class EnvironmentGeometryManager implements IManager {
13
+ // #region Properties (5)
14
+ private readonly _converter: Converter = Converter.instance;
15
+ private readonly _eventEngine: EventEngine = EventEngine.instance;
16
+
17
+ private _environmentGeometryObject!: SDObject;
18
+ private _grid!: THREE.GridHelper;
19
+ private _gridObject!: SDData;
20
+ private _groundPlane!: THREE.Mesh;
21
+ private _groundPlaneShadow!: THREE.Mesh;
22
+ private _groundPlaneObject!: SDData;
23
+ private _groundPlaneShadowObject!: SDData;
24
+ private _groundPlaneColor: Color = '#d3d3d3ff';
25
+ private _groundPlaneShadowColor: Color = '#d3d3d3ff';
26
+ private _gridColor: Color = '#44444426';
27
+
28
+ private _initialized: boolean = false;
29
+
30
+ // #endregion Properties (5)
31
+
32
+ // #region Constructors (1)
33
+
34
+ constructor(private readonly _renderingEngine: RenderingEngine) {
35
+ this._eventEngine.addListener(EVENTTYPE.SCENE.SCENE_BOUNDING_BOX_CHANGE, (e) => {
36
+ this.updateEnvironmentGeometryPosition();
37
+ })
38
+ }
39
+
40
+ // #endregion Constructors (1)
41
+
42
+ // #region Public Accessors (2)
43
+
44
+ public get gridColor(): Color {
45
+ return this._gridColor;
46
+ }
47
+
48
+ public set gridColor(value: Color) {
49
+ this._gridColor = value;
50
+ (<THREE.LineBasicMaterial>this._grid.material).opacity = typeof this._gridColor == 'string' && this._gridColor.length <= 8 ? 0.15 : this._converter.toAlpha(this._gridColor);
51
+ (<THREE.LineBasicMaterial>this._grid.material).transparent = (<THREE.LineBasicMaterial>this._grid.material).opacity !== 1;
52
+ (<THREE.LineBasicMaterial>this._grid.material).color = this._renderingEngine.createThreeJsColor(this._gridColor);
53
+ (<THREE.LineBasicMaterial>this._grid.material).needsUpdate = true;
54
+ }
55
+
56
+ public get groundPlaneColor(): Color {
57
+ return this._groundPlaneColor;
58
+ }
59
+
60
+ public set groundPlaneColor(value: Color) {
61
+ this._groundPlaneColor = value;
62
+ this.assignGroundPlaneColor(value);
63
+ }
64
+
65
+ public get groundPlaneShadowColor(): Color {
66
+ return this._groundPlaneShadowColor;
67
+ }
68
+
69
+ public set groundPlaneShadowColor(value: Color) {
70
+ this._groundPlaneShadowColor = value;
71
+ this.assignGroundPlaneShadowColor(value);
72
+ }
73
+
74
+ public get grid(): THREE.GridHelper {
75
+ return this._grid;
76
+ }
77
+
78
+ public get groundPlane(): THREE.Mesh {
79
+ return this._groundPlane;
80
+ }
81
+
82
+ public get groundPlaneShadow(): THREE.Mesh {
83
+ return this._groundPlaneShadow;
84
+ }
85
+
86
+ // #endregion Public Accessors (2)
87
+
88
+ // #region Public Methods (2)
89
+
90
+ public assignGroundPlaneColor(color: Color) {
91
+ (<THREE.MeshPhysicalMaterial>this._groundPlane.material).opacity = this._converter.toAlpha(color);
92
+ (<THREE.MeshPhysicalMaterial>this._groundPlane.material).transparent = (<THREE.MeshPhysicalMaterial>this._groundPlane.material).opacity !== 1;
93
+ (<THREE.MeshPhysicalMaterial>this._groundPlane.material).depthWrite = !(<THREE.MeshPhysicalMaterial>this._groundPlane.material).transparent;
94
+ (<THREE.MeshPhysicalMaterial>this._groundPlane.material).color = this._renderingEngine.createThreeJsColor(color);
95
+ (<THREE.MeshPhysicalMaterial>this._groundPlane.material).needsUpdate = true;
96
+ }
97
+
98
+ public assignGroundPlaneShadowColor(color: Color) {
99
+ (<THREE.ShadowMaterial>this._groundPlaneShadow.material).opacity = this._converter.toAlpha(color);
100
+ (<THREE.ShadowMaterial>this._groundPlaneShadow.material).color = this._renderingEngine.createThreeJsColor(color);
101
+ (<THREE.ShadowMaterial>this._groundPlaneShadow.material).needsUpdate = true;
102
+ }
103
+
104
+ /**
105
+ * Creates the grid extents and divisios with the specified scene extents.
106
+ *
107
+ * https://shapediver.atlassian.net/browse/SS-2961 evaluate this magic.
108
+ */
109
+ private evaluateGridMeasurements(sceneExtents: number) {
110
+ let divisions = 0.1;
111
+ let gridExtents = 1.0;
112
+ if (sceneExtents > 1) {
113
+ let tmp = Math.floor(sceneExtents).toString();
114
+ let temp = Math.pow(10, tmp.length - 1);
115
+ gridExtents = Math.max(Math.ceil(sceneExtents / temp) * temp, 1);
116
+ temp = temp / 10;
117
+ divisions = gridExtents / temp;
118
+ }
119
+ else if (sceneExtents !== 0) {
120
+ let zeros = 1 - Math.floor(Math.log(sceneExtents) / Math.log(10)) - 2;
121
+ let r = sceneExtents.toFixed(zeros + 1);
122
+ let firstDigit = parseInt(r.substr(r.length - 1)) + 1;
123
+ let gridExtentsS = '0.';
124
+ for (let i = 0; i < zeros; ++i)
125
+ gridExtentsS = gridExtentsS + '0';
126
+ gridExtents = parseFloat(gridExtentsS + firstDigit);
127
+ divisions = firstDigit * 10;
128
+ }
129
+
130
+ return { divisions, gridExtents }
131
+ }
132
+
133
+ public changeSceneExtents(bb: IBox) {
134
+ if (((bb.min[0] === 0 && bb.min[1] === 0 && bb.min[2] === 0) && (bb.max[0] === 0 && bb.max[1] === 0 && bb.max[2] === 0)) || bb.isEmpty()) return;
135
+
136
+ this._initialized = true;
137
+ let sceneExtents = vec3.distance(bb.min, bb.max);
138
+ const { divisions, gridExtents } = this.evaluateGridMeasurements(sceneExtents);
139
+
140
+ this._gridObject.remove(this._grid);
141
+ this._grid = new THREE.GridHelper(2 * gridExtents, divisions);
142
+ (<THREE.LineBasicMaterial>this._grid.material).opacity = typeof this._gridColor == 'string' && this._gridColor.length <= 8 ? 0.15 : this._converter.toAlpha(this._gridColor);
143
+ (<THREE.LineBasicMaterial>this._grid.material).transparent = (<THREE.LineBasicMaterial>this._grid.material).opacity !== 1;
144
+ (<THREE.LineBasicMaterial>this._grid.material).color = this._renderingEngine.createThreeJsColor(this._gridColor);
145
+ this._grid.rotateX(Math.PI / 2);
146
+ this._grid.visible = this._renderingEngine.gridVisibility;
147
+ this._gridObject.add(this._grid);
148
+
149
+ this._groundPlane.geometry = new THREE.PlaneGeometry(2 * gridExtents, 2 * gridExtents, 2, 2);
150
+ this._groundPlaneShadow.geometry = new THREE.PlaneGeometry(2 * gridExtents, 2 * gridExtents, 2, 2);
151
+
152
+ let eps = 0.005;
153
+ let bs = bb.boundingSphere;
154
+ this._grid.position.set(bs.center[0], bs.center[1], bb.min[2] - eps);
155
+ this._groundPlane.position.set(bs.center[0], bs.center[1], bb.min[2] - 2*eps);
156
+ this._groundPlaneShadow.position.set(bs.center[0], bs.center[1], bb.min[2] - 2*eps);
157
+ }
158
+
159
+ public init(): void {
160
+ this._environmentGeometryObject = new SDObject('environmentGeometry', '');
161
+ this._renderingEngine.sceneTreeManager.scene.add(this._environmentGeometryObject);
162
+
163
+ this._gridObject = new SDData('grid', '');
164
+ this._grid = new THREE.GridHelper();
165
+ (<THREE.LineBasicMaterial>this._grid.material).opacity = typeof this._gridColor == 'string' && this._gridColor.length <= 8 ? 0.15 : this._converter.toAlpha(this._gridColor);
166
+ (<THREE.LineBasicMaterial>this._grid.material).transparent = (<THREE.LineBasicMaterial>this._grid.material).opacity !== 1;
167
+ (<THREE.LineBasicMaterial>this._grid.material).color = this._renderingEngine.createThreeJsColor(this._gridColor);
168
+ this._grid.rotateX(Math.PI / 2);
169
+ this._grid.visible = this._renderingEngine.gridVisibility;
170
+ this._gridObject.add(this._grid);
171
+ this._environmentGeometryObject.add(this._gridObject);
172
+
173
+ this._groundPlaneObject = new SDData('groundPlane', '');
174
+ let mat = new MaterialStandardData();
175
+ mat.color = this._groundPlaneColor;
176
+ mat.side = MATERIAL_SIDE.FRONT;
177
+ mat.opacity = this._converter.toAlpha(this._groundPlaneColor);
178
+ mat.roughness = 1;
179
+ mat.metalness = 0;
180
+ this._groundPlane = new THREE.Mesh(new THREE.PlaneGeometry(), this._renderingEngine.materialLoader.load(mat));
181
+ this._groundPlane.receiveShadow = true;
182
+ this._groundPlane.visible = this._renderingEngine.groundPlaneVisibility;
183
+ this._groundPlaneObject.add(this._groundPlane);
184
+ this._environmentGeometryObject.add(this._groundPlaneObject);
185
+
186
+ this._groundPlaneShadowObject = new SDData('groundPlaneShadow', '');
187
+ let matShadow = new MaterialShadowData();
188
+ matShadow.color = this._groundPlaneShadowColor;
189
+ matShadow.opacity = this._converter.toAlpha(this._groundPlaneShadowColor);
190
+ this._groundPlaneShadow = new THREE.Mesh(new THREE.PlaneGeometry(), this._renderingEngine.materialLoader.load(matShadow));
191
+ this._groundPlaneShadow.receiveShadow = true;
192
+ this._groundPlaneShadow.visible = this._renderingEngine.groundPlaneShadowVisibility;
193
+ this._groundPlaneShadowObject.add(this._groundPlaneShadow);
194
+ this._groundPlaneShadowObject.userData.ambientOcclusion = false;
195
+ this._environmentGeometryObject.add(this._groundPlaneShadowObject);
196
+
197
+ let eps = 0.005;
198
+ this._grid.position.set(0, 0, -eps);
199
+ this._groundPlane.position.set(0, 0, -eps);
200
+ this._groundPlaneShadow.position.set(0, 0, -eps);
201
+ }
202
+
203
+ public updateEnvironmentGeometryPosition(): void {
204
+ const bb = new Box(this._renderingEngine.sceneTreeManager.boundingBox.min, this._renderingEngine.sceneTreeManager.boundingBox.max);
205
+ if (((bb.min[0] === 0 && bb.min[1] === 0 && bb.min[2] === 0) && (bb.max[0] === 0 && bb.max[1] === 0 && bb.max[2] === 0)) || bb.isEmpty()) return;
206
+
207
+ if(!this._initialized) {
208
+ this.changeSceneExtents(bb)
209
+ } else {
210
+ let eps = 0.005;
211
+ let bs = bb.boundingSphere;
212
+
213
+ let sceneExtents = vec3.distance(bb.min, bb.max);
214
+ const { divisions, gridExtents } = this.evaluateGridMeasurements(sceneExtents);
215
+ this._groundPlaneShadow.geometry = new THREE.PlaneGeometry(2 * gridExtents, 2 * gridExtents, 2, 2);
216
+
217
+ if(this._grid) this._grid.position.set(bs.center[0], bs.center[1], bb.min[2] - eps);
218
+ if(this._groundPlane) this._groundPlane.position.set(bs.center[0], bs.center[1], bb.min[2] - 2*eps);
219
+ if(this._groundPlaneShadow) this._groundPlaneShadow.position.set(bs.center[0], bs.center[1], bb.min[2] - 2*eps);
220
+ }
221
+ }
222
+
223
+ // #endregion Public Methods (2)
224
+ }