@aibee/owlly 1.0.25

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 (500) hide show
  1. package/README.external.md +75 -0
  2. package/README.md +28 -0
  3. package/lib/src/external/lines/line-geometry.d.ts +9 -0
  4. package/lib/src/external/lines/line-geometry.js +52 -0
  5. package/lib/src/external/lines/line-geometry.js.map +1 -0
  6. package/lib/src/external/lines/line-material.d.ts +10 -0
  7. package/lib/src/external/lines/line-material.js +377 -0
  8. package/lib/src/external/lines/line-material.js.map +1 -0
  9. package/lib/src/external/lines/line-segments-2.d.ts +7 -0
  10. package/lib/src/external/lines/line-segments-2.js +144 -0
  11. package/lib/src/external/lines/line-segments-2.js.map +1 -0
  12. package/lib/src/external/lines/line-segments-geometry.d.ts +15 -0
  13. package/lib/src/external/lines/line-segments-geometry.js +141 -0
  14. package/lib/src/external/lines/line-segments-geometry.js.map +1 -0
  15. package/lib/src/external/loaders/gltf-loader.d.ts +77 -0
  16. package/lib/src/external/loaders/gltf-loader.js +2319 -0
  17. package/lib/src/external/loaders/gltf-loader.js.map +1 -0
  18. package/lib/src/external/orbit-controls.d.ts +44 -0
  19. package/lib/src/external/orbit-controls.js +746 -0
  20. package/lib/src/external/orbit-controls.js.map +1 -0
  21. package/lib/src/external/renderers/css-2d-renderer.d.ts +16 -0
  22. package/lib/src/external/renderers/css-2d-renderer.js +122 -0
  23. package/lib/src/external/renderers/css-2d-renderer.js.map +1 -0
  24. package/lib/src/external/renderers/css-3d-renderer.d.ts +18 -0
  25. package/lib/src/external/renderers/css-3d-renderer.js +139 -0
  26. package/lib/src/external/renderers/css-3d-renderer.js.map +1 -0
  27. package/lib/src/external/transform-controls.d.ts +106 -0
  28. package/lib/src/external/transform-controls.js +1113 -0
  29. package/lib/src/external/transform-controls.js.map +1 -0
  30. package/lib/src/external/util/buffer-geometry-utils.d.ts +45 -0
  31. package/lib/src/external/util/buffer-geometry-utils.js +569 -0
  32. package/lib/src/external/util/buffer-geometry-utils.js.map +1 -0
  33. package/lib/src/owlly/controller/aerial-element-controller.d.ts +65 -0
  34. package/lib/src/owlly/controller/aerial-element-controller.js +236 -0
  35. package/lib/src/owlly/controller/aerial-element-controller.js.map +1 -0
  36. package/lib/src/owlly/controller/basic-controller.d.ts +324 -0
  37. package/lib/src/owlly/controller/basic-controller.js +1239 -0
  38. package/lib/src/owlly/controller/basic-controller.js.map +1 -0
  39. package/lib/src/owlly/controller/camera-controller.d.ts +37 -0
  40. package/lib/src/owlly/controller/camera-controller.js +138 -0
  41. package/lib/src/owlly/controller/camera-controller.js.map +1 -0
  42. package/lib/src/owlly/controller/controller.d.ts +61 -0
  43. package/lib/src/owlly/controller/controller.js +24 -0
  44. package/lib/src/owlly/controller/controller.js.map +1 -0
  45. package/lib/src/owlly/controller/index.d.ts +2 -0
  46. package/lib/src/owlly/controller/index.js +14 -0
  47. package/lib/src/owlly/controller/index.js.map +1 -0
  48. package/lib/src/owlly/controller/mouse-indicator-controller.d.ts +34 -0
  49. package/lib/src/owlly/controller/mouse-indicator-controller.js +119 -0
  50. package/lib/src/owlly/controller/mouse-indicator-controller.js.map +1 -0
  51. package/lib/src/owlly/controller/orbit-control.d.ts +147 -0
  52. package/lib/src/owlly/controller/orbit-control.js +265 -0
  53. package/lib/src/owlly/controller/orbit-control.js.map +1 -0
  54. package/lib/src/owlly/controller/panorama-adjust-controller.d.ts +45 -0
  55. package/lib/src/owlly/controller/panorama-adjust-controller.js +158 -0
  56. package/lib/src/owlly/controller/panorama-adjust-controller.js.map +1 -0
  57. package/lib/src/owlly/controller/panorama-controller.d.ts +441 -0
  58. package/lib/src/owlly/controller/panorama-controller.js +1944 -0
  59. package/lib/src/owlly/controller/panorama-controller.js.map +1 -0
  60. package/lib/src/owlly/controller/panorama-transform-controller.d.ts +66 -0
  61. package/lib/src/owlly/controller/panorama-transform-controller.js +137 -0
  62. package/lib/src/owlly/controller/panorama-transform-controller.js.map +1 -0
  63. package/lib/src/owlly/controller/plane-controller.d.ts +43 -0
  64. package/lib/src/owlly/controller/plane-controller.js +174 -0
  65. package/lib/src/owlly/controller/plane-controller.js.map +1 -0
  66. package/lib/src/owlly/controller/texture-controller.d.ts +181 -0
  67. package/lib/src/owlly/controller/texture-controller.js +876 -0
  68. package/lib/src/owlly/controller/texture-controller.js.map +1 -0
  69. package/lib/src/owlly/controller/tile-panorama-controller.d.ts +308 -0
  70. package/lib/src/owlly/controller/tile-panorama-controller.js +1354 -0
  71. package/lib/src/owlly/controller/tile-panorama-controller.js.map +1 -0
  72. package/lib/src/owlly/controller/transform-controller.d.ts +106 -0
  73. package/lib/src/owlly/controller/transform-controller.js +546 -0
  74. package/lib/src/owlly/controller/transform-controller.js.map +1 -0
  75. package/lib/src/owlly/element/bottom-nav-element.d.ts +65 -0
  76. package/lib/src/owlly/element/bottom-nav-element.js +258 -0
  77. package/lib/src/owlly/element/bottom-nav-element.js.map +1 -0
  78. package/lib/src/owlly/element/camera.d.ts +82 -0
  79. package/lib/src/owlly/element/camera.js +284 -0
  80. package/lib/src/owlly/element/camera.js.map +1 -0
  81. package/lib/src/owlly/element/dom-2d-element.d.ts +35 -0
  82. package/lib/src/owlly/element/dom-2d-element.js +49 -0
  83. package/lib/src/owlly/element/dom-2d-element.js.map +1 -0
  84. package/lib/src/owlly/element/dom-3d-element.d.ts +27 -0
  85. package/lib/src/owlly/element/dom-3d-element.js +34 -0
  86. package/lib/src/owlly/element/dom-3d-element.js.map +1 -0
  87. package/lib/src/owlly/element/dom-label-2d.d.ts +116 -0
  88. package/lib/src/owlly/element/dom-label-2d.js +383 -0
  89. package/lib/src/owlly/element/dom-label-2d.js.map +1 -0
  90. package/lib/src/owlly/element/element.d.ts +53 -0
  91. package/lib/src/owlly/element/element.js +76 -0
  92. package/lib/src/owlly/element/element.js.map +1 -0
  93. package/lib/src/owlly/element/floor-model.d.ts +83 -0
  94. package/lib/src/owlly/element/floor-model.js +228 -0
  95. package/lib/src/owlly/element/floor-model.js.map +1 -0
  96. package/lib/src/owlly/element/gif-kit/Gif.d.ts +96 -0
  97. package/lib/src/owlly/element/gif-kit/Gif.js +433 -0
  98. package/lib/src/owlly/element/gif-kit/Gif.js.map +1 -0
  99. package/lib/src/owlly/element/gif-kit/GifColor.d.ts +21 -0
  100. package/lib/src/owlly/element/gif-kit/GifColor.js +38 -0
  101. package/lib/src/owlly/element/gif-kit/GifColor.js.map +1 -0
  102. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.d.ts +20 -0
  103. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.js +51 -0
  104. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.js.map +1 -0
  105. package/lib/src/owlly/element/gif-kit/GifFrame.d.ts +31 -0
  106. package/lib/src/owlly/element/gif-kit/GifFrame.js +97 -0
  107. package/lib/src/owlly/element/gif-kit/GifFrame.js.map +1 -0
  108. package/lib/src/owlly/element/gif-kit/GifImage.d.ts +23 -0
  109. package/lib/src/owlly/element/gif-kit/GifImage.js +8 -0
  110. package/lib/src/owlly/element/gif-kit/GifImage.js.map +1 -0
  111. package/lib/src/owlly/element/gif-kit/GifParser.d.ts +17 -0
  112. package/lib/src/owlly/element/gif-kit/GifParser.js +197 -0
  113. package/lib/src/owlly/element/gif-kit/GifParser.js.map +1 -0
  114. package/lib/src/owlly/element/gif-kit/GifPresenter.d.ts +20 -0
  115. package/lib/src/owlly/element/gif-kit/GifPresenter.js +44 -0
  116. package/lib/src/owlly/element/gif-kit/GifPresenter.js.map +1 -0
  117. package/lib/src/owlly/element/gif-kit/GifVersion.d.ts +10 -0
  118. package/lib/src/owlly/element/gif-kit/GifVersion.js +13 -0
  119. package/lib/src/owlly/element/gif-kit/GifVersion.js.map +1 -0
  120. package/lib/src/owlly/element/gltf-mesh-element.d.ts +31 -0
  121. package/lib/src/owlly/element/gltf-mesh-element.js +137 -0
  122. package/lib/src/owlly/element/gltf-mesh-element.js.map +1 -0
  123. package/lib/src/owlly/element/index.d.ts +20 -0
  124. package/lib/src/owlly/element/index.js +25 -0
  125. package/lib/src/owlly/element/index.js.map +1 -0
  126. package/lib/src/owlly/element/map-kit/area.d.ts +24 -0
  127. package/lib/src/owlly/element/map-kit/area.js +218 -0
  128. package/lib/src/owlly/element/map-kit/area.js.map +1 -0
  129. package/lib/src/owlly/element/map-kit/block-set.d.ts +39 -0
  130. package/lib/src/owlly/element/map-kit/block-set.js +91 -0
  131. package/lib/src/owlly/element/map-kit/block-set.js.map +1 -0
  132. package/lib/src/owlly/element/map-kit/block.d.ts +77 -0
  133. package/lib/src/owlly/element/map-kit/block.js +339 -0
  134. package/lib/src/owlly/element/map-kit/block.js.map +1 -0
  135. package/lib/src/owlly/element/map-kit/index.d.ts +4 -0
  136. package/lib/src/owlly/element/map-kit/index.js +7 -0
  137. package/lib/src/owlly/element/map-kit/index.js.map +1 -0
  138. package/lib/src/owlly/element/map-kit/shape.d.ts +131 -0
  139. package/lib/src/owlly/element/map-kit/shape.js +190 -0
  140. package/lib/src/owlly/element/map-kit/shape.js.map +1 -0
  141. package/lib/src/owlly/element/mesh-element.d.ts +22 -0
  142. package/lib/src/owlly/element/mesh-element.js +64 -0
  143. package/lib/src/owlly/element/mesh-element.js.map +1 -0
  144. package/lib/src/owlly/element/mesh-line-2d.d.ts +82 -0
  145. package/lib/src/owlly/element/mesh-line-2d.js +888 -0
  146. package/lib/src/owlly/element/mesh-line-2d.js.map +1 -0
  147. package/lib/src/owlly/element/meshline-o.d.ts +64 -0
  148. package/lib/src/owlly/element/meshline-o.js +679 -0
  149. package/lib/src/owlly/element/meshline-o.js.map +1 -0
  150. package/lib/src/owlly/element/panorama-group.d.ts +241 -0
  151. package/lib/src/owlly/element/panorama-group.js +967 -0
  152. package/lib/src/owlly/element/panorama-group.js.map +1 -0
  153. package/lib/src/owlly/element/panorama.d.ts +132 -0
  154. package/lib/src/owlly/element/panorama.js +813 -0
  155. package/lib/src/owlly/element/panorama.js.map +1 -0
  156. package/lib/src/owlly/element/path-group.d.ts +69 -0
  157. package/lib/src/owlly/element/path-group.js +172 -0
  158. package/lib/src/owlly/element/path-group.js.map +1 -0
  159. package/lib/src/owlly/element/path.d.ts +99 -0
  160. package/lib/src/owlly/element/path.js +532 -0
  161. package/lib/src/owlly/element/path.js.map +1 -0
  162. package/lib/src/owlly/element/placeable-2d.d.ts +158 -0
  163. package/lib/src/owlly/element/placeable-2d.js +471 -0
  164. package/lib/src/owlly/element/placeable-2d.js.map +1 -0
  165. package/lib/src/owlly/element/polygon-mesh.d.ts +107 -0
  166. package/lib/src/owlly/element/polygon-mesh.js +308 -0
  167. package/lib/src/owlly/element/polygon-mesh.js.map +1 -0
  168. package/lib/src/owlly/element/ring-element.d.ts +79 -0
  169. package/lib/src/owlly/element/ring-element.js +384 -0
  170. package/lib/src/owlly/element/ring-element.js.map +1 -0
  171. package/lib/src/owlly/element/sphere-mesh.d.ts +28 -0
  172. package/lib/src/owlly/element/sphere-mesh.js +70 -0
  173. package/lib/src/owlly/element/sphere-mesh.js.map +1 -0
  174. package/lib/src/owlly/element/svg-floor-model.d.ts +22 -0
  175. package/lib/src/owlly/element/svg-floor-model.js +185 -0
  176. package/lib/src/owlly/element/svg-floor-model.js.map +1 -0
  177. package/lib/src/owlly/element/svg-floors.d.ts +27 -0
  178. package/lib/src/owlly/element/svg-floors.js +110 -0
  179. package/lib/src/owlly/element/svg-floors.js.map +1 -0
  180. package/lib/src/owlly/element/tile-panorama-group.d.ts +335 -0
  181. package/lib/src/owlly/element/tile-panorama-group.js +1007 -0
  182. package/lib/src/owlly/element/tile-panorama-group.js.map +1 -0
  183. package/lib/src/owlly/element/tile-panorama.d.ts +161 -0
  184. package/lib/src/owlly/element/tile-panorama.js +511 -0
  185. package/lib/src/owlly/element/tile-panorama.js.map +1 -0
  186. package/lib/src/owlly/element/tile-plane.d.ts +105 -0
  187. package/lib/src/owlly/element/tile-plane.js +361 -0
  188. package/lib/src/owlly/element/tile-plane.js.map +1 -0
  189. package/lib/src/owlly/element/video-element.d.ts +33 -0
  190. package/lib/src/owlly/element/video-element.js +160 -0
  191. package/lib/src/owlly/element/video-element.js.map +1 -0
  192. package/lib/src/owlly/geometries/ExtrudeGeometry2.d.ts +15 -0
  193. package/lib/src/owlly/geometries/ExtrudeGeometry2.js +211 -0
  194. package/lib/src/owlly/geometries/ExtrudeGeometry2.js.map +1 -0
  195. package/lib/src/owlly/index.d.ts +13 -0
  196. package/lib/src/owlly/index.js +17 -0
  197. package/lib/src/owlly/index.js.map +1 -0
  198. package/lib/src/owlly/overlay/canvas-overlay.d.ts +96 -0
  199. package/lib/src/owlly/overlay/canvas-overlay.js +511 -0
  200. package/lib/src/owlly/overlay/canvas-overlay.js.map +1 -0
  201. package/lib/src/owlly/overlay/css-2d-overlay.d.ts +14 -0
  202. package/lib/src/owlly/overlay/css-2d-overlay.js +36 -0
  203. package/lib/src/owlly/overlay/css-2d-overlay.js.map +1 -0
  204. package/lib/src/owlly/overlay/css-3d-overlay.d.ts +16 -0
  205. package/lib/src/owlly/overlay/css-3d-overlay.js +37 -0
  206. package/lib/src/owlly/overlay/css-3d-overlay.js.map +1 -0
  207. package/lib/src/owlly/overlay/index.d.ts +6 -0
  208. package/lib/src/owlly/overlay/index.js +12 -0
  209. package/lib/src/owlly/overlay/index.js.map +1 -0
  210. package/lib/src/owlly/overlay/label-overlay.d.ts +62 -0
  211. package/lib/src/owlly/overlay/label-overlay.js +329 -0
  212. package/lib/src/owlly/overlay/label-overlay.js.map +1 -0
  213. package/lib/src/owlly/overlay/overlay.d.ts +14 -0
  214. package/lib/src/owlly/overlay/overlay.js +5 -0
  215. package/lib/src/owlly/overlay/overlay.js.map +1 -0
  216. package/lib/src/owlly/overlay/path-overlay.d.ts +39 -0
  217. package/lib/src/owlly/overlay/path-overlay.js +125 -0
  218. package/lib/src/owlly/overlay/path-overlay.js.map +1 -0
  219. package/lib/src/owlly/overlay/path-overlay2.d.ts +35 -0
  220. package/lib/src/owlly/overlay/path-overlay2.js +119 -0
  221. package/lib/src/owlly/overlay/path-overlay2.js.map +1 -0
  222. package/lib/src/owlly/overlay/poi-overlay-3d.d.ts +278 -0
  223. package/lib/src/owlly/overlay/poi-overlay-3d.js +1433 -0
  224. package/lib/src/owlly/overlay/poi-overlay-3d.js.map +1 -0
  225. package/lib/src/owlly/overlay/poi-overlay.d.ts +277 -0
  226. package/lib/src/owlly/overlay/poi-overlay.js +1412 -0
  227. package/lib/src/owlly/overlay/poi-overlay.js.map +1 -0
  228. package/lib/src/owlly/owlly-2d/index.d.ts +28 -0
  229. package/lib/src/owlly/owlly-2d/index.js +93 -0
  230. package/lib/src/owlly/owlly-2d/index.js.map +1 -0
  231. package/lib/src/owlly/screen/index.d.ts +1 -0
  232. package/lib/src/owlly/screen/index.js +2 -0
  233. package/lib/src/owlly/screen/index.js.map +1 -0
  234. package/lib/src/owlly/screen/screen.d.ts +73 -0
  235. package/lib/src/owlly/screen/screen.js +237 -0
  236. package/lib/src/owlly/screen/screen.js.map +1 -0
  237. package/lib/src/owlly/stage/__test__/stage.spec.d.ts +1 -0
  238. package/lib/src/owlly/stage/__test__/stage.spec.js +15 -0
  239. package/lib/src/owlly/stage/__test__/stage.spec.js.map +1 -0
  240. package/lib/src/owlly/stage/externals.d.ts +19 -0
  241. package/lib/src/owlly/stage/externals.js +25 -0
  242. package/lib/src/owlly/stage/externals.js.map +1 -0
  243. package/lib/src/owlly/stage/index.d.ts +4 -0
  244. package/lib/src/owlly/stage/index.js +7 -0
  245. package/lib/src/owlly/stage/index.js.map +1 -0
  246. package/lib/src/owlly/stage/owlly.d.ts +38 -0
  247. package/lib/src/owlly/stage/owlly.js +168 -0
  248. package/lib/src/owlly/stage/owlly.js.map +1 -0
  249. package/lib/src/owlly/stage/stage.d.ts +108 -0
  250. package/lib/src/owlly/stage/stage.js +235 -0
  251. package/lib/src/owlly/stage/stage.js.map +1 -0
  252. package/lib/src/owlly/utils/alignment-utils.d.ts +20 -0
  253. package/lib/src/owlly/utils/alignment-utils.js +64 -0
  254. package/lib/src/owlly/utils/alignment-utils.js.map +1 -0
  255. package/lib/src/owlly/utils/basic-calc.d.ts +18 -0
  256. package/lib/src/owlly/utils/basic-calc.js +130 -0
  257. package/lib/src/owlly/utils/basic-calc.js.map +1 -0
  258. package/lib/src/owlly/utils/basic-tools.d.ts +71 -0
  259. package/lib/src/owlly/utils/basic-tools.js +236 -0
  260. package/lib/src/owlly/utils/basic-tools.js.map +1 -0
  261. package/lib/src/owlly/utils/bvh-tree.d.ts +105 -0
  262. package/lib/src/owlly/utils/bvh-tree.js +540 -0
  263. package/lib/src/owlly/utils/bvh-tree.js.map +1 -0
  264. package/lib/src/owlly/utils/camera.d.ts +37 -0
  265. package/lib/src/owlly/utils/camera.js +51 -0
  266. package/lib/src/owlly/utils/camera.js.map +1 -0
  267. package/lib/src/owlly/utils/cube-texture-cache.d.ts +25 -0
  268. package/lib/src/owlly/utils/cube-texture-cache.js +144 -0
  269. package/lib/src/owlly/utils/cube-texture-cache.js.map +1 -0
  270. package/lib/src/owlly/utils/device-utils.d.ts +18 -0
  271. package/lib/src/owlly/utils/device-utils.js +42 -0
  272. package/lib/src/owlly/utils/device-utils.js.map +1 -0
  273. package/lib/src/owlly/utils/environment-utils.d.ts +37 -0
  274. package/lib/src/owlly/utils/environment-utils.js +74 -0
  275. package/lib/src/owlly/utils/environment-utils.js.map +1 -0
  276. package/lib/src/owlly/utils/event-hub.d.ts +50 -0
  277. package/lib/src/owlly/utils/event-hub.js +107 -0
  278. package/lib/src/owlly/utils/event-hub.js.map +1 -0
  279. package/lib/src/owlly/utils/events.d.ts +219 -0
  280. package/lib/src/owlly/utils/events.js +220 -0
  281. package/lib/src/owlly/utils/events.js.map +1 -0
  282. package/lib/src/owlly/utils/geometry-utils.d.ts +119 -0
  283. package/lib/src/owlly/utils/geometry-utils.js +623 -0
  284. package/lib/src/owlly/utils/geometry-utils.js.map +1 -0
  285. package/lib/src/owlly/utils/helper.d.ts +6 -0
  286. package/lib/src/owlly/utils/helper.js +25 -0
  287. package/lib/src/owlly/utils/helper.js.map +1 -0
  288. package/lib/src/owlly/utils/index.d.ts +14 -0
  289. package/lib/src/owlly/utils/index.js +18 -0
  290. package/lib/src/owlly/utils/index.js.map +1 -0
  291. package/lib/src/owlly/utils/lru-cache.d.ts +26 -0
  292. package/lib/src/owlly/utils/lru-cache.js +110 -0
  293. package/lib/src/owlly/utils/lru-cache.js.map +1 -0
  294. package/lib/src/owlly/utils/map-utils.d.ts +7 -0
  295. package/lib/src/owlly/utils/map-utils.js +53 -0
  296. package/lib/src/owlly/utils/map-utils.js.map +1 -0
  297. package/lib/src/owlly/utils/number-utils.d.ts +8 -0
  298. package/lib/src/owlly/utils/number-utils.js +73 -0
  299. package/lib/src/owlly/utils/number-utils.js.map +1 -0
  300. package/lib/src/owlly/utils/panorama-model-util.d.ts +46 -0
  301. package/lib/src/owlly/utils/panorama-model-util.js +246 -0
  302. package/lib/src/owlly/utils/panorama-model-util.js.map +1 -0
  303. package/lib/src/owlly/utils/path-utils.d.ts +80 -0
  304. package/lib/src/owlly/utils/path-utils.js +729 -0
  305. package/lib/src/owlly/utils/path-utils.js.map +1 -0
  306. package/lib/src/owlly/utils/svgutils.d.ts +138 -0
  307. package/lib/src/owlly/utils/svgutils.js +562 -0
  308. package/lib/src/owlly/utils/svgutils.js.map +1 -0
  309. package/lib/src/owlly/utils/texture-cache.d.ts +29 -0
  310. package/lib/src/owlly/utils/texture-cache.js +116 -0
  311. package/lib/src/owlly/utils/texture-cache.js.map +1 -0
  312. package/lib/src/owlly/utils/tile-util.d.ts +187 -0
  313. package/lib/src/owlly/utils/tile-util.js +457 -0
  314. package/lib/src/owlly/utils/tile-util.js.map +1 -0
  315. package/lib/src/owlly/utils/time-profiler.d.ts +21 -0
  316. package/lib/src/owlly/utils/time-profiler.js +49 -0
  317. package/lib/src/owlly/utils/time-profiler.js.map +1 -0
  318. package/lib/src/owlly/view/__test__/perspective-view.spec.d.ts +0 -0
  319. package/lib/src/owlly/view/__test__/perspective-view.spec.js +22 -0
  320. package/lib/src/owlly/view/__test__/perspective-view.spec.js.map +1 -0
  321. package/lib/src/owlly/view/camera-view.d.ts +35 -0
  322. package/lib/src/owlly/view/camera-view.js +102 -0
  323. package/lib/src/owlly/view/camera-view.js.map +1 -0
  324. package/lib/src/owlly/view/index.d.ts +3 -0
  325. package/lib/src/owlly/view/index.js +6 -0
  326. package/lib/src/owlly/view/index.js.map +1 -0
  327. package/lib/src/owlly/view/orthographic-view.d.ts +40 -0
  328. package/lib/src/owlly/view/orthographic-view.js +95 -0
  329. package/lib/src/owlly/view/orthographic-view.js.map +1 -0
  330. package/lib/src/owlly/view/perspective-view.d.ts +40 -0
  331. package/lib/src/owlly/view/perspective-view.js +96 -0
  332. package/lib/src/owlly/view/perspective-view.js.map +1 -0
  333. package/lib/src/owlly/view/svg-map-view.d.ts +46 -0
  334. package/lib/src/owlly/view/svg-map-view.js +145 -0
  335. package/lib/src/owlly/view/svg-map-view.js.map +1 -0
  336. package/lib/src/owlly/view/view.d.ts +146 -0
  337. package/lib/src/owlly/view/view.js +318 -0
  338. package/lib/src/owlly/view/view.js.map +1 -0
  339. package/lib/src/web/main.centroid.d.ts +0 -0
  340. package/lib/src/web/main.centroid.js +74 -0
  341. package/lib/src/web/main.centroid.js.map +1 -0
  342. package/lib/src/web/main.hyma.meshline2d.d.ts +1 -0
  343. package/lib/src/web/main.hyma.meshline2d.js +76 -0
  344. package/lib/src/web/main.hyma.meshline2d.js.map +1 -0
  345. package/lib/src/web/main.jyfang.sample.d.ts +0 -0
  346. package/lib/src/web/main.jyfang.sample.js +122 -0
  347. package/lib/src/web/main.jyfang.sample.js.map +1 -0
  348. package/lib/src/web/main.rpeng.extrude.d.ts +1 -0
  349. package/lib/src/web/main.rpeng.extrude.js +180 -0
  350. package/lib/src/web/main.rpeng.extrude.js.map +1 -0
  351. package/lib/src/web/main.rpeng.mes.plane.d.ts +1 -0
  352. package/lib/src/web/main.rpeng.mes.plane.js +135 -0
  353. package/lib/src/web/main.rpeng.mes.plane.js.map +1 -0
  354. package/lib/src/web/main.rpeng.sample.d.ts +0 -0
  355. package/lib/src/web/main.rpeng.sample.js +318 -0
  356. package/lib/src/web/main.rpeng.sample.js.map +1 -0
  357. package/lib/src/web/main.rpeng.vr.d.ts +1 -0
  358. package/lib/src/web/main.rpeng.vr.js +141 -0
  359. package/lib/src/web/main.rpeng.vr.js.map +1 -0
  360. package/lib/src/web/main.sample.d.ts +1 -0
  361. package/lib/src/web/main.sample.js +52 -0
  362. package/lib/src/web/main.sample.js.map +1 -0
  363. package/lib/src/web/quattree.hyma.d.ts +0 -0
  364. package/lib/src/web/quattree.hyma.js +150 -0
  365. package/lib/src/web/quattree.hyma.js.map +1 -0
  366. package/lib/src/web/sensor-vr-plugin.d.ts +0 -0
  367. package/lib/src/web/sensor-vr-plugin.js +166 -0
  368. package/lib/src/web/sensor-vr-plugin.js.map +1 -0
  369. package/package.json +142 -0
  370. package/src/@types/SceneUtils.d.ts +9 -0
  371. package/src/@types/chaikin-smooth.d.ts +5 -0
  372. package/src/@types/global.d.ts +3 -0
  373. package/src/@types/snapsvg.d.ts +11 -0
  374. package/src/@types/svgson.d.ts +30 -0
  375. package/src/assets/favicon.ico +0 -0
  376. package/src/external/lines/line-geometry.ts +70 -0
  377. package/src/external/lines/line-material.ts +453 -0
  378. package/src/external/lines/line-segments-2.ts +194 -0
  379. package/src/external/lines/line-segments-geometry.ts +197 -0
  380. package/src/external/loaders/gltf-loader.ts +3004 -0
  381. package/src/external/orbit-controls.ts +1070 -0
  382. package/src/external/renderers/css-2d-renderer.ts +185 -0
  383. package/src/external/renderers/css-3d-renderer.ts +245 -0
  384. package/src/external/transform-controls.ts +1532 -0
  385. package/src/external/util/buffer-geometry-utils.ts +783 -0
  386. package/src/owlly/controller/aerial-element-controller.ts +277 -0
  387. package/src/owlly/controller/basic-controller.ts +1509 -0
  388. package/src/owlly/controller/camera-controller.ts +155 -0
  389. package/src/owlly/controller/controller.ts +76 -0
  390. package/src/owlly/controller/index.ts +15 -0
  391. package/src/owlly/controller/mouse-indicator-controller.ts +157 -0
  392. package/src/owlly/controller/orbit-control.ts +310 -0
  393. package/src/owlly/controller/panorama-adjust-controller.ts +183 -0
  394. package/src/owlly/controller/panorama-controller.ts +2234 -0
  395. package/src/owlly/controller/panorama-transform-controller.ts +151 -0
  396. package/src/owlly/controller/plane-controller.ts +222 -0
  397. package/src/owlly/controller/texture-controller.ts +949 -0
  398. package/src/owlly/controller/tile-panorama-controller.ts +1633 -0
  399. package/src/owlly/controller/transform-controller.ts +684 -0
  400. package/src/owlly/element/bottom-nav-element.ts +352 -0
  401. package/src/owlly/element/camera.ts +389 -0
  402. package/src/owlly/element/dom-2d-element.ts +88 -0
  403. package/src/owlly/element/dom-3d-element.ts +87 -0
  404. package/src/owlly/element/dom-label-2d.ts +497 -0
  405. package/src/owlly/element/element.ts +117 -0
  406. package/src/owlly/element/floor-model.ts +290 -0
  407. package/src/owlly/element/gif-kit/Gif.ts +509 -0
  408. package/src/owlly/element/gif-kit/GifColor.ts +44 -0
  409. package/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.ts +56 -0
  410. package/src/owlly/element/gif-kit/GifFrame.ts +207 -0
  411. package/src/owlly/element/gif-kit/GifImage.ts +26 -0
  412. package/src/owlly/element/gif-kit/GifParser.ts +254 -0
  413. package/src/owlly/element/gif-kit/GifPresenter.ts +46 -0
  414. package/src/owlly/element/gif-kit/GifVersion.ts +12 -0
  415. package/src/owlly/element/gltf-mesh-element.ts +184 -0
  416. package/src/owlly/element/index.ts +25 -0
  417. package/src/owlly/element/map-kit/area.ts +232 -0
  418. package/src/owlly/element/map-kit/block-set.ts +102 -0
  419. package/src/owlly/element/map-kit/block.ts +417 -0
  420. package/src/owlly/element/map-kit/index.ts +6 -0
  421. package/src/owlly/element/map-kit/shape.ts +285 -0
  422. package/src/owlly/element/mesh-element.ts +94 -0
  423. package/src/owlly/element/mesh-line-2d.ts +1032 -0
  424. package/src/owlly/element/meshline-o.ts +802 -0
  425. package/src/owlly/element/panorama-group.ts +1250 -0
  426. package/src/owlly/element/panorama.ts +1044 -0
  427. package/src/owlly/element/path-group.ts +212 -0
  428. package/src/owlly/element/path.ts +727 -0
  429. package/src/owlly/element/placeable-2d.ts +627 -0
  430. package/src/owlly/element/polygon-mesh.ts +344 -0
  431. package/src/owlly/element/ring-element.ts +517 -0
  432. package/src/owlly/element/sphere-mesh.ts +96 -0
  433. package/src/owlly/element/svg-floor-model.ts +200 -0
  434. package/src/owlly/element/svg-floors.ts +121 -0
  435. package/src/owlly/element/tile-panorama-group.ts +1314 -0
  436. package/src/owlly/element/tile-panorama.ts +636 -0
  437. package/src/owlly/element/tile-plane.ts +430 -0
  438. package/src/owlly/element/video-element.ts +190 -0
  439. package/src/owlly/geometries/ExtrudeGeometry2.ts +255 -0
  440. package/src/owlly/index.ts +19 -0
  441. package/src/owlly/overlay/canvas-overlay.ts +642 -0
  442. package/src/owlly/overlay/css-2d-overlay.ts +48 -0
  443. package/src/owlly/overlay/css-3d-overlay.ts +50 -0
  444. package/src/owlly/overlay/index.ts +11 -0
  445. package/src/owlly/overlay/label-overlay.ts +419 -0
  446. package/src/owlly/overlay/overlay.ts +17 -0
  447. package/src/owlly/overlay/path-overlay.ts +170 -0
  448. package/src/owlly/overlay/path-overlay2.ts +149 -0
  449. package/src/owlly/overlay/poi-overlay-3d.ts +1759 -0
  450. package/src/owlly/overlay/poi-overlay.ts +1739 -0
  451. package/src/owlly/owlly-2d/index.ts +108 -0
  452. package/src/owlly/screen/index.ts +1 -0
  453. package/src/owlly/screen/screen.ts +323 -0
  454. package/src/owlly/stage/__test__/stage.spec.ts +15 -0
  455. package/src/owlly/stage/externals.ts +45 -0
  456. package/src/owlly/stage/index.ts +12 -0
  457. package/src/owlly/stage/owlly.ts +223 -0
  458. package/src/owlly/stage/stage.ts +274 -0
  459. package/src/owlly/utils/alignment-utils.ts +84 -0
  460. package/src/owlly/utils/basic-calc.ts +141 -0
  461. package/src/owlly/utils/basic-tools.ts +286 -0
  462. package/src/owlly/utils/bvh-tree.ts +695 -0
  463. package/src/owlly/utils/camera.ts +72 -0
  464. package/src/owlly/utils/cube-texture-cache.ts +155 -0
  465. package/src/owlly/utils/device-utils.ts +53 -0
  466. package/src/owlly/utils/environment-utils.ts +81 -0
  467. package/src/owlly/utils/event-hub.ts +120 -0
  468. package/src/owlly/utils/events.ts +266 -0
  469. package/src/owlly/utils/geometry-utils.ts +749 -0
  470. package/src/owlly/utils/helper.ts +33 -0
  471. package/src/owlly/utils/index.ts +17 -0
  472. package/src/owlly/utils/lru-cache.ts +126 -0
  473. package/src/owlly/utils/map-utils.ts +55 -0
  474. package/src/owlly/utils/number-utils.ts +75 -0
  475. package/src/owlly/utils/panorama-model-util.ts +255 -0
  476. package/src/owlly/utils/path-utils.ts +837 -0
  477. package/src/owlly/utils/svgutils.ts +732 -0
  478. package/src/owlly/utils/texture-cache.ts +132 -0
  479. package/src/owlly/utils/tile-util.ts +563 -0
  480. package/src/owlly/utils/time-profiler.ts +57 -0
  481. package/src/owlly/view/__test__/perspective-view.spec.ts +23 -0
  482. package/src/owlly/view/camera-view.ts +114 -0
  483. package/src/owlly/view/index.ts +5 -0
  484. package/src/owlly/view/orthographic-view.ts +124 -0
  485. package/src/owlly/view/perspective-view.ts +125 -0
  486. package/src/owlly/view/svg-map-view.ts +187 -0
  487. package/src/owlly/view/view.ts +409 -0
  488. package/src/public/js/jsmpeg.min.js +3129 -0
  489. package/src/web/index.html +52 -0
  490. package/src/web/main.centroid.ts +85 -0
  491. package/src/web/main.hyma.meshline2d.ts +84 -0
  492. package/src/web/main.jyfang.sample.ts +139 -0
  493. package/src/web/main.rpeng.extrude.ts +194 -0
  494. package/src/web/main.rpeng.mes.plane.ts +161 -0
  495. package/src/web/main.rpeng.sample.ts +345 -0
  496. package/src/web/main.rpeng.vr.ts +159 -0
  497. package/src/web/main.sample.ts +59 -0
  498. package/src/web/quattree.hyma.ts +163 -0
  499. package/src/web/sensor-vr-plugin.ts +201 -0
  500. package/src/web/testPixel.png +0 -0
@@ -0,0 +1,1044 @@
1
+ import { Externals, NS_THREE } from '../stage/externals';
2
+ import { Element, ElementFrameContext } from './element';
3
+ import { EventHub } from '../utils/event-hub';
4
+ import { Events, OwllyEvents } from '../utils/events';
5
+ // import { CubeTextureCache } from '../utils/cube-texture-cache';
6
+ import { View } from '../view/view';
7
+ import { TextureCache } from '../utils/texture-cache';
8
+ import { DeviceUtils } from '../utils/device-utils';
9
+ import { CubeTextureCache } from '../utils/cube-texture-cache';
10
+
11
+ interface PanoramaViewConfiguration {
12
+ targetView: View;
13
+ showBorder?: boolean;
14
+ showSkyBox?: boolean;
15
+ }
16
+
17
+ /**
18
+ * 全景图对象
19
+ * @noInheritDoc
20
+ */
21
+ class Panorama extends Element {
22
+ private initialized: boolean;
23
+
24
+ private needsUpdate: boolean;
25
+
26
+ private skyBox: NS_THREE.Mesh;
27
+
28
+ private sphereMesh: NS_THREE.Mesh;
29
+
30
+ private isPlayingVideo: boolean;
31
+
32
+ private video: HTMLVideoElement | null;
33
+
34
+ private skyBoxFaceGrids: NS_THREE.Mesh[][];
35
+
36
+ private wireFrame: NS_THREE.LineSegments;
37
+
38
+ private material: NS_THREE.Material;
39
+
40
+ private faceGridsMaterials: NS_THREE.Material[][];
41
+
42
+ private uniforms: { [uniform: string]: NS_THREE.IUniform };
43
+
44
+ private faceGridsUniformses: { [uniform: string]: NS_THREE.IUniform }[][];
45
+
46
+ private faceGridsStates: number[][]; // 0=空,1=低清,2=高清
47
+
48
+ private faceGridTextureCacheKeys: string[][];
49
+
50
+ private faceGridRows: number;
51
+
52
+ private faceGridCols: number;
53
+
54
+ private gridCenters: NS_THREE.Vector4[][][];
55
+
56
+ pid: number;
57
+
58
+ seqID: number;
59
+
60
+ neighborPanoramaIDs: number[];
61
+
62
+ highTextureURLs: string[];
63
+
64
+ textureURLs: string[];
65
+
66
+ useLowTextureURLsOnly: boolean;
67
+
68
+ tiledTextureURLRoot: string | undefined;
69
+
70
+ private baseQuaternion: NS_THREE.Quaternion;
71
+
72
+ private additionalQuaternion: NS_THREE.Quaternion;
73
+
74
+ private panoramaLoaded: boolean;
75
+
76
+ private eventListeners: {
77
+ onPanoramaSelected: Function;
78
+ onEnded: ((video?: HTMLVideoElement) => void) | null;
79
+ };
80
+
81
+ private isSelected: boolean;
82
+
83
+ private viewConfigurations: Map<View, PanoramaViewConfiguration>;
84
+
85
+ private panoViews: Set<View>;
86
+
87
+ private videoCanvas: HTMLCanvasElement | null;
88
+
89
+ private mpegVideoPlayer: any; // eslint-disable-line
90
+
91
+ private videoContentType: 'mp4' | 'ts';
92
+
93
+ legacyMode: boolean;
94
+
95
+ /**
96
+ * @param textureURLs 低清立方体贴图六张图的URL数组(本地相对路径或网络URL均可),按右左上下前后的顺序
97
+ * @param highTextureURLs 高清立方体贴图六张图的URL数组(本地相对路径或网络URL均可),按右左上下前后的顺序
98
+ * @param useLowTextureURLsOnly 可选,设置后则(如果没有提供瓦片贴图)只使用低清立方体贴图
99
+ * @param tiledTextureURLRoot 可选,瓦片贴图URL的前缀部分,若没有则用highTextureURLs和lowTextureURLs作为贴图源
100
+ */
101
+ constructor(
102
+ pid: number,
103
+ seqID: number,
104
+ textureURLs: string[],
105
+ faceGridsSize: number[],
106
+ neighborPanoramaIDs: number[] = [],
107
+ highTextureURLs?: string[],
108
+ useLowTextureURLsOnly?: boolean,
109
+ tiledTextureURLRoot?: string,
110
+ position?: NS_THREE.Vector3,
111
+ quaternion?: NS_THREE.Quaternion,
112
+ legacyMode = false,
113
+ ) {
114
+ super();
115
+
116
+ const { THREE } = Externals.getInstance();
117
+ this.pid = pid;
118
+ this.seqID = seqID;
119
+ this.highTextureURLs = highTextureURLs || [];
120
+ this.textureURLs = textureURLs;
121
+ this.useLowTextureURLsOnly = !!useLowTextureURLsOnly;
122
+ this.tiledTextureURLRoot = tiledTextureURLRoot;
123
+ this.neighborPanoramaIDs = neighborPanoramaIDs;
124
+ this.viewConfigurations = new Map<View, PanoramaViewConfiguration>();
125
+ this.panoViews = new Set<View>();
126
+
127
+ this.initialized = false;
128
+
129
+ this.needsUpdate = false;
130
+
131
+ this.legacyMode = legacyMode;
132
+
133
+ const boxGeometry = new THREE.BoxBufferGeometry(2, 2, 2);
134
+
135
+ this.wireFrame = new THREE.LineSegments(
136
+ new THREE.EdgesGeometry(boxGeometry),
137
+ new THREE.LineBasicMaterial({ color: 0xff0000 }),
138
+ );
139
+ (this.wireFrame.material as NS_THREE.Material).visible = false;
140
+ this.wireFrame.renderOrder = 100;
141
+ this.add(this.wireFrame);
142
+
143
+ const sphereGeometry = new THREE.SphereBufferGeometry(1, 60, 40);
144
+ sphereGeometry.scale(1, -1, 1);
145
+ sphereGeometry.rotateY(-90 * Math.PI / 180.0);
146
+ this.sphereMesh = new THREE.Mesh(sphereGeometry);
147
+ this.sphereMesh.visible = false;
148
+ this.sphereMesh.renderOrder = 150;
149
+ this.add(this.sphereMesh);
150
+ this.isPlayingVideo = false;
151
+ this.videoCanvas = null;
152
+ this.videoContentType = 'mp4';
153
+
154
+ if (this.legacyMode) {
155
+ // do nothing now
156
+
157
+ const vertexShader = `
158
+ varying vec3 v_position;
159
+ void main(){
160
+ v_position = position;
161
+ v_position.y = v_position.y * -1.0;
162
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
163
+ }`;
164
+ const fragmentShader = `
165
+ uniform samplerCube tCube;
166
+ varying vec3 v_position;
167
+ void main(){
168
+ gl_FragColor = textureCube(tCube, v_position);
169
+ }`;
170
+
171
+ const uniforms = {
172
+ tCube: {
173
+ type: 't',
174
+ value: null,
175
+ },
176
+ };
177
+ this.uniforms = uniforms;
178
+ this.material = new THREE.ShaderMaterial({
179
+ fragmentShader,
180
+ vertexShader,
181
+ uniforms,
182
+ depthTest: false,
183
+ side: THREE.BackSide,
184
+ });
185
+ this.skyBox = new THREE.Mesh(new THREE.SphereBufferGeometry(2, 32, 32));
186
+ // this.skyBox.visible = false;// /!!!#TiledCube#
187
+ // 设置天空盒不被视锥裁剪,这样天空盒资源就能直接加载到GPU里面
188
+ this.skyBox.frustumCulled = false;
189
+ this.skyBox.material = this.material;
190
+ this.skyBox.renderOrder = 100;
191
+ this.add(this.skyBox);
192
+ this.updateTexture();
193
+ } else {
194
+ const faceVertexShader = `
195
+ varying vec2 vUv;
196
+ void main(){
197
+ vUv = uv;
198
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
199
+ }`;
200
+ const faceFragmentShader = `
201
+ uniform sampler2D tFaceTexture;
202
+ uniform vec2 uvScalar;
203
+ uniform vec2 uvOffset;
204
+ uniform vec4 blendColor;
205
+ varying vec2 vUv;
206
+ void main(){
207
+ vec2 UV = vUv * uvScalar + uvOffset;
208
+ vec4 texColor = texture2D(tFaceTexture, vec2(UV.s, 1.0 - UV.t));
209
+ gl_FragColor = (1.0 - blendColor.a) * texColor + blendColor.a * blendColor;
210
+ // gl_FragColor = vec4(vUv, 0.0, 1.0);
211
+ }`;
212
+
213
+ [this.faceGridRows, this.faceGridCols] = faceGridsSize;
214
+ const gridWidth = 2 / faceGridsSize[1];
215
+ const gridHeight = 2 / faceGridsSize[0];
216
+ this.faceGridsStates = [];
217
+ this.faceGridTextureCacheKeys = [];
218
+ this.panoViews = new Set();
219
+ this.faceGridsMaterials = [];
220
+ this.faceGridsUniformses = [];
221
+ this.skyBoxFaceGrids = [];
222
+ this.gridCenters = [];
223
+ for (let iFace = 0; iFace < 6; iFace++) {
224
+ const gridsStates = [];
225
+ const gridTextureCacheKeys = [];
226
+ const gridsUniforms = [];
227
+ const gridsMaterials = [];
228
+ const gridsMeshes = [];
229
+ const gridCenterRows: NS_THREE.Vector4[][] = [];
230
+ for (let iRow = 0; iRow < faceGridsSize[0]; iRow++) {
231
+ const gridCenterRowCols: NS_THREE.Vector4[] = [];
232
+ for (let iCol = 0; iCol < faceGridsSize[1]; iCol++) {
233
+ const gridIndex = iRow * faceGridsSize[1] + iCol;
234
+ gridsStates[gridIndex] = 0;
235
+ gridTextureCacheKeys[gridIndex] = '';
236
+ gridsUniforms[gridIndex] = {
237
+ tFaceTexture: {
238
+ type: 't',
239
+ value: null,
240
+ },
241
+ uvScalar: {
242
+ type: 'v2',
243
+ value: new THREE.Vector2(1, 1),
244
+ },
245
+ uvOffset: {
246
+ type: 'v2',
247
+ value: new THREE.Vector2(0, 0),
248
+ },
249
+ blendColor: {
250
+ type: 'v4',
251
+ value: new THREE.Vector4(0, 0, 0, 0),
252
+ },
253
+ } as { [uniform: string]: NS_THREE.IUniform };
254
+
255
+ gridsMaterials[gridIndex] = new THREE.ShaderMaterial({
256
+ fragmentShader: faceFragmentShader,
257
+ vertexShader: faceVertexShader,
258
+ uniforms: gridsUniforms[gridIndex],
259
+ depthTest: false,
260
+ side: THREE.BackSide,
261
+ });
262
+
263
+ const skyBoxFaceGeometry = new THREE.PlaneBufferGeometry(gridWidth, gridHeight);
264
+ const skyBoxFaceMesh = new THREE.Mesh(skyBoxFaceGeometry, gridsMaterials[gridIndex]);
265
+ gridsMeshes[gridIndex] = skyBoxFaceMesh;
266
+ skyBoxFaceMesh.visible = true;
267
+ // 设置天空盒不被视锥裁剪,这样天空盒资源就能直接加载到GPU里面
268
+ skyBoxFaceMesh.frustumCulled = false;
269
+ skyBoxFaceMesh.material = gridsMaterials[gridIndex];
270
+ skyBoxFaceMesh.renderOrder = 100;
271
+ this.add(skyBoxFaceMesh);
272
+
273
+ gridCenterRowCols[iCol] = new THREE.Vector4(0, 0, 0, 1);
274
+ }
275
+ gridCenterRows[iRow] = gridCenterRowCols;
276
+ }
277
+ this.faceGridsStates[iFace] = gridsStates;
278
+ this.faceGridTextureCacheKeys[iFace] = gridTextureCacheKeys;
279
+ this.faceGridsUniformses[iFace] = gridsUniforms;
280
+ this.faceGridsMaterials[iFace] = gridsMaterials;
281
+ this.skyBoxFaceGrids[iFace] = gridsMeshes;
282
+ this.gridCenters[iFace] = gridCenterRows;
283
+ }
284
+ const T2: NS_THREE.Matrix4 = new THREE.Matrix4();
285
+ const R1: NS_THREE.Matrix4 = new THREE.Matrix4();
286
+ for (let iRow = 0; iRow < faceGridsSize[0]; iRow++) {
287
+ for (let iCol = 0; iCol < faceGridsSize[1]; iCol++) {
288
+ const gridIndex = iRow * faceGridsSize[1] + iCol;
289
+ for (let iFace = 0; iFace < 6; iFace++) {
290
+ T2.makeTranslation(gridWidth / 2 - 1 + gridWidth * iCol, gridHeight / 2 - 1 + gridHeight * iRow, 0);
291
+ this.skyBoxFaceGrids[iFace][gridIndex].applyMatrix4(T2);
292
+ this.gridCenters[iFace][iRow][iCol].applyMatrix4(T2);
293
+ }
294
+ }
295
+ }
296
+ for (let iRow = 0; iRow < faceGridsSize[0]; iRow++) {
297
+ for (let iCol = 0; iCol < faceGridsSize[1]; iCol++) {
298
+ const gridIndex = iRow * faceGridsSize[1] + iCol;
299
+
300
+ T2.makeTranslation(1, 0, 0);
301
+ R1.makeRotationY(Math.PI / 2);
302
+ this.skyBoxFaceGrids[0][gridIndex].applyMatrix4(R1);// /???
303
+ this.skyBoxFaceGrids[0][gridIndex].applyMatrix4(T2);
304
+ // this.skyBoxFaceGrids[0][gridIndex].translateX(1.0).rotateY(Math.PI / 2);// R
305
+ this.gridCenters[0][iRow][iCol].applyMatrix4(R1).applyMatrix4(T2);
306
+
307
+ T2.makeTranslation(-1, 0, 0);
308
+ R1.makeRotationY(-Math.PI / 2);
309
+ this.skyBoxFaceGrids[1][gridIndex].applyMatrix4(R1);// /???
310
+ this.skyBoxFaceGrids[1][gridIndex].applyMatrix4(T2);
311
+ // this.skyBoxFaceGrids[1][gridIndex].translateX(-1.0).rotateY(-Math.PI / 2);// L
312
+ this.gridCenters[1][iRow][iCol].applyMatrix4(R1).applyMatrix4(T2);
313
+
314
+ T2.makeTranslation(0, -1, 0);
315
+ R1.makeRotationX(Math.PI / 2);
316
+ this.skyBoxFaceGrids[2][gridIndex].applyMatrix4(R1);// /???
317
+ this.skyBoxFaceGrids[2][gridIndex].applyMatrix4(T2);
318
+ // this.skyBoxFaceGrids[2][gridIndex].translateY(-1.0).rotateX(Math.PI / 2);// T
319
+ this.gridCenters[2][iRow][iCol].applyMatrix4(R1).applyMatrix4(T2);
320
+
321
+ T2.makeTranslation(0, 1, 0);
322
+ R1.makeRotationX(-Math.PI / 2);
323
+ this.skyBoxFaceGrids[3][gridIndex].applyMatrix4(R1);// /???
324
+ this.skyBoxFaceGrids[3][gridIndex].applyMatrix4(T2);
325
+ // this.skyBoxFaceGrids[3][gridIndex].translateY(1.0).rotateX(-Math.PI / 2);// D
326
+ this.gridCenters[3][iRow][iCol].applyMatrix4(R1).applyMatrix4(T2);
327
+
328
+ T2.makeTranslation(0, 0, 1);
329
+ R1.makeTranslation(0, 0, 0);
330
+ this.skyBoxFaceGrids[4][gridIndex].applyMatrix4(R1);// /???
331
+ this.skyBoxFaceGrids[4][gridIndex].applyMatrix4(T2);
332
+ // this.skyBoxFaceGrids[4][gridIndex].translateZ(1.0);// F
333
+ this.gridCenters[4][iRow][iCol].applyMatrix4(R1).applyMatrix4(T2);
334
+
335
+ T2.makeTranslation(0, 0, -1);
336
+ R1.makeRotationY(Math.PI);
337
+ this.skyBoxFaceGrids[5][gridIndex].applyMatrix4(R1);// /???
338
+ this.skyBoxFaceGrids[5][gridIndex].applyMatrix4(T2);
339
+ // this.skyBoxFaceGrids[5][gridIndex].translateZ(-1.0).rotateY(Math.PI);// B
340
+ this.gridCenters[5][iRow][iCol].applyMatrix4(R1).applyMatrix4(T2);
341
+ }
342
+ }
343
+ }
344
+
345
+ if (position) {
346
+ this.position.copy(position);
347
+ }
348
+ if (quaternion) {
349
+ this.quaternion.copy(quaternion);
350
+ }
351
+
352
+ this.baseQuaternion = new THREE.Quaternion().copy(this.quaternion);
353
+ this.additionalQuaternion = new THREE.Quaternion();
354
+
355
+ /* eslint-disable no-underscore-dangle */
356
+ const onQuaternionChangeCallback = this.quaternion._onChangeCallback;
357
+ this.quaternion._onChange(() => {
358
+ onQuaternionChangeCallback();
359
+ const targetQuaternion = new THREE.Quaternion().multiplyQuaternions(
360
+ this.baseQuaternion,
361
+ this.additionalQuaternion,
362
+ );
363
+ if (targetQuaternion.equals(this.quaternion)) return;
364
+ this.baseQuaternion = this.quaternion.clone();
365
+ const {
366
+ x, y, z, w,
367
+ } = new THREE.Quaternion().multiplyQuaternions(this.baseQuaternion, this.additionalQuaternion);
368
+ this.quaternion.set(x, y, z, w);
369
+ this.needsUpdate = true;
370
+ });
371
+ const onRotationChangeCallback = this.rotation._onChangeCallback;
372
+ this.rotation._onChange(() => {
373
+ onRotationChangeCallback();
374
+ const reverse = this.additionalQuaternion.clone().invert();
375
+ this.baseQuaternion = this.quaternion.clone().multiply(reverse);
376
+ });
377
+ this.eventListeners = {
378
+ onPanoramaSelected: (panorama: Element): void => {
379
+ this.isSelected = panorama === this;
380
+ if (!this.isSelected) return;
381
+ this.emit(Events.PANORAMA_SELECTED, this.pid);
382
+ },
383
+ onEnded: (): void => {},
384
+ };
385
+ EventHub.on(OwllyEvents.ELEMENT_SELECTED, this.eventListeners.onPanoramaSelected);
386
+ }
387
+
388
+ /**
389
+ * 为全景图对象设置立方体贴图
390
+ * @param cubeTexture 立方体贴图对象
391
+ */
392
+ public setTexture(cubeTexture: NS_THREE.CubeTexture): void {
393
+ this.uniforms.tCube.value = cubeTexture;
394
+ this.needsUpdate = true;
395
+ if (!this.panoramaLoaded) {
396
+ this.emit(Events.DID_LOAD_PANORAMA, this.pid);
397
+ }
398
+ this.panoramaLoaded = true;
399
+ }
400
+
401
+ /**
402
+ * 暂停视频播放
403
+ */
404
+ public pauseVideo(): void {
405
+ if (this.videoContentType === 'ts') {
406
+ if (this.mpegVideoPlayer) this.mpegVideoPlayer.pause();
407
+ } else {
408
+ const videoElementID = `pano_vid_${this.pid}`;
409
+ this.video = this.video || document.getElementById(videoElementID) as HTMLVideoElement;
410
+
411
+ if (!this.video) {
412
+ return;
413
+ }
414
+ this.video.pause();
415
+ }
416
+ }
417
+
418
+ /**
419
+ * 恢复视频播放
420
+ */
421
+ public async resumeVideo(): Promise<void> {
422
+ if (this.videoContentType === 'ts') {
423
+ if (this.mpegVideoPlayer) this.mpegVideoPlayer.play();
424
+ } else {
425
+ const videoElementID = `pano_vid_${this.pid}`;
426
+ this.video = this.video || document.getElementById(videoElementID) as HTMLVideoElement;
427
+
428
+ if (!this.video) {
429
+ return;
430
+ }
431
+ await this.video.play();
432
+ }
433
+ }
434
+
435
+ /**
436
+ * 停止视频播放,并释放视频相关资源
437
+ */
438
+ public stopVideo(): void {
439
+ this.sphereMesh.visible = false;
440
+
441
+ if (this.videoContentType === 'ts') {
442
+ if (this.mpegVideoPlayer) {
443
+ this.mpegVideoPlayer.stop();
444
+ this.mpegVideoPlayer.destroy();
445
+ this.mpegVideoPlayer = null;
446
+ }
447
+
448
+ const canvasTexture = (this.sphereMesh.material as NS_THREE.MeshBasicMaterial).map as NS_THREE.Texture|null;
449
+ if (canvasTexture) canvasTexture.dispose();
450
+ (this.sphereMesh.material as NS_THREE.MeshBasicMaterial).dispose();
451
+
452
+ this.videoCanvas = null;
453
+ } else {
454
+ const videoElementID = `pano_vid_${this.pid}`;
455
+ this.video = this.video || document.getElementById(videoElementID) as HTMLVideoElement;
456
+
457
+ const videoTexture = (this.sphereMesh.material as NS_THREE.MeshBasicMaterial).map as NS_THREE.Texture|null;
458
+ if (videoTexture) {
459
+ videoTexture.dispose();
460
+ }
461
+ (this.sphereMesh.material as NS_THREE.MeshBasicMaterial).dispose();
462
+ if (this.video) {
463
+ this.video.pause();
464
+ this.video.removeAttribute('src');
465
+ this.video.load();
466
+ this.video = null;
467
+ }
468
+ }
469
+
470
+ if (this.eventListeners.onEnded) this.eventListeners.onEnded();
471
+
472
+ this.isPlayingVideo = false;
473
+ this.needsUpdate = true;
474
+ }
475
+
476
+ /**
477
+ * 开始视频播放
478
+ * @param videoURL 视频地址
479
+ * @param loop 是否循环播放
480
+ * @param callbacks 回调函数集合,可选
481
+ */
482
+ public playVideo(
483
+ videoURL: string,
484
+ loop: boolean,
485
+ callbacks?: {
486
+ onPrepareToPlay?: (video?: HTMLVideoElement) => void;
487
+ onReadyToPlay?: (video?: HTMLVideoElement) => void;
488
+ onEnded?: (video?: HTMLVideoElement) => void;
489
+ },
490
+ contentType: 'mp4' | 'ts' = 'mp4',
491
+ canvasSize: [number, number] = [2048, 2048],
492
+ ): HTMLVideoElement | null {
493
+ const { onReadyToPlay, onEnded, onPrepareToPlay } = callbacks || {};
494
+ this.videoContentType = contentType;
495
+ const { THREE } = Externals.getInstance();
496
+
497
+ this.eventListeners.onEnded = onEnded || ((): void => {});
498
+
499
+ if (this.videoContentType === 'ts') {
500
+ if (!JSMpeg || !JSMpeg.Player) throw new Error('JSMpeg is needed. Please get JSMpeg from https://github.com/phoboslab/jsmpeg');
501
+ if (!this.videoCanvas) {
502
+ this.videoCanvas = document.createElement('canvas');
503
+ [this.videoCanvas.width, this.videoCanvas.height] = canvasSize;
504
+ }
505
+ this.mpegVideoPlayer = new JSMpeg.Player(
506
+ videoURL,
507
+ {
508
+ canvas: this.videoCanvas,
509
+ loop,
510
+ autoplay: false,
511
+ disableGl: false,
512
+ onSourceEstablished: (): void => {
513
+ this.needsUpdate = true;
514
+ if (onPrepareToPlay) onPrepareToPlay();
515
+ },
516
+ onPlay: (): void => {
517
+ this.sphereMesh.visible = true;
518
+ this.needsUpdate = true;
519
+ if (onReadyToPlay) onReadyToPlay();
520
+ this.isPlayingVideo = true;
521
+ },
522
+ onPause: (): void => {},
523
+ onStalled: (): void => {},
524
+ onEnded: (): void => {
525
+ this.stopVideo();
526
+ },
527
+ chunkSize: 8 * 1024 * 1024,
528
+ videoBufferSize: 8 * 512 * 1024,
529
+ decodeFirstFrame: false,
530
+ preserveDrawingBuffer: false,
531
+ },
532
+ );
533
+ const texture = new THREE.CanvasTexture(this.videoCanvas);
534
+ texture.needsUpdate = true;
535
+ if (DeviceUtils.DetectIOS()) texture.flipY = false;
536
+ this.sphereMesh.material = new THREE.MeshBasicMaterial({
537
+ map: texture,
538
+ // side: DoubleSide,
539
+ transparent: false,
540
+ depthTest: false,
541
+ depthWrite: false,
542
+ });
543
+ this.mpegVideoPlayer.source.established = false;
544
+ this.mpegVideoPlayer.source.loadedSize = 0;
545
+ this.mpegVideoPlayer.demuxer.startTime = 0;
546
+ this.mpegVideoPlayer.demuxer.currentTime = 0;
547
+ this.mpegVideoPlayer.demuxer.bits = null;
548
+ this.mpegVideoPlayer.demuxer.leftoverBytes = null;
549
+ this.mpegVideoPlayer.audioOut.resetEnqueuedTime();
550
+ this.mpegVideoPlayer.audioOut.unlock();
551
+ this.mpegVideoPlayer.seek(0);
552
+ this.mpegVideoPlayer.play();
553
+ } else {
554
+ const videoElementID = `pano_vid_${this.pid}`;
555
+ this.video = document.getElementById(videoElementID) as HTMLVideoElement;
556
+ if (!this.video) {
557
+ this.video = document.createElement('video');
558
+ this.video.id = videoElementID;
559
+ this.video.setAttribute('webkit-playsinline', 'true');
560
+ this.video.setAttribute('x5-playsinline', 'true');
561
+ this.video.setAttribute('playsinline', 'true');
562
+ this.video.setAttribute('crossorigin', 'anonymous');
563
+ // console.info('#Video# video', video);
564
+ }
565
+
566
+ this.video.src = videoURL;
567
+ this.video.loop = !!loop;
568
+ this.video.addEventListener('playing', () => {
569
+ // console.info('#Video# playing', ev);
570
+ this.sphereMesh.visible = true;
571
+ this.needsUpdate = true;
572
+ if (onReadyToPlay) {
573
+ onReadyToPlay(this.video!);
574
+ }
575
+ this.isPlayingVideo = true;
576
+ });
577
+ this.video.addEventListener('ended', () => {
578
+ this.stopVideo();
579
+ });
580
+ this.video.addEventListener('play', () => {
581
+ // console.info('#Video# play', ev);
582
+ this.needsUpdate = true;
583
+ if (onPrepareToPlay) {
584
+ onPrepareToPlay(this.video!);
585
+ }
586
+ });
587
+ this.video.play();
588
+ const texture = new THREE.VideoTexture(this.video);
589
+ texture.needsUpdate = true;
590
+ this.sphereMesh.material = new THREE.MeshBasicMaterial({
591
+ map: texture,
592
+ // side: DoubleSide,
593
+ transparent: false,
594
+ depthTest: false,
595
+ depthWrite: false,
596
+ });
597
+ return this.video;
598
+ }
599
+
600
+ return null;
601
+ }
602
+
603
+ public getIntersectedTiles(camera: NS_THREE.Camera | undefined): {
604
+ hdTiles: number[][];
605
+ ldTiles: number[][];
606
+ } {
607
+ if (!camera) {
608
+ return {
609
+ hdTiles: [],
610
+ ldTiles: [],
611
+ };
612
+ }
613
+ const { THREE } = Externals.getInstance();
614
+ this.updateMatrixWorld();
615
+ camera!.updateMatrixWorld();
616
+ const cameraPosition = camera!.position.clone();
617
+ const gridCenters = this.gridCenters.map((face: NS_THREE.Vector4[][]) => {
618
+ const newFace = face.map((row: NS_THREE.Vector4[]) => {
619
+ const newRow = row.map((v: NS_THREE.Vector4) => {
620
+ const v4 = v.clone().applyMatrix4(this.matrixWorld);
621
+ return new THREE.Vector3(v4.x, v4.y, v4.z).sub(cameraPosition).normalize();
622
+ });
623
+ return newRow;
624
+ });
625
+ return newFace;
626
+ });
627
+
628
+ const lookDirection = new THREE.Vector3(0, 0, -1).applyQuaternion(camera!.quaternion);
629
+ const retHDTiles: number[][] = [];
630
+ const retLDTiles: number[][] = [];
631
+ const cos45 = Math.SQRT1_2;
632
+ for (let iFace = 0; iFace < 6; iFace++) {
633
+ for (let iRow = 0; iRow < this.faceGridRows; iRow++) {
634
+ for (let iCol = 0; iCol < this.faceGridCols; iCol++) {
635
+ const dot = gridCenters[iFace][iRow][iCol].dot(lookDirection);
636
+ if (dot >= cos45) {
637
+ retHDTiles.push([iFace, iRow, iCol, dot]);
638
+ // } else if (dot >= 0) {
639
+ // retLDTiles.push([iFace, iRow, iCol, dot]);
640
+ } else {
641
+ retLDTiles.push([iFace, iRow, iCol, dot]); // TODO(dqiu): 优化此处
642
+ }
643
+ }
644
+ }
645
+ }
646
+ if (this.isPlayingVideo) {
647
+ return {
648
+ hdTiles: [],
649
+ ldTiles: retLDTiles,
650
+ };
651
+ }
652
+ return {
653
+ hdTiles: retHDTiles,
654
+ ldTiles: retLDTiles,
655
+ };
656
+ }
657
+
658
+ // /**
659
+ // * 为天空盒设置六个面的贴图
660
+ // * @param textures 天空盒六个面的贴图数组,按右左上下前后顺序
661
+ // */
662
+ // private setFaceTextures(textures: Texture[]): void {
663
+ // for (let i = 0; i < 6; i++) {
664
+ // this.faceUniformses[i].tFaceTexture.value = textures[i];
665
+ // }
666
+ // this.needsUpdate = true;
667
+ // }
668
+
669
+ private setFaceTexture(faceRowColDot: number[], texture: NS_THREE.Texture | null,
670
+ uniformValues?: {
671
+ uvScalar?: NS_THREE.Vector2;
672
+ uvOffset?: NS_THREE.Vector2;
673
+ blendColor?: NS_THREE.Vector4;
674
+ }, cacheKey?: string): void {
675
+ const { THREE } = Externals.getInstance();
676
+ const faceIndex = faceRowColDot[0];
677
+ const gridRow = faceRowColDot[1];
678
+ const gridCol = faceRowColDot[2];
679
+ // const dot = faceRowColDot[3];
680
+ const gridIndex = gridRow * this.faceGridCols + gridCol;
681
+ this.faceGridsUniformses[faceIndex][gridIndex].tFaceTexture.value = texture;
682
+ // const divCols = 1 / this.faceGridCols;
683
+ // const divRows = 1 / this.faceGridRows;
684
+ const { uvScalar, uvOffset, blendColor } = uniformValues || {};
685
+ this.faceGridsUniformses[faceIndex][gridIndex].uvScalar.value = uvScalar || new THREE.Vector2(1, 1);
686
+ this.faceGridsUniformses[faceIndex][gridIndex].uvOffset.value = uvOffset || new THREE.Vector2(0, 0);
687
+ this.faceGridsUniformses[faceIndex][gridIndex].blendColor.value = blendColor || new THREE.Vector4(0, 0, 0, 0);
688
+ // this.faceGridsUniformses[faceIndex][gridIndex].blendColor.value = new Vector4(dot, 0, 1 - dot, 0.5);// /!!!For Debug
689
+ // console.info(`#TiledCube# setFaceTexture (face, row, col)=(${faceIndex}, ${gridRow}, ${gridCol}):`, texture);
690
+ if (cacheKey) {
691
+ this.faceGridTextureCacheKeys[faceIndex][gridIndex] = cacheKey;
692
+ }
693
+ this.needsUpdate = true;
694
+ }
695
+
696
+ // /**
697
+ // * 异步加载立方体贴图
698
+ // * @param textureURLs 新的立方体贴图六面图像URL(如果需要更新的话)
699
+ // */
700
+ public async updateTexture(textureURLs?: string[]): Promise<void> {
701
+ if (this.legacyMode) {
702
+ if (textureURLs) {
703
+ this.textureURLs = textureURLs;
704
+ }
705
+ const cubeTexture: NS_THREE.CubeTexture = await CubeTextureCache.sharedInstance.loadCubeTexture(this.textureURLs);
706
+ this.setTexture(cubeTexture);
707
+ } else {
708
+ for (let f = 0; f < 6; f++) {
709
+ for (let g = this.faceGridCols * this.faceGridRows - 1; g >= 0; g--) {
710
+ this.faceGridsStates[f][g] = 0;
711
+ }
712
+ }
713
+
714
+ if (textureURLs) {
715
+ this.highTextureURLs = textureURLs;
716
+ this.textureURLs = textureURLs;
717
+ }
718
+ }
719
+
720
+ this.needsUpdate = true;
721
+ }
722
+
723
+ /**
724
+ * @param hdFaceGrids [][faceIndex, row, col]
725
+ */
726
+ private async updateHDGridTextures(hdFaceGrids: number[][]): Promise<NS_THREE.Texture[]> {
727
+ if (this.useLowTextureURLsOnly) {
728
+ return [];
729
+ }
730
+ const { THREE } = Externals.getInstance();
731
+ if (this.tiledTextureURLRoot) {
732
+ // console.log('#TiledCube# updateHDGridTextures with tiles');
733
+ const faceName = ['r', 'l', 't', 'd', 'f', 'b'];
734
+ // const hdTextureURLs = hdFaceGrids.map((value: number[]) => this.highTextureURLs[value[0]]);
735
+ const hdTextureURLs = hdFaceGrids.map((value: number[]) => `${this.tiledTextureURLRoot}${this.seqID}_${faceName[value[0]]}_${value[1]}-${value[2]}`);
736
+ // console.info(`#TextureLeak# Panorama.updateHDGridTextures #${this.pid} Before hdFaceTexturesCache.preloadTextures()#1 ${hdFaceGrids.length} tiles, HD.totalCost=${TextureCache.hdFaceTexturesCache.getTotalCost()}`);
737
+ const hdTextures = await TextureCache.hdFaceTexturesCache.preloadTextures(
738
+ hdTextureURLs,
739
+ hdFaceGrids.length,
740
+ );
741
+ // console.info(`#TextureLeak# Panorama.updateHDGridTextures #${this.pid} After hdFaceTexturesCache.preloadTextures()#1 ${hdFaceGrids.length} tiles, HD.totalCost=${TextureCache.hdFaceTexturesCache.getTotalCost()}`);
742
+ for (let i = hdFaceGrids.length - 1; i >= 0; i--) {
743
+ this.setFaceTexture(hdFaceGrids[i], hdTextures[i], undefined, hdTextureURLs[i]);
744
+ }
745
+ return hdTextures;
746
+ }
747
+
748
+ if (!this.highTextureURLs.length) {
749
+ return [];
750
+ }
751
+ const hdTextureURLs = hdFaceGrids.map((value: number[]) => `${this.highTextureURLs[value[0]]}`);
752
+ // console.log(`#TiledCube# hdTextureURLs[0]=${hdTextureURLs[0]}`);
753
+ // console.info(`#TextureLeak# Panorama.updateHDGridTextures #${this.pid} Before hdFaceTexturesCache.preloadTextures()#2 ${hdFaceGrids.length} tiles, HD.totalCost=${TextureCache.hdFaceTexturesCache.getTotalCost()}`);
754
+ const hdTextures = await TextureCache.hdFaceTexturesCache.preloadTextures(
755
+ hdTextureURLs,
756
+ hdFaceGrids.length,
757
+ );
758
+ // console.info(`#TextureLeak# Panorama.updateHDGridTextures #${this.pid} After hdFaceTexturesCache.preloadTextures()#2 ${hdFaceGrids.length} tiles, HD.totalCost=${TextureCache.hdFaceTexturesCache.getTotalCost()}`);
759
+ const uvScalar = new THREE.Vector2(1.0 / this.faceGridCols, 1.0 / this.faceGridRows);
760
+ for (let i = hdFaceGrids.length - 1; i >= 0; i--) {
761
+ const uvOffset = new THREE.Vector2(uvScalar.x * hdFaceGrids[i][2], uvScalar.y * hdFaceGrids[i][1]);
762
+ this.setFaceTexture(hdFaceGrids[i], hdTextures[i], {
763
+ uvScalar,
764
+ uvOffset,
765
+ }, hdTextureURLs[i]);
766
+ }
767
+ return hdTextures;
768
+ }
769
+
770
+ private async updateLDGridTextures(ldFaceGrids: number[][]): Promise<NS_THREE.Texture[]> {
771
+ const { THREE } = Externals.getInstance();
772
+ // const ldTextureURLs = ldFaceGrids.map((value: number[]) => this.highTextureURLs[value[0]]);
773
+ const ldTextureURLs = ldFaceGrids.map((value: number[]) => `${this.textureURLs[value[0]]}`);
774
+ // console.info(`#TextureLeak# Panorama.updateLDGridTextures #${this.pid} Before ldFaceTexturesCache.preloadTextures()#1 ${ldFaceGrids.length} tiles, LD.totalCost=${TextureCache.ldFaceTexturesCache.getTotalCost()}`);
775
+ const ldTextures = await TextureCache.ldFaceTexturesCache.preloadTextures(
776
+ ldTextureURLs,
777
+ ldFaceGrids.length,
778
+ );
779
+ // console.info(`#TextureLeak# Panorama.updateLDGridTextures #${this.pid} After ldFaceTexturesCache.preloadTextures()#1 ${ldFaceGrids.length} tiles, LD.totalCost=${TextureCache.ldFaceTexturesCache.getTotalCost()}`);
780
+ const uvScalar = new THREE.Vector2(1.0 / this.faceGridCols, 1.0 / this.faceGridRows);
781
+ for (let i = ldFaceGrids.length - 1; i >= 0; i--) {
782
+ const uvOffset = new THREE.Vector2(uvScalar.x * ldFaceGrids[i][2], uvScalar.y * ldFaceGrids[i][1]);
783
+ this.setFaceTexture(ldFaceGrids[i], ldTextures[i], {
784
+ uvScalar,
785
+ uvOffset,
786
+ }, ldTextureURLs[i]);
787
+ }
788
+ return ldTextures;
789
+ }
790
+
791
+ /**
792
+ * 异步加载天空盒贴图,优先从cache中获取
793
+ * @param textureURLs 新的天空盒贴图六面图像URL(如果需要更新的话)
794
+ */
795
+ public async updateFaceGridsTextures(hdFaceGrids: number[][], ldFaceGrids: number[][]): Promise<void> {
796
+ if (!this.panoramaLoaded) {
797
+ this.emit(Events.WILL_LOAD_PANORAMA, this.pid);
798
+ }
799
+ const newHDFaceGrids: number[][] = [];
800
+ hdFaceGrids.forEach((grid: number[]) => {
801
+ if (this.faceGridsStates[grid[0]][this.faceGridCols * grid[1] + grid[2]] !== 2) {
802
+ newHDFaceGrids.push(grid);
803
+ }
804
+ });
805
+ await this.updateLDGridTextures(newHDFaceGrids);
806
+ const newLDFaceGrids: number[][] = [];
807
+ ldFaceGrids.forEach((grid: number[]) => {
808
+ if (this.faceGridsStates[grid[0]][this.faceGridCols * grid[1] + grid[2]] !== 1) {
809
+ newLDFaceGrids.push(grid);
810
+ }
811
+ });
812
+ await this.updateLDGridTextures(newLDFaceGrids);
813
+ // console.info('#TiledCube# LD faces updated:', ldFaceGrids);
814
+ for (let f = 0; f < 6; f++) {
815
+ for (let g = this.faceGridRows * this.faceGridCols - 1; g >= 0; g--) {
816
+ this.faceGridsStates[f][g] = 0;
817
+ }
818
+ }
819
+ hdFaceGrids.forEach((grid: number[]) => {
820
+ this.faceGridsStates[grid[0]][this.faceGridCols * grid[1] + grid[2]] = 2;
821
+ });
822
+ ldFaceGrids.forEach((grid: number[]) => {
823
+ this.faceGridsStates[grid[0]][this.faceGridCols * grid[1] + grid[2]] = 1;
824
+ });
825
+ this.updateHDGridTextures(newHDFaceGrids);
826
+ if (!this.panoramaLoaded) {
827
+ this.emit(Events.DID_LOAD_PANORAMA, this.pid);
828
+ }
829
+ this.panoramaLoaded = true;
830
+ }
831
+
832
+ // /**
833
+ // * 若立方体贴图还未加载过,则加载,否则无操作
834
+ // */
835
+ // public async loadTextureIfNecessary(): Promise<CubeTexture> {
836
+ // if (!this.uniforms.tCube.value) {
837
+ // return this.updateTexture();
838
+ // }
839
+ // return this.uniforms.tCube.value;
840
+ // }
841
+
842
+ // /**
843
+ // * 设置线框的显示隐藏
844
+ // * @param visible 是否显示线框,同时隐藏立方体贴图
845
+ // */
846
+ // public setFrameVisible(visible: boolean): void {
847
+ // this.wireFrame.visible = visible;
848
+ // this.skyBox.visible = !visible;
849
+ // this.needsUpdate = true;
850
+ // }
851
+
852
+ /**
853
+ * 设置是否只使用低分辨率贴图
854
+ * @param useLowTexturesOnly 是否只使用低分辨率贴图
855
+ */
856
+ public setUseLowTexturesOnly(useLowTexturesOnly: boolean): void {
857
+ this.useLowTextureURLsOnly = useLowTexturesOnly;
858
+ }
859
+
860
+ public isUseLowTexturesOnly(): boolean {
861
+ return this.useLowTextureURLsOnly;
862
+ }
863
+
864
+ dispose(): void {
865
+ super.dispose();
866
+ // 销毁材质资源
867
+ // if (this.material) {
868
+ // this.material.dispose();
869
+ // }
870
+ // // 销毁天空盒实体资源
871
+ // if (this.skyBox.geometry) {
872
+ // this.skyBox.geometry.dispose();
873
+ // }
874
+ if (this.faceGridsMaterials) {
875
+ this.faceGridsMaterials.forEach((materials) => {
876
+ materials.forEach((material) => {
877
+ material.dispose();
878
+ });
879
+ });
880
+ }
881
+ if (this.skyBoxFaceGrids) {
882
+ this.skyBoxFaceGrids.forEach((meshes: NS_THREE.Mesh[]) => {
883
+ meshes.forEach((mesh) => {
884
+ if (mesh.geometry) {
885
+ mesh.geometry.dispose();
886
+ }
887
+ });
888
+ });
889
+ }
890
+ this.stopVideo();
891
+ if (this.eventListeners.onEnded) this.eventListeners.onEnded = null;
892
+ if (this.sphereMesh && this.sphereMesh.material) {
893
+ (this.sphereMesh.material as NS_THREE.Material).dispose();
894
+ }
895
+ this.initialized = false;
896
+ EventHub.off(OwllyEvents.ELEMENT_SELECTED, this.eventListeners.onPanoramaSelected);
897
+ }
898
+
899
+ /**
900
+ * @ignore
901
+ */
902
+ public update(): ElementFrameContext {
903
+ const frameContext = new ElementFrameContext(this);
904
+ if (!this.initialized) {
905
+ this.initialized = true;
906
+ frameContext.needUpdate = true;
907
+ } else if (this.needsUpdate || this.isPlayingVideo) {
908
+ frameContext.needUpdate = true;
909
+ if (this.isPlayingVideo && this.videoCanvas && (this.sphereMesh.material as NS_THREE.MeshBasicMaterial).map) {
910
+ (this.sphereMesh.material as NS_THREE.MeshBasicMaterial).map!.needsUpdate = true;
911
+ }
912
+ this.needsUpdate = false;
913
+ }
914
+ if (this.initialized && !this.parent) {
915
+ frameContext.shouldPlaceElement = true;
916
+ }
917
+ return frameContext;
918
+ }
919
+
920
+ /**
921
+ * 使用欧拉角模式设置矫正
922
+ * @param roll 横滚角, 坐标轴为x
923
+ * @param pitch 俯仰角, 坐标轴为y
924
+ * @param yaw 偏航角, 坐标轴为z
925
+ */
926
+ public setAdditionalRotationInEuler(
927
+ roll: number,
928
+ pitch: number,
929
+ yaw: number,
930
+ ): NS_THREE.Quaternion {
931
+ const { THREE } = Externals.getInstance();
932
+ this.additionalQuaternion.setFromEuler(new THREE.Euler(roll, pitch, yaw));
933
+ const {
934
+ x, y, z, w,
935
+ } = this.baseQuaternion.clone().multiply(this.additionalQuaternion);
936
+ this.quaternion.set(x, y, z, w);
937
+ this.needsUpdate = true;
938
+ return this.additionalQuaternion.clone();
939
+ }
940
+
941
+ /**
942
+ * 使用四元数模式设置矫正
943
+ * @param x 四元数的x值
944
+ * @param y 四元数的y值
945
+ * @param z 四元数的y值
946
+ * @param w 四元数的w值
947
+ */
948
+ public setAdditionalRotationInQuaternion(
949
+ x: number,
950
+ y: number,
951
+ z: number,
952
+ w: number,
953
+ ): NS_THREE.Euler {
954
+ const { THREE } = Externals.getInstance();
955
+ this.additionalQuaternion.set(x, y, z, w);
956
+ const {
957
+ x: tx, y: ty, z: tz, w: tw,
958
+ } = this.baseQuaternion.clone().multiply(this.additionalQuaternion);
959
+ this.quaternion.set(tx, ty, tz, tw);
960
+ this.needsUpdate = true;
961
+ return new THREE.Euler().setFromQuaternion(this.additionalQuaternion);
962
+ }
963
+
964
+ /**
965
+ * 配置全景图在不同view中的显示状态
966
+ * @param configuration 全景图配置
967
+ */
968
+ public addViewConfiguration(configuration: PanoramaViewConfiguration): void { // , applyImmediately?: boolean
969
+ const prevConfig = this.viewConfigurations.get(configuration.targetView);
970
+ const conf = { ...prevConfig, ...configuration } as PanoramaViewConfiguration;
971
+ this.viewConfigurations.set(configuration.targetView, conf);
972
+ this.needsUpdate = true;
973
+ // /!!!#Async#
974
+ // if (applyImmediately === true) {
975
+ // this.renderingViewChanged(configuration.targetView);
976
+ // }
977
+ }
978
+
979
+ // renderingViewChanged(view: View): void {
980
+ // if (!view.camera) return;
981
+ // super.renderingViewChanged(view);
982
+ // const conf = { showBorder: false, showSkyBox: false };
983
+ // const conf1 = this.viewConfigurations.get(view);
984
+ // if (conf1) {
985
+ // if (conf1.showBorder !== undefined) {
986
+ // conf.showBorder = conf1.showBorder;
987
+ // }
988
+ // if (conf1.showSkyBox !== undefined) {
989
+ // conf.showSkyBox = conf1.showSkyBox;
990
+ // }
991
+ // }
992
+ // (this.wireFrame.material as NS_THREE.Material).visible = conf.showBorder;
993
+ // if (!this.legacyMode) {
994
+ // this.skyBoxFaceGrids.forEach((meshes: NS_THREE.Mesh[]) => {
995
+ // meshes.forEach((mesh: NS_THREE.Mesh) => {
996
+ // (mesh.material as NS_THREE.Material).visible = this.isPlayingVideo ? false : conf.showSkyBox;
997
+ // });
998
+ // });
999
+ // }
1000
+ // const inSight = (this.position.distanceTo(view.camera.position) < 0.1);
1001
+ // const isCurrentPanorama = this.panoViews.has(view);
1002
+ // if (inSight) {
1003
+ // if (!isCurrentPanorama && !this.legacyMode) {
1004
+ // this.panoViews.add(view);
1005
+ // for (let f = 0; f < 6; f++) {
1006
+ // for (let g = this.faceGridCols * this.faceGridRows - 1; g >= 0; g--) {
1007
+ // this.faceGridsStates[f][g] = 0;
1008
+ // }
1009
+ // }
1010
+ // }
1011
+ // } else if (isCurrentPanorama) {
1012
+ // this.panoViews.delete(view);
1013
+ // if (this.isPlayingVideo) {
1014
+ // this.stopVideo();
1015
+ // }
1016
+ // if (!this.legacyMode) {
1017
+ // for (let f = 0; f < 6; f++) {
1018
+ // for (let g = this.faceGridCols * this.faceGridRows - 1; g >= 0; g--) {
1019
+ // const cacheKey = this.faceGridTextureCacheKeys[f][g];
1020
+ // TextureCache.hdFaceTexturesCache.recycleTexture(cacheKey);
1021
+ // TextureCache.ldFaceTexturesCache.recycleTexture(cacheKey);
1022
+ // }
1023
+ // }
1024
+ // }
1025
+ // }
1026
+ // if (conf.showSkyBox && inSight && isCurrentPanorama && !this.legacyMode) {
1027
+ // const tiles = this.getIntersectedTiles(view.camera);
1028
+ // // TODO(jyfang): 纯异步执行, 不打断事件
1029
+ // this.updateFaceGridsTextures(tiles.hdTiles, tiles.ldTiles);
1030
+ // }
1031
+ // (this.wireFrame.material as NS_THREE.Material).visible = conf.showBorder;
1032
+ // if (!this.legacyMode) {
1033
+ // this.skyBoxFaceGrids.forEach((meshes: NS_THREE.Mesh[]) => {
1034
+ // meshes.forEach((mesh: NS_THREE.Mesh) => {
1035
+ // (mesh.material as NS_THREE.Material).visible = this.isPlayingVideo
1036
+ // ? false : conf.showSkyBox && isCurrentPanorama;
1037
+ // });
1038
+ // });
1039
+ // }
1040
+ // this.visible = (conf.showSkyBox === true || conf.showBorder === true);
1041
+ // }
1042
+ }
1043
+
1044
+ export { Panorama, PanoramaViewConfiguration };