@zephyr3d/scene 0.6.0 → 0.7.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 (723) hide show
  1. package/README.md +1 -1
  2. package/dist/animation/animation.js +149 -27
  3. package/dist/animation/animation.js.map +1 -1
  4. package/dist/animation/animationset.js +173 -73
  5. package/dist/animation/animationset.js.map +1 -1
  6. package/dist/animation/animationtrack.js +65 -10
  7. package/dist/animation/animationtrack.js.map +1 -1
  8. package/dist/animation/eulerrotationtrack.js +41 -20
  9. package/dist/animation/eulerrotationtrack.js.map +1 -1
  10. package/dist/animation/morphtarget.js +14 -38
  11. package/dist/animation/morphtarget.js.map +1 -1
  12. package/dist/animation/morphtrack.js +59 -22
  13. package/dist/animation/morphtrack.js.map +1 -1
  14. package/dist/animation/proptrack.js +190 -0
  15. package/dist/animation/proptrack.js.map +1 -0
  16. package/dist/animation/rotationtrack.js +29 -11
  17. package/dist/animation/rotationtrack.js.map +1 -1
  18. package/dist/animation/scaletrack.js +29 -11
  19. package/dist/animation/scaletrack.js.map +1 -1
  20. package/dist/animation/skeleton.js +241 -78
  21. package/dist/animation/skeleton.js.map +1 -1
  22. package/dist/animation/translationtrack.js +30 -11
  23. package/dist/animation/translationtrack.js.map +1 -1
  24. package/dist/app/api.js +43 -0
  25. package/dist/app/api.js.map +1 -0
  26. package/dist/app/app.js +153 -0
  27. package/dist/app/app.js.map +1 -0
  28. package/dist/app/engine.js +312 -0
  29. package/dist/app/engine.js.map +1 -0
  30. package/dist/app/inputmgr.js +351 -0
  31. package/dist/app/inputmgr.js.map +1 -0
  32. package/dist/app/runtimescript.js +62 -0
  33. package/dist/app/runtimescript.js.map +1 -0
  34. package/dist/app/scriptingsystem.js +220 -0
  35. package/dist/app/scriptingsystem.js.map +1 -0
  36. package/dist/app/scriptregistry.js +432 -0
  37. package/dist/app/scriptregistry.js.map +1 -0
  38. package/dist/asset/assetmanager.js +772 -291
  39. package/dist/asset/assetmanager.js.map +1 -1
  40. package/dist/asset/builtin.js +7 -43
  41. package/dist/asset/builtin.js.map +1 -1
  42. package/dist/asset/loaders/dds/dds.js +17 -93
  43. package/dist/asset/loaders/dds/dds.js.map +1 -1
  44. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  45. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  46. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  47. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  48. package/dist/asset/loaders/gltf/helpers.js +27 -14
  49. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  50. package/dist/asset/loaders/hdr/hdr.js +17 -12
  51. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  52. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  53. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  54. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  55. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  56. package/dist/asset/loaders/loader.js.map +1 -1
  57. package/dist/asset/model.js +158 -4
  58. package/dist/asset/model.js.map +1 -1
  59. package/dist/blitter/bilateralblur.js +0 -1
  60. package/dist/blitter/bilateralblur.js.map +1 -1
  61. package/dist/blitter/blitter.js +22 -23
  62. package/dist/blitter/blitter.js.map +1 -1
  63. package/dist/blitter/box.js.map +1 -1
  64. package/dist/blitter/copy.js.map +1 -1
  65. package/dist/blitter/gaussianblur.js +23 -23
  66. package/dist/blitter/gaussianblur.js.map +1 -1
  67. package/dist/camera/base.js +141 -34
  68. package/dist/camera/base.js.map +1 -1
  69. package/dist/camera/camera.js +653 -149
  70. package/dist/camera/camera.js.map +1 -1
  71. package/dist/camera/fps.js +2 -10
  72. package/dist/camera/fps.js.map +1 -1
  73. package/dist/camera/orbit.js +132 -59
  74. package/dist/camera/orbit.js.map +1 -1
  75. package/dist/camera/orthocamera.js +37 -12
  76. package/dist/camera/orthocamera.js.map +1 -1
  77. package/dist/camera/perspectivecamera.js +37 -20
  78. package/dist/camera/perspectivecamera.js.map +1 -1
  79. package/dist/index.d.ts +18268 -6982
  80. package/dist/index.js +49 -16
  81. package/dist/index.js.map +1 -1
  82. package/dist/material/blinn.js +5 -0
  83. package/dist/material/blinn.js.map +1 -1
  84. package/dist/material/grassmaterial.js +6 -1
  85. package/dist/material/grassmaterial.js.map +1 -1
  86. package/dist/material/lambert.js +6 -1
  87. package/dist/material/lambert.js.map +1 -1
  88. package/dist/material/material.js +346 -73
  89. package/dist/material/material.js.map +1 -1
  90. package/dist/material/meshmaterial.js +498 -156
  91. package/dist/material/meshmaterial.js.map +1 -1
  92. package/dist/material/mixins/albedocolor.js +5 -1
  93. package/dist/material/mixins/albedocolor.js.map +1 -1
  94. package/dist/material/mixins/foliage.js +3 -3
  95. package/dist/material/mixins/foliage.js.map +1 -1
  96. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  97. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  98. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  99. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  101. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  103. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  105. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  106. package/dist/material/mixins/lit.js +16 -4
  107. package/dist/material/mixins/lit.js.map +1 -1
  108. package/dist/material/mixins/pbr/brdf.js +134 -0
  109. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  110. package/dist/material/mixins/pbr/common.js +68 -85
  111. package/dist/material/mixins/pbr/common.js.map +1 -1
  112. package/dist/material/mixins/texture.js +98 -83
  113. package/dist/material/mixins/texture.js.map +1 -1
  114. package/dist/material/mixins/vertexcolor.js +6 -2
  115. package/dist/material/mixins/vertexcolor.js.map +1 -1
  116. package/dist/material/particle.js +272 -0
  117. package/dist/material/particle.js.map +1 -0
  118. package/dist/material/pbrblueprint.js +186 -0
  119. package/dist/material/pbrblueprint.js.map +1 -0
  120. package/dist/material/pbrmr.js +10 -0
  121. package/dist/material/pbrmr.js.map +1 -1
  122. package/dist/material/pbrsg.js +10 -0
  123. package/dist/material/pbrsg.js.map +1 -1
  124. package/dist/material/shader/helper.js +521 -287
  125. package/dist/material/shader/helper.js.map +1 -1
  126. package/dist/material/terrain-cm.js +607 -0
  127. package/dist/material/terrain-cm.js.map +1 -0
  128. package/dist/material/terrainmaterial.js +59 -54
  129. package/dist/material/terrainmaterial.js.map +1 -1
  130. package/dist/material/unlit.js +5 -0
  131. package/dist/material/unlit.js.map +1 -1
  132. package/dist/material/water.js +415 -0
  133. package/dist/material/water.js.map +1 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  141. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  143. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  144. package/dist/posteffect/bloom.js +39 -54
  145. package/dist/posteffect/bloom.js.map +1 -1
  146. package/dist/posteffect/compositor.js +95 -128
  147. package/dist/posteffect/compositor.js.map +1 -1
  148. package/dist/posteffect/fxaa.js +10 -18
  149. package/dist/posteffect/fxaa.js.map +1 -1
  150. package/dist/posteffect/grayscale.js +9 -17
  151. package/dist/posteffect/grayscale.js.map +1 -1
  152. package/dist/posteffect/motionblur.js +105 -0
  153. package/dist/posteffect/motionblur.js.map +1 -0
  154. package/dist/posteffect/posteffect.js +66 -35
  155. package/dist/posteffect/posteffect.js.map +1 -1
  156. package/dist/posteffect/sao.js +13 -21
  157. package/dist/posteffect/sao.js.map +1 -1
  158. package/dist/posteffect/ssr.js +60 -100
  159. package/dist/posteffect/ssr.js.map +1 -1
  160. package/dist/posteffect/taa.js +175 -0
  161. package/dist/posteffect/taa.js.map +1 -0
  162. package/dist/posteffect/tonemap.js +12 -20
  163. package/dist/posteffect/tonemap.js.map +1 -1
  164. package/dist/render/abuffer_oit.js +30 -19
  165. package/dist/render/abuffer_oit.js.map +1 -1
  166. package/dist/render/clipmap.js +429 -101
  167. package/dist/render/clipmap.js.map +1 -1
  168. package/dist/render/cluster_light.js +7 -5
  169. package/dist/render/cluster_light.js.map +1 -1
  170. package/dist/render/cull_visitor.js +43 -3
  171. package/dist/render/cull_visitor.js.map +1 -1
  172. package/dist/render/depthpass.js +14 -5
  173. package/dist/render/depthpass.js.map +1 -1
  174. package/dist/render/drawable_mixin.js +113 -40
  175. package/dist/render/drawable_mixin.js.map +1 -1
  176. package/dist/render/envlight.js +86 -141
  177. package/dist/render/envlight.js.map +1 -1
  178. package/dist/render/fbm_wavegenerator.js +234 -0
  179. package/dist/render/fbm_wavegenerator.js.map +1 -0
  180. package/dist/render/fft_wavegenerator.js +64 -50
  181. package/dist/render/fft_wavegenerator.js.map +1 -1
  182. package/dist/render/fullscreenquad.js +2 -2
  183. package/dist/render/fullscreenquad.js.map +1 -1
  184. package/dist/render/gerstner_wavegenerator.js +98 -48
  185. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  186. package/dist/render/globalbindgroup_allocator.js +4 -2
  187. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  188. package/dist/render/hzb.js +6 -3
  189. package/dist/render/hzb.js.map +1 -1
  190. package/dist/render/lightpass.js +19 -18
  191. package/dist/render/lightpass.js.map +1 -1
  192. package/dist/render/objectcolorpass.js +4 -4
  193. package/dist/render/objectcolorpass.js.map +1 -1
  194. package/dist/render/primitive.js +213 -104
  195. package/dist/render/primitive.js.map +1 -1
  196. package/dist/render/render_queue.js +40 -20
  197. package/dist/render/render_queue.js.map +1 -1
  198. package/dist/render/renderbundle_wrapper.js +65 -15
  199. package/dist/render/renderbundle_wrapper.js.map +1 -1
  200. package/dist/render/renderer.js +326 -185
  201. package/dist/render/renderer.js.map +1 -1
  202. package/dist/render/renderpass.js +20 -36
  203. package/dist/render/renderpass.js.map +1 -1
  204. package/dist/render/shadowmap_pass.js +3 -3
  205. package/dist/render/shadowmap_pass.js.map +1 -1
  206. package/dist/render/sky.js +864 -541
  207. package/dist/render/sky.js.map +1 -1
  208. package/dist/render/weightedblended_oit.js +13 -15
  209. package/dist/render/weightedblended_oit.js.map +1 -1
  210. package/dist/scene/batchgroup.js +18 -5
  211. package/dist/scene/batchgroup.js.map +1 -1
  212. package/dist/scene/environment.js +78 -48
  213. package/dist/scene/environment.js.map +1 -1
  214. package/dist/scene/graph_node.js +2 -3
  215. package/dist/scene/graph_node.js.map +1 -1
  216. package/dist/scene/light.js +28 -89
  217. package/dist/scene/light.js.map +1 -1
  218. package/dist/scene/mesh.js +218 -87
  219. package/dist/scene/mesh.js.map +1 -1
  220. package/dist/scene/octree.js +371 -162
  221. package/dist/scene/octree.js.map +1 -1
  222. package/dist/scene/particlesys.js +684 -0
  223. package/dist/scene/particlesys.js.map +1 -0
  224. package/dist/scene/raycast_visitor.js +34 -5
  225. package/dist/scene/raycast_visitor.js.map +1 -1
  226. package/dist/scene/scene.js +309 -85
  227. package/dist/scene/scene.js.map +1 -1
  228. package/dist/scene/scene_node.js +675 -102
  229. package/dist/scene/scene_node.js.map +1 -1
  230. package/dist/scene/terrain/grass.js +48 -49
  231. package/dist/scene/terrain/grass.js.map +1 -1
  232. package/dist/scene/terrain/heightfield.js +46 -44
  233. package/dist/scene/terrain/heightfield.js.map +1 -1
  234. package/dist/scene/terrain/patch.js +20 -29
  235. package/dist/scene/terrain/patch.js.map +1 -1
  236. package/dist/scene/terrain/quadtree.js +58 -27
  237. package/dist/scene/terrain/quadtree.js.map +1 -1
  238. package/dist/scene/terrain/terrain.js +31 -45
  239. package/dist/scene/terrain/terrain.js.map +1 -1
  240. package/dist/scene/terrain-cm/grass.js +603 -0
  241. package/dist/scene/terrain-cm/grass.js.map +1 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  243. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  245. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  246. package/dist/scene/water.js +378 -0
  247. package/dist/scene/water.js.map +1 -0
  248. package/dist/shaders/atmosphere.js +957 -0
  249. package/dist/shaders/atmosphere.js.map +1 -0
  250. package/dist/shaders/fog.js +116 -0
  251. package/dist/shaders/fog.js.map +1 -0
  252. package/dist/shaders/misc.js.map +1 -1
  253. package/dist/shaders/noise.js +217 -8
  254. package/dist/shaders/noise.js.map +1 -1
  255. package/dist/shaders/pbr.js.map +1 -1
  256. package/dist/shaders/shadow.js +8 -8
  257. package/dist/shaders/shadow.js.map +1 -1
  258. package/dist/shaders/ssr.js +87 -39
  259. package/dist/shaders/ssr.js.map +1 -1
  260. package/dist/shaders/temporal.js +216 -0
  261. package/dist/shaders/temporal.js.map +1 -0
  262. package/dist/shaders/water.js +42 -20
  263. package/dist/shaders/water.js.map +1 -1
  264. package/dist/shadow/esm.js +31 -13
  265. package/dist/shadow/esm.js.map +1 -1
  266. package/dist/shadow/pcf_opt.js +12 -13
  267. package/dist/shadow/pcf_opt.js.map +1 -1
  268. package/dist/shadow/pcf_pd.js +12 -13
  269. package/dist/shadow/pcf_pd.js.map +1 -1
  270. package/dist/shadow/shader.js +38 -0
  271. package/dist/shadow/shader.js.map +1 -0
  272. package/dist/shadow/shadow_impl.js.map +1 -1
  273. package/dist/shadow/shadowmapper.js +67 -26
  274. package/dist/shadow/shadowmapper.js.map +1 -1
  275. package/dist/shadow/ssm.js +15 -16
  276. package/dist/shadow/ssm.js.map +1 -1
  277. package/dist/shadow/vsm.js +33 -16
  278. package/dist/shadow/vsm.js.map +1 -1
  279. package/dist/shapes/box.js +181 -83
  280. package/dist/shapes/box.js.map +1 -1
  281. package/dist/shapes/cylinder.js +101 -43
  282. package/dist/shapes/cylinder.js.map +1 -1
  283. package/dist/shapes/plane.js +70 -29
  284. package/dist/shapes/plane.js.map +1 -1
  285. package/dist/shapes/shape.js +120 -17
  286. package/dist/shapes/shape.js.map +1 -1
  287. package/dist/shapes/sphere.js +78 -44
  288. package/dist/shapes/sphere.js.map +1 -1
  289. package/dist/shapes/tetrahedron.js +256 -0
  290. package/dist/shapes/tetrahedron.js.map +1 -0
  291. package/dist/shapes/torus.js +76 -55
  292. package/dist/shapes/torus.js.map +1 -1
  293. package/dist/src/animation/animation.js +127 -0
  294. package/dist/src/animation/animation.js.map +1 -0
  295. package/dist/src/animation/animationset.js +255 -0
  296. package/dist/src/animation/animationset.js.map +1 -0
  297. package/dist/src/animation/animationtrack.js +34 -0
  298. package/dist/src/animation/animationtrack.js.map +1 -0
  299. package/dist/src/animation/eulerrotationtrack.js +52 -0
  300. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  301. package/dist/src/animation/morphtarget.js +93 -0
  302. package/dist/src/animation/morphtarget.js.map +1 -0
  303. package/dist/src/animation/morphtrack.js +70 -0
  304. package/dist/src/animation/morphtrack.js.map +1 -0
  305. package/dist/src/animation/proptrack.js +161 -0
  306. package/dist/src/animation/proptrack.js.map +1 -0
  307. package/dist/src/animation/rotationtrack.js +51 -0
  308. package/dist/src/animation/rotationtrack.js.map +1 -0
  309. package/dist/src/animation/scaletrack.js +50 -0
  310. package/dist/src/animation/scaletrack.js.map +1 -0
  311. package/dist/src/animation/skeleton.js +204 -0
  312. package/dist/src/animation/skeleton.js.map +1 -0
  313. package/dist/src/animation/translationtrack.js +50 -0
  314. package/dist/src/animation/translationtrack.js.map +1 -0
  315. package/dist/{app.js → src/app/app.js} +18 -40
  316. package/dist/src/app/app.js.map +1 -0
  317. package/dist/{input → src/app}/inputmgr.js +41 -16
  318. package/dist/src/app/inputmgr.js.map +1 -0
  319. package/dist/src/asset/assetmanager.js +404 -0
  320. package/dist/src/asset/assetmanager.js.map +1 -0
  321. package/dist/src/asset/builtin.js +337 -0
  322. package/dist/src/asset/builtin.js.map +1 -0
  323. package/dist/src/asset/loaders/dds/dds.js +470 -0
  324. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  326. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  328. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  330. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  332. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  334. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  336. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  337. package/dist/src/asset/loaders/loader.js +45 -0
  338. package/dist/src/asset/loaders/loader.js.map +1 -0
  339. package/dist/src/asset/model.js +414 -0
  340. package/dist/src/asset/model.js.map +1 -0
  341. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  342. package/dist/src/blitter/bilateralblur.js.map +1 -0
  343. package/dist/src/blitter/blitter.js +390 -0
  344. package/dist/src/blitter/blitter.js.map +1 -0
  345. package/dist/src/blitter/box.js +118 -0
  346. package/dist/src/blitter/box.js.map +1 -0
  347. package/dist/src/blitter/copy.js +22 -0
  348. package/dist/src/blitter/copy.js.map +1 -0
  349. package/dist/src/blitter/gaussianblur.js +228 -0
  350. package/dist/src/blitter/gaussianblur.js.map +1 -0
  351. package/dist/src/camera/base.js +92 -0
  352. package/dist/src/camera/base.js.map +1 -0
  353. package/dist/src/camera/camera.js +1005 -0
  354. package/dist/src/camera/camera.js.map +1 -0
  355. package/dist/src/camera/fps.js +238 -0
  356. package/dist/src/camera/fps.js.map +1 -0
  357. package/dist/src/camera/orbit.js +245 -0
  358. package/dist/src/camera/orbit.js.map +1 -0
  359. package/dist/src/camera/orthocamera.js +167 -0
  360. package/dist/src/camera/orthocamera.js.map +1 -0
  361. package/dist/src/camera/perspectivecamera.js +141 -0
  362. package/dist/src/camera/perspectivecamera.js.map +1 -0
  363. package/dist/src/index.js +120 -0
  364. package/dist/src/index.js.map +1 -0
  365. package/dist/src/material/blinn.js +81 -0
  366. package/dist/src/material/blinn.js.map +1 -0
  367. package/dist/src/material/grassmaterial.js +113 -0
  368. package/dist/src/material/grassmaterial.js.map +1 -0
  369. package/dist/src/material/lambert.js +92 -0
  370. package/dist/src/material/lambert.js.map +1 -0
  371. package/dist/src/material/material.js +301 -0
  372. package/dist/src/material/material.js.map +1 -0
  373. package/dist/src/material/meshmaterial.js +704 -0
  374. package/dist/src/material/meshmaterial.js.map +1 -0
  375. package/dist/src/material/mixins/albedocolor.js +76 -0
  376. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  377. package/dist/src/material/mixins/foliage.js +47 -0
  378. package/dist/src/material/mixins/foliage.js.map +1 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  380. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  382. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  384. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  386. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  387. package/dist/src/material/mixins/lit.js +476 -0
  388. package/dist/src/material/mixins/lit.js.map +1 -0
  389. package/dist/src/material/mixins/pbr/common.js +918 -0
  390. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  391. package/dist/src/material/mixins/texture.js +172 -0
  392. package/dist/src/material/mixins/texture.js.map +1 -0
  393. package/dist/src/material/mixins/vertexcolor.js +56 -0
  394. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  395. package/dist/src/material/particle.js +178 -0
  396. package/dist/src/material/particle.js.map +1 -0
  397. package/dist/src/material/pbrmr.js +97 -0
  398. package/dist/src/material/pbrmr.js.map +1 -0
  399. package/dist/src/material/pbrsg.js +97 -0
  400. package/dist/src/material/pbrsg.js.map +1 -0
  401. package/dist/src/material/shader/helper.js +1209 -0
  402. package/dist/src/material/shader/helper.js.map +1 -0
  403. package/dist/src/material/terrain-cm.js +606 -0
  404. package/dist/src/material/terrain-cm.js.map +1 -0
  405. package/dist/src/material/terrainmaterial.js +375 -0
  406. package/dist/src/material/terrainmaterial.js.map +1 -0
  407. package/dist/src/material/unlit.js +41 -0
  408. package/dist/src/material/unlit.js.map +1 -0
  409. package/dist/src/material/water.js +417 -0
  410. package/dist/src/material/water.js.map +1 -0
  411. package/dist/src/posteffect/bloom.js +361 -0
  412. package/dist/src/posteffect/bloom.js.map +1 -0
  413. package/dist/src/posteffect/compositor.js +226 -0
  414. package/dist/src/posteffect/compositor.js.map +1 -0
  415. package/dist/src/posteffect/fxaa.js +273 -0
  416. package/dist/src/posteffect/fxaa.js.map +1 -0
  417. package/dist/src/posteffect/grayscale.js +69 -0
  418. package/dist/src/posteffect/grayscale.js.map +1 -0
  419. package/dist/src/posteffect/motionblur.js +96 -0
  420. package/dist/src/posteffect/motionblur.js.map +1 -0
  421. package/dist/src/posteffect/posteffect.js +126 -0
  422. package/dist/src/posteffect/posteffect.js.map +1 -0
  423. package/dist/src/posteffect/sao.js +324 -0
  424. package/dist/src/posteffect/sao.js.map +1 -0
  425. package/dist/src/posteffect/ssr.js +489 -0
  426. package/dist/src/posteffect/ssr.js.map +1 -0
  427. package/dist/src/posteffect/taa.js +172 -0
  428. package/dist/src/posteffect/taa.js.map +1 -0
  429. package/dist/src/posteffect/tonemap.js +94 -0
  430. package/dist/src/posteffect/tonemap.js.map +1 -0
  431. package/dist/src/render/abuffer_oit.js +361 -0
  432. package/dist/src/render/abuffer_oit.js.map +1 -0
  433. package/dist/src/render/clipmap.js +851 -0
  434. package/dist/src/render/clipmap.js.map +1 -0
  435. package/dist/src/render/cluster_light.js +333 -0
  436. package/dist/src/render/cluster_light.js.map +1 -0
  437. package/dist/src/render/cull_visitor.js +187 -0
  438. package/dist/src/render/cull_visitor.js.map +1 -0
  439. package/dist/src/render/depthpass.js +68 -0
  440. package/dist/src/render/depthpass.js.map +1 -0
  441. package/dist/src/render/drawable_mixin.js +227 -0
  442. package/dist/src/render/drawable_mixin.js.map +1 -0
  443. package/dist/src/render/envlight.js +463 -0
  444. package/dist/src/render/envlight.js.map +1 -0
  445. package/dist/src/render/fbm_wavegenerator.js +251 -0
  446. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  447. package/dist/src/render/fft_wavegenerator.js +1006 -0
  448. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  449. package/dist/src/render/fullscreenquad.js +38 -0
  450. package/dist/src/render/fullscreenquad.js.map +1 -0
  451. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  452. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  453. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  454. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  455. package/dist/src/render/hzb.js +273 -0
  456. package/dist/src/render/hzb.js.map +1 -0
  457. package/dist/src/render/lightpass.js +172 -0
  458. package/dist/src/render/lightpass.js.map +1 -0
  459. package/dist/src/render/objectcolorpass.js +51 -0
  460. package/dist/src/render/objectcolorpass.js.map +1 -0
  461. package/dist/src/render/primitive.js +364 -0
  462. package/dist/src/render/primitive.js.map +1 -0
  463. package/dist/src/render/render_queue.js +467 -0
  464. package/dist/src/render/render_queue.js.map +1 -0
  465. package/dist/src/render/renderbundle_wrapper.js +152 -0
  466. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  467. package/dist/src/render/renderer.js +455 -0
  468. package/dist/src/render/renderer.js.map +1 -0
  469. package/dist/src/render/renderpass.js +200 -0
  470. package/dist/src/render/renderpass.js.map +1 -0
  471. package/dist/src/render/shadowmap_pass.js +56 -0
  472. package/dist/src/render/shadowmap_pass.js.map +1 -0
  473. package/dist/src/render/sky.js +1103 -0
  474. package/dist/src/render/sky.js.map +1 -0
  475. package/dist/src/render/weightedblended_oit.js +168 -0
  476. package/dist/src/render/weightedblended_oit.js.map +1 -0
  477. package/dist/src/scene/batchgroup.js +162 -0
  478. package/dist/src/scene/batchgroup.js.map +1 -0
  479. package/dist/src/scene/environment.js +209 -0
  480. package/dist/src/scene/environment.js.map +1 -0
  481. package/dist/src/scene/graph_node.js +72 -0
  482. package/dist/src/scene/graph_node.js.map +1 -0
  483. package/dist/src/scene/light.js +416 -0
  484. package/dist/src/scene/light.js.map +1 -0
  485. package/dist/src/scene/mesh.js +341 -0
  486. package/dist/src/scene/mesh.js.map +1 -0
  487. package/dist/src/scene/octree.js +649 -0
  488. package/dist/src/scene/octree.js.map +1 -0
  489. package/dist/src/scene/particlesys.js +738 -0
  490. package/dist/src/scene/particlesys.js.map +1 -0
  491. package/dist/src/scene/raycast_visitor.js +103 -0
  492. package/dist/src/scene/raycast_visitor.js.map +1 -0
  493. package/dist/src/scene/scene.js +284 -0
  494. package/dist/src/scene/scene.js.map +1 -0
  495. package/dist/src/scene/scene_node.js +732 -0
  496. package/dist/src/scene/scene_node.js.map +1 -0
  497. package/dist/src/scene/terrain/grass.js +278 -0
  498. package/dist/src/scene/terrain/grass.js.map +1 -0
  499. package/dist/src/scene/terrain/heightfield.js +475 -0
  500. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  501. package/dist/src/scene/terrain/patch.js +530 -0
  502. package/dist/src/scene/terrain/patch.js.map +1 -0
  503. package/dist/src/scene/terrain/quadtree.js +461 -0
  504. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  505. package/dist/src/scene/terrain/terrain.js +246 -0
  506. package/dist/src/scene/terrain/terrain.js.map +1 -0
  507. package/dist/src/scene/terrain-cm/grass.js +594 -0
  508. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  510. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  512. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  513. package/dist/src/scene/water.js +374 -0
  514. package/dist/src/scene/water.js.map +1 -0
  515. package/dist/src/shaders/atmosphere.js +957 -0
  516. package/dist/src/shaders/atmosphere.js.map +1 -0
  517. package/dist/src/shaders/fog.js +112 -0
  518. package/dist/src/shaders/fog.js.map +1 -0
  519. package/dist/src/shaders/misc.js +266 -0
  520. package/dist/src/shaders/misc.js.map +1 -0
  521. package/dist/src/shaders/noise.js +222 -0
  522. package/dist/src/shaders/noise.js.map +1 -0
  523. package/dist/src/shaders/pbr.js +51 -0
  524. package/dist/src/shaders/pbr.js.map +1 -0
  525. package/dist/src/shaders/shadow.js +636 -0
  526. package/dist/src/shaders/shadow.js.map +1 -0
  527. package/dist/src/shaders/ssr.js +490 -0
  528. package/dist/src/shaders/ssr.js.map +1 -0
  529. package/dist/src/shaders/temporal.js +215 -0
  530. package/dist/src/shaders/temporal.js.map +1 -0
  531. package/dist/src/shaders/water.js +756 -0
  532. package/dist/src/shaders/water.js.map +1 -0
  533. package/dist/src/shadow/esm.js +237 -0
  534. package/dist/src/shadow/esm.js.map +1 -0
  535. package/dist/src/shadow/pcf_opt.js +181 -0
  536. package/dist/src/shadow/pcf_opt.js.map +1 -0
  537. package/dist/src/shadow/pcf_pd.js +189 -0
  538. package/dist/src/shadow/pcf_pd.js.map +1 -0
  539. package/dist/src/shadow/shader.js +37 -0
  540. package/dist/src/shadow/shader.js.map +1 -0
  541. package/dist/src/shadow/shadow_impl.js +15 -0
  542. package/dist/src/shadow/shadow_impl.js.map +1 -0
  543. package/dist/src/shadow/shadowmapper.js +790 -0
  544. package/dist/src/shadow/shadowmapper.js.map +1 -0
  545. package/dist/src/shadow/ssm.js +159 -0
  546. package/dist/src/shadow/ssm.js.map +1 -0
  547. package/dist/src/shadow/vsm.js +297 -0
  548. package/dist/src/shadow/vsm.js.map +1 -0
  549. package/dist/src/shapes/box.js +386 -0
  550. package/dist/src/shapes/box.js.map +1 -0
  551. package/dist/src/shapes/cylinder.js +125 -0
  552. package/dist/src/shapes/cylinder.js.map +1 -0
  553. package/dist/src/shapes/plane.js +88 -0
  554. package/dist/src/shapes/plane.js.map +1 -0
  555. package/dist/src/shapes/shape.js +87 -0
  556. package/dist/src/shapes/shape.js.map +1 -0
  557. package/dist/src/shapes/sphere.js +114 -0
  558. package/dist/src/shapes/sphere.js.map +1 -0
  559. package/dist/src/shapes/tetrahedron.js +188 -0
  560. package/dist/src/shapes/tetrahedron.js.map +1 -0
  561. package/dist/src/shapes/torus.js +111 -0
  562. package/dist/src/shapes/torus.js.map +1 -0
  563. package/dist/src/utility/aabbtree.js +400 -0
  564. package/dist/src/utility/aabbtree.js.map +1 -0
  565. package/dist/src/utility/bounding_volume.js +29 -0
  566. package/dist/src/utility/bounding_volume.js.map +1 -0
  567. package/dist/src/utility/debug.js +28 -0
  568. package/dist/src/utility/debug.js.map +1 -0
  569. package/dist/src/utility/draco/decoder.js +116 -0
  570. package/dist/src/utility/draco/decoder.js.map +1 -0
  571. package/dist/src/utility/misc.js +105 -0
  572. package/dist/src/utility/misc.js.map +1 -0
  573. package/dist/src/utility/panorama.js +163 -0
  574. package/dist/src/utility/panorama.js.map +1 -0
  575. package/dist/src/utility/pmrem.js +354 -0
  576. package/dist/src/utility/pmrem.js.map +1 -0
  577. package/dist/src/utility/rendermipmap.js +115 -0
  578. package/dist/src/utility/rendermipmap.js.map +1 -0
  579. package/dist/src/utility/serialization/json.js +402 -0
  580. package/dist/src/utility/serialization/json.js.map +1 -0
  581. package/dist/src/utility/serialization/manager.js +623 -0
  582. package/dist/src/utility/serialization/manager.js.map +1 -0
  583. package/dist/src/utility/serialization/scene/animation.js +248 -0
  584. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  585. package/dist/src/utility/serialization/scene/batch.js +59 -0
  586. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  587. package/dist/src/utility/serialization/scene/camera.js +790 -0
  588. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  589. package/dist/src/utility/serialization/scene/common.js +222 -0
  590. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  591. package/dist/src/utility/serialization/scene/light.js +575 -0
  592. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  593. package/dist/src/utility/serialization/scene/material.js +1111 -0
  594. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  595. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  596. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  597. package/dist/src/utility/serialization/scene/misc.js +39 -0
  598. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  599. package/dist/src/utility/serialization/scene/node.js +451 -0
  600. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  601. package/dist/src/utility/serialization/scene/particle.js +425 -0
  602. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  603. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  604. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  605. package/dist/src/utility/serialization/scene/scene.js +704 -0
  606. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  607. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  608. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  609. package/dist/src/utility/serialization/scene/water.js +465 -0
  610. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  611. package/dist/src/utility/shprojector.js +297 -0
  612. package/dist/src/utility/shprojector.js.map +1 -0
  613. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  614. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  615. package/dist/src/utility/textures/gradientnoise.js +62 -0
  616. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  617. package/dist/src/utility/textures/randomnoise.js +41 -0
  618. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  619. package/dist/src/values.js +162 -0
  620. package/dist/src/values.js.map +1 -0
  621. package/dist/utility/aabbtree.js +15 -5
  622. package/dist/utility/aabbtree.js.map +1 -1
  623. package/dist/utility/blueprint/common/constants.js +851 -0
  624. package/dist/utility/blueprint/common/constants.js.map +1 -0
  625. package/dist/utility/blueprint/common/math.js +2045 -0
  626. package/dist/utility/blueprint/common/math.js.map +1 -0
  627. package/dist/utility/blueprint/common.js +7 -0
  628. package/dist/utility/blueprint/common.js.map +1 -0
  629. package/dist/utility/blueprint/material/common.js +7 -0
  630. package/dist/utility/blueprint/material/common.js.map +1 -0
  631. package/dist/utility/blueprint/material/func.js +521 -0
  632. package/dist/utility/blueprint/material/func.js.map +1 -0
  633. package/dist/utility/blueprint/material/inputs.js +1659 -0
  634. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  635. package/dist/utility/blueprint/material/ir.js +1311 -0
  636. package/dist/utility/blueprint/material/ir.js.map +1 -0
  637. package/dist/utility/blueprint/material/pbr.js +362 -0
  638. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  639. package/dist/utility/blueprint/material/texture.js +1099 -0
  640. package/dist/utility/blueprint/material/texture.js.map +1 -0
  641. package/dist/utility/blueprint/node.js +187 -0
  642. package/dist/utility/blueprint/node.js.map +1 -0
  643. package/dist/utility/bounding_volume.js +0 -1
  644. package/dist/utility/bounding_volume.js.map +1 -1
  645. package/dist/utility/debug.js +26 -0
  646. package/dist/utility/debug.js.map +1 -0
  647. package/dist/utility/draco/decoder.js +1 -1
  648. package/dist/utility/draco/decoder.js.map +1 -1
  649. package/dist/utility/misc.js +18 -6
  650. package/dist/utility/misc.js.map +1 -1
  651. package/dist/utility/panorama.js +8 -6
  652. package/dist/utility/panorama.js.map +1 -1
  653. package/dist/utility/pmrem.js +30 -18
  654. package/dist/utility/pmrem.js.map +1 -1
  655. package/dist/utility/rendermipmap.js +116 -0
  656. package/dist/utility/rendermipmap.js.map +1 -0
  657. package/dist/utility/serialization/blueprint/constants.js +255 -0
  658. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  660. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  662. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  663. package/dist/utility/serialization/json.js +402 -0
  664. package/dist/utility/serialization/json.js.map +1 -0
  665. package/dist/utility/serialization/manager.js +1176 -0
  666. package/dist/utility/serialization/manager.js.map +1 -0
  667. package/dist/utility/serialization/scene/animation.js +699 -0
  668. package/dist/utility/serialization/scene/animation.js.map +1 -0
  669. package/dist/utility/serialization/scene/batch.js +53 -0
  670. package/dist/utility/serialization/scene/batch.js.map +1 -0
  671. package/dist/utility/serialization/scene/camera.js +808 -0
  672. package/dist/utility/serialization/scene/camera.js.map +1 -0
  673. package/dist/utility/serialization/scene/common.js +224 -0
  674. package/dist/utility/serialization/scene/common.js.map +1 -0
  675. package/dist/utility/serialization/scene/light.js +589 -0
  676. package/dist/utility/serialization/scene/light.js.map +1 -0
  677. package/dist/utility/serialization/scene/material.js +942 -0
  678. package/dist/utility/serialization/scene/material.js.map +1 -0
  679. package/dist/utility/serialization/scene/mesh.js +374 -0
  680. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  681. package/dist/utility/serialization/scene/misc.js +39 -0
  682. package/dist/utility/serialization/scene/misc.js.map +1 -0
  683. package/dist/utility/serialization/scene/node.js +391 -0
  684. package/dist/utility/serialization/scene/node.js.map +1 -0
  685. package/dist/utility/serialization/scene/particle.js +425 -0
  686. package/dist/utility/serialization/scene/particle.js.map +1 -0
  687. package/dist/utility/serialization/scene/primitive.js +582 -0
  688. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  689. package/dist/utility/serialization/scene/scene.js +763 -0
  690. package/dist/utility/serialization/scene/scene.js.map +1 -0
  691. package/dist/utility/serialization/scene/terrain.js +495 -0
  692. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  693. package/dist/utility/serialization/scene/water.js +465 -0
  694. package/dist/utility/serialization/scene/water.js.map +1 -0
  695. package/dist/utility/shprojector.js +313 -0
  696. package/dist/utility/shprojector.js.map +1 -0
  697. package/dist/utility/textures/ggxlut.js +4 -5
  698. package/dist/utility/textures/ggxlut.js.map +1 -1
  699. package/dist/utility/textures/gradientnoise.js +2 -1
  700. package/dist/utility/textures/gradientnoise.js.map +1 -1
  701. package/dist/utility/textures/randomnoise.js +1 -0
  702. package/dist/utility/textures/randomnoise.js.map +1 -1
  703. package/dist/values.js +91 -4
  704. package/dist/values.js.map +1 -1
  705. package/package.json +29 -15
  706. package/dist/app.js.map +0 -1
  707. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  708. package/dist/input/inputmgr.js.map +0 -1
  709. package/dist/material/mixins/ggxlut.js.map +0 -1
  710. package/dist/posteffect/water.js +0 -508
  711. package/dist/posteffect/water.js.map +0 -1
  712. package/dist/render/oit.js +0 -16
  713. package/dist/render/oit.js.map +0 -1
  714. package/dist/render/scatteringlut.js +0 -634
  715. package/dist/render/scatteringlut.js.map +0 -1
  716. package/dist/render/watermesh.js +0 -193
  717. package/dist/render/watermesh.js.map +0 -1
  718. package/dist/render/wavegenerator.js +0 -8
  719. package/dist/render/wavegenerator.js.map +0 -1
  720. package/dist/scene/xform.js +0 -247
  721. package/dist/scene/xform.js.map +0 -1
  722. package/dist/utility/shprojection.js +0 -442
  723. package/dist/utility/shprojection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"camera.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"camera.js","sources":["../../src/camera/camera.ts"],"sourcesContent":["import type { CubeFace, Plane } from '@zephyr3d/base';\r\nimport { DRef, Vector2, Matrix4x4, Frustum, Vector4, Vector3, Ray, halton23 } from '@zephyr3d/base';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport type { Drawable, PickTarget } from '../render/drawable';\r\nimport type { BaseTexture } from '@zephyr3d/device';\r\nimport { Compositor } from '../posteffect/compositor';\r\nimport type { Scene } from '../scene/scene';\r\nimport type {\r\n BaseCameraController,\r\n IBaseEvent,\r\n IControllerKeydownEvent,\r\n IControllerKeyupEvent,\r\n IControllerPointerDownEvent,\r\n IControllerPointerMoveEvent,\r\n IControllerPointerUpEvent,\r\n IControllerWheelEvent\r\n} from './base';\r\nimport type { OIT } from '../render/oit';\r\nimport { TAA } from '../posteffect/taa';\r\nimport { SSR } from '../posteffect/ssr';\r\nimport { Tonemap } from '../posteffect/tonemap';\r\nimport { FXAA } from '../posteffect/fxaa';\r\nimport { Bloom } from '../posteffect/bloom';\r\nimport { SAO } from '../posteffect/sao';\r\nimport { MotionBlur } from '../posteffect/motionblur';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Result of a camera picking operation.\r\n *\r\n * Used by GPU/CPU picking flows to report what was intersected.\r\n *\r\n * @public\r\n */\r\nexport type PickResult = {\r\n /** Distance from ray origin to intersection point (world units). */\r\n distance: number;\r\n /** Intersection point in world space. */\r\n intersectedPoint: Vector3;\r\n /** The intersected drawable, if known. */\r\n drawable: Drawable;\r\n /** Logical pick target information. */\r\n target: PickTarget;\r\n};\r\n\r\n/**\r\n * Temporal history resources used by reprojection (TAA, motion blur).\r\n *\r\n * @public\r\n */\r\nexport type CameraHistoryData = {\r\n prevColorTex: BaseTexture;\r\n prevMotionVectorTex: BaseTexture;\r\n};\r\n\r\n/**\r\n * A renderable camera node that manages view/projection math, frusta,\r\n * input control, picking, and a post-processing chain via a compositor.\r\n *\r\n * Key features:\r\n * - Maintains projection, view, VP, and inverse VP matrices and lazily recomputes them when invalidated.\r\n * - Provides world- and view-space frusta for culling and clipping.\r\n * - Supports perspective and orthographic projections.\r\n * - Integrates with post effects (Tonemap, FXAA, TAA, Bloom, SSR, SSAO, Motion Blur) through an internal `Compositor`.\r\n * - Handles temporal jitter and history state when TAA or motion blur are enabled.\r\n * - Emits picking rays from screen coordinates and supports async GPU picking.\r\n * - Optional controller integration for user input handling.\r\n *\r\n * Performance notes:\r\n * - Matrices/frusta are computed on demand and cached until invalidation.\r\n * - Temporal jitter and history are set up only when required by enabled features and device support.\r\n *\r\n * @public\r\n */\r\nexport class Camera extends SceneNode {\r\n /** @internal Halton 2-3 sequence used for TAA jittering. */\r\n private static readonly _halton23 = halton23(16);\r\n /** @internal Per-camera history resources. */\r\n private static readonly _historyData: WeakMap<Camera, CameraHistoryData> = new WeakMap();\r\n /** @internal Projection matrix. */\r\n protected _projMatrix: Matrix4x4;\r\n /** @internal Inverse projection matrix. */\r\n protected _invProjMatrix: Matrix4x4;\r\n /** @internal View matrix (world -\\> camera). */\r\n protected _viewMatrix: Matrix4x4;\r\n /** @internal View-projection matrix. */\r\n protected _viewProjMatrix: Matrix4x4;\r\n /** @internal Rotation matrix derived from world transform (camera conventions). */\r\n protected _rotationMatrix: Matrix4x4;\r\n /** @internal Inverse view-projection matrix. */\r\n protected _invViewProjMatrix: Matrix4x4;\r\n /** @internal Framebuffer clear color, disabled when null. Default is null */\r\n protected _clearColor: Vector4;\r\n /** @internal Framebuffer depth clear value, disabled when null. Default is 1 */\r\n protected _clearDepth: number;\r\n /** @internal Framebuffer stencil clear value, disabled when null. Default is 0 */\r\n protected _clearStencil: number;\r\n /** @internal Optional clip plane in camera space. */\r\n protected _clipPlane: Plane;\r\n /** @internal Camera controller (input). */\r\n protected _controller: BaseCameraController;\r\n /** @internal World-space frustum (from VP). */\r\n protected _frustum: Frustum;\r\n /** @internal View-space frustum (from P). */\r\n protected _frustumV: Frustum;\r\n /** @internal Dirty flag indicating derived matrices/frusta need recompute. */\r\n protected _dirty: boolean;\r\n /** @internal Viewport [x, y, w, h]; null uses full framebuffer. */\r\n protected _viewport: number[];\r\n /** @internal Scissor rectangle [x, y, w, h]; null uses viewport. */\r\n protected _scissor: number[];\r\n /** @internal Clip plane mask for custom clipping schemes. */\r\n protected _clipMask: number;\r\n /** @internal Order-Independent Transparency reference. */\r\n protected _oit: DRef<OIT>;\r\n /** @internal Whether to perform a depth pre-pass. */\r\n protected _depthPrePass: boolean;\r\n /** @internal Whether command buffers may be reused for optimization. */\r\n protected _commandBufferReuse: boolean;\r\n /** @internal Hi-Z acceleration enable (primarily for SSR). */\r\n protected _HiZ: boolean;\r\n /** @internal If true, a float point backbuffer will be used. The default value is true */\r\n protected _HDR: boolean;\r\n /** @internal Tonemap enable flag (via post effect). */\r\n protected _toneMap: boolean;\r\n /** @internal Tonemap post effect reference. */\r\n protected _postEffectTonemap: DRef<Tonemap>;\r\n /** @internal Tonemap exposure. */\r\n protected _tonemapExposure: number;\r\n /** @internal Motion blur enable flag (via post effect). */\r\n protected _motionBlur: boolean;\r\n /** @internal Motion blur post effect reference. */\r\n protected _postEffectMotionBlur: DRef<MotionBlur>;\r\n /** @internal Motion blur strength. */\r\n protected _motionBlurStrength: number;\r\n /** @internal Bloom enable flag (via post effect). */\r\n protected _bloom: boolean;\r\n /** @internal Bloom post effect reference. */\r\n protected _postEffectBloom: DRef<Bloom>;\r\n /** @internal Bloom downsample level cap. */\r\n protected _bloomMaxDownsampleLevels: number;\r\n /** @internal Bloom downsample resolution limit. */\r\n protected _bloomDownsampleLimit: number;\r\n /** @internal Bloom threshold. */\r\n protected _bloomThreshold: number;\r\n /** @internal Bloom threshold knee (soft thresholding). */\r\n protected _bloomThresholdKnee: number;\r\n /** @internal Bloom intensity. */\r\n protected _bloomIntensity: number;\r\n\r\n /** @internal FXAA enable flag (via post effect). */\r\n protected _FXAA: boolean;\r\n /** @internal FXAA post effect reference. */\r\n protected _postEffectFXAA: DRef<FXAA>;\r\n\r\n /** @internal TAA enable flag (via post effect). */\r\n protected _TAA: boolean;\r\n /** @internal TAA post effect reference. */\r\n protected _postEffectTAA: DRef<TAA>;\r\n /** @internal TAA debug mode (implementation-defined). */\r\n protected _TAADebug: number;\r\n\r\n /** @internal SSR enable flag (via post effect). */\r\n protected _SSR: boolean;\r\n /** @internal SSR post effect reference. */\r\n protected _postEffectSSR: DRef<SSR>;\r\n /** @internal SSR parameter vector: (maxDistance, iterations, thickness, reserved). */\r\n protected _ssrParams: Vector4;\r\n /** @internal SSR roughness cutoff; above this SSR is suppressed. */\r\n protected _ssrMaxRoughness: number;\r\n /** @internal SSR roughness factor scaling. */\r\n protected _ssrRoughnessFactor: number;\r\n /** @internal SSR stride for ray marching. */\r\n protected _ssrStride: number;\r\n /** @internal Whether SSR thickness is computed automatically. */\r\n protected _ssrCalcThickness: boolean;\r\n /** @internal SSR blur scale. */\r\n protected _ssrBlurriness: number;\r\n /** @internal SSR blur depth cutoff. */\r\n protected _ssrBlurDepthCutoff: number;\r\n /** @internal SSR blur kernel size. */\r\n protected _ssrBlurKernelSize: number;\r\n /** @internal SSR Gaussian blur standard deviation. */\r\n protected _ssrBlurStdDev: number;\r\n\r\n /** @internal SSAO enable flag (via post effect). */\r\n protected _SSAO: boolean;\r\n /** @internal SSAO post effect reference. */\r\n protected _postEffectSSAO: DRef<SAO>;\r\n /** @internal SSAO scale (sampling radius multiplier). */\r\n protected _SSAOScale: number;\r\n /** @internal SSAO bias (self-shadowing reduction). */\r\n protected _SSAOBias: number;\r\n /** @internal SSAO sample radius. */\r\n protected _SSAORadius: number;\r\n /** @internal SSAO intensity. */\r\n protected _SSAOIntensity: number;\r\n /** @internal SSAO blur depth cutoff. */\r\n protected _SSAOBlurDepthCutoff: number;\r\n\r\n /** @internal Pending GPU-pick promise (one-shot). */\r\n protected _pickResultPromise: Promise<PickResult>;\r\n /** @internal Resolver for the pending pick promise. */\r\n protected _pickResultResolve: (result: PickResult) => void;\r\n /** @internal Last pick X position (viewport-relative). */\r\n protected _pickPosX: number;\r\n /** @internal Last pick Y position (viewport-relative). */\r\n protected _pickPosY: number;\r\n /** @internal Last resolved pick result (optional cache). */\r\n protected _pickResult: PickResult;\r\n\r\n /** @internal Current jitter value in clip space (x, y). */\r\n protected _jitterValue: Vector2;\r\n /** @internal Previous frame’s jitter value. */\r\n protected _prevJitterValue: Vector2;\r\n /** @internal Current jittered VP matrix. */\r\n protected _jitteredVPMatrix: Matrix4x4;\r\n /** @internal Inverse of the current jittered VP matrix. */\r\n protected _jitteredInvVPMatrix: Matrix4x4;\r\n /** @internal Previous frame’s non-jittered VP matrix. */\r\n protected _prevVPMatrix: Matrix4x4;\r\n /** @internal Previous frame’s camera world position. */\r\n protected _prevPosition: Vector3;\r\n /** @internal Previous frame’s jittered VP matrix. */\r\n protected _prevJitteredVPMatrix: Matrix4x4;\r\n /** @internal Post-processing compositor attached to this camera. */\r\n protected _compositor: Compositor;\r\n /** @internal Pointer interaction rectangle in css pixels (relative to canvas) */\r\n protected _interactionRect: [left: number, top: number, width: number, height: number];\r\n /** @internal captured by which mouse button (-1 if not captured) */\r\n protected _capturedButton: number;\r\n /**\r\n * Creates a new camera node.\r\n *\r\n * Initializes projection/view matrices, temporal fields, controller linkage, and\r\n * builds the default post-processing pipeline on the internal compositor.\r\n *\r\n * @param scene - The scene that owns this camera.\r\n * @param projectionMatrix - Optional projection matrix to initialize with.\r\n */\r\n constructor(scene: Scene, projectionMatrix?: Matrix4x4) {\r\n super(scene);\r\n this._projMatrix = projectionMatrix || Matrix4x4.identity();\r\n this._invProjMatrix = Matrix4x4.invert(this._projMatrix);\r\n this._viewMatrix = Matrix4x4.identity();\r\n this._viewProjMatrix = Matrix4x4.identity();\r\n this._invViewProjMatrix = Matrix4x4.identity();\r\n this._clipPlane = null;\r\n this._clearColor = new Vector4(0, 0, 0, 1);\r\n this._clearDepth = 1;\r\n this._clearStencil = 0;\r\n this._dirty = true;\r\n this._controller = null;\r\n this._viewport = null;\r\n this._scissor = null;\r\n this._clipMask = 0;\r\n this._frustum = null;\r\n this._frustumV = null;\r\n this._oit = new DRef();\r\n this._depthPrePass = false;\r\n this._HiZ = false;\r\n this._HDR = true;\r\n this._toneMap = true;\r\n this._postEffectTonemap = new DRef();\r\n this._tonemapExposure = 1;\r\n this._motionBlur = false;\r\n this._postEffectMotionBlur = new DRef();\r\n this._motionBlurStrength = 1;\r\n this._bloom = false;\r\n this._postEffectBloom = new DRef();\r\n this._bloomMaxDownsampleLevels = 4;\r\n this._bloomDownsampleLimit = 32;\r\n this._bloomThreshold = 0.8;\r\n this._bloomThresholdKnee = 0;\r\n this._bloomIntensity = 1;\r\n this._FXAA = false;\r\n this._postEffectFXAA = new DRef();\r\n this._TAA = false;\r\n this._postEffectTAA = new DRef();\r\n this._TAADebug = 0;\r\n this._SSR = false;\r\n this._postEffectSSR = new DRef();\r\n this._ssrParams = new Vector4(100, 120, 0.5, 0);\r\n this._ssrMaxRoughness = 0.8;\r\n this._ssrRoughnessFactor = 1;\r\n this._ssrStride = 2;\r\n this._ssrCalcThickness = false;\r\n this._ssrBlurriness = 0.01;\r\n this._ssrBlurDepthCutoff = 2;\r\n this._ssrBlurKernelSize = 10;\r\n this._ssrBlurStdDev = 10;\r\n this._SSAO = false;\r\n this._postEffectSSAO = new DRef();\r\n this._SSAOScale = 10;\r\n this._SSAOBias = 1;\r\n this._SSAOIntensity = 0.025;\r\n this._SSAORadius = 100;\r\n this._SSAOBlurDepthCutoff = 2;\r\n this._pickResult = null;\r\n this._commandBufferReuse = true;\r\n this._jitteredVPMatrix = new Matrix4x4();\r\n this._jitteredInvVPMatrix = new Matrix4x4();\r\n this._jitterValue = new Vector2(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n this._pickPosX = 0;\r\n this._pickPosY = 0;\r\n this._compositor = new Compositor();\r\n this._capturedButton = -1;\r\n this._interactionRect = null;\r\n this.updatePostProcessing();\r\n if (scene && !scene.mainCamera) {\r\n scene.mainCamera = this;\r\n }\r\n }\r\n /**\r\n * The compositor that owns and runs the camera's post-processing chain.\r\n */\r\n get compositor() {\r\n return this._compositor;\r\n }\r\n /**\r\n * Pointer interaction rectangle in css pixels (relative to canvas)\r\n */\r\n get interactionRect() {\r\n return this._interactionRect;\r\n }\r\n set interactionRect(rect) {\r\n this._interactionRect = rect;\r\n }\r\n /**\r\n * Clip plane in camera space.\r\n *\r\n * Setting this invalidates derived data. Shaders should respect `clipMask` and plane.\r\n */\r\n get clipPlane(): Plane {\r\n return this._clipPlane;\r\n }\r\n set clipPlane(plane: Plane) {\r\n this._clipPlane = plane;\r\n this._invalidate(false);\r\n }\r\n /**\r\n * Framebuffer clear color, or `null` to disable.\r\n */\r\n get clearColor(): Vector4 {\r\n return this._clearColor;\r\n }\r\n set clearColor(v: Vector4) {\r\n this._clearColor = v?.clone() ?? null;\r\n }\r\n /**\r\n * Framebuffer stencil clear value, disabled when null. Default is 0.\r\n */\r\n get clearDepth(): number {\r\n return this._clearDepth;\r\n }\r\n set clearDepth(v: number) {\r\n this._clearDepth = v;\r\n }\r\n /**\r\n * Framebuffer stencil clear value, disabled when null. Default is 0.\r\n */\r\n get clearStencil(): number {\r\n return this._clearStencil;\r\n }\r\n set clearStencil(v: number) {\r\n this._clearStencil = v;\r\n }\r\n /**\r\n * Whether Hi-Z acceleration is enabled.\r\n *\r\n * Often improves SSR performance with little quality impact when supported.\r\n */\r\n get HiZ(): boolean {\r\n return this._HiZ;\r\n }\r\n set HiZ(val: boolean) {\r\n this._HiZ = !!val;\r\n }\r\n /**\r\n * Whether HDR backbuffer is enabled.\r\n *\r\n * Tonemap should be disabled when not using HDR backbuffer.\r\n */\r\n get HDR(): boolean {\r\n return this._HDR;\r\n }\r\n set HDR(val: boolean) {\r\n this._HDR = !!val;\r\n }\r\n /**\r\n * Whether tonemapping is enabled via the post effect.\r\n */\r\n get toneMap(): boolean {\r\n return this._postEffectTonemap.get().enabled;\r\n }\r\n set toneMap(val: boolean) {\r\n this._postEffectTonemap.get().enabled = !!val;\r\n }\r\n /**\r\n * Whether motion blur is enabled via the post effect.\r\n */\r\n get motionBlur(): boolean {\r\n return this._postEffectMotionBlur.get().enabled;\r\n }\r\n set motionBlur(val: boolean) {\r\n this._postEffectMotionBlur.get().enabled = !!val;\r\n }\r\n /** Motion blur strength */\r\n get motionBlurStrength(): number {\r\n return this._motionBlurStrength;\r\n }\r\n set motionBlurStrength(val: number) {\r\n this._motionBlurStrength = val;\r\n if (this._postEffectMotionBlur.get()) {\r\n this._postEffectMotionBlur.get().strength = this._motionBlurStrength;\r\n }\r\n }\r\n /**\r\n * Gets whether Bloom is enabled.\r\n */\r\n get bloom(): boolean {\r\n return this._postEffectBloom.get().enabled;\r\n }\r\n set bloom(val: boolean) {\r\n this._postEffectBloom.get().enabled = !!val;\r\n }\r\n /**\r\n * Maximum bloom downsample levels\r\n */\r\n get bloomMaxDownsampleLevels() {\r\n return this._bloomMaxDownsampleLevels;\r\n }\r\n set bloomMaxDownsampleLevels(val: number) {\r\n this._bloomMaxDownsampleLevels = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().maxDownsampleLevel = val;\r\n }\r\n }\r\n /**\r\n * Bloom downsample limit\r\n */\r\n get bloomDownsampleLimit() {\r\n return this._bloomDownsampleLimit;\r\n }\r\n set bloomDownsampleLimit(val: number) {\r\n this._bloomDownsampleLimit = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().downsampleLimit = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold\r\n */\r\n get bloomThreshold() {\r\n return this._bloomThreshold;\r\n }\r\n set bloomThreshold(val: number) {\r\n this._bloomThreshold = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().threshold = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold knee\r\n */\r\n get bloomThresholdKnee() {\r\n return this._bloomThresholdKnee;\r\n }\r\n set bloomThresholdKnee(val: number) {\r\n this._bloomThresholdKnee = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().thresholdKnee = val;\r\n }\r\n }\r\n /**\r\n * Bloom intensity\r\n */\r\n get bloomIntensity() {\r\n return this._bloomIntensity;\r\n }\r\n set bloomIntensity(val: number) {\r\n this._bloomIntensity = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().intensity = val;\r\n }\r\n }\r\n /**\r\n * Gets whether FXAA is enabled.\r\n */\r\n get FXAA(): boolean {\r\n return this._postEffectFXAA.get().enabled;\r\n }\r\n set FXAA(val: boolean) {\r\n this._postEffectFXAA.get().enabled = !!val;\r\n }\r\n /**\r\n * Tonemap exposure\r\n */\r\n get toneMapExposure(): number {\r\n return this._tonemapExposure;\r\n }\r\n set toneMapExposure(val: number) {\r\n this._tonemapExposure = val;\r\n if (this._postEffectTonemap.get()) {\r\n this._postEffectTonemap.get().exposure = val;\r\n }\r\n }\r\n /**\r\n * Gets whether TAA is enabled.\r\n */\r\n get TAA(): boolean {\r\n return this._postEffectTAA.get().enabled;\r\n }\r\n set TAA(val: boolean) {\r\n this._postEffectTAA.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets the debug flag for TAA\r\n */\r\n get TAADebug(): number {\r\n return this._TAADebug;\r\n }\r\n set TAADebug(val: number) {\r\n this._TAADebug = val;\r\n }\r\n /**\r\n * Gets whether Screen Space Reflections (SSR) is enabled.\r\n */\r\n get SSR(): boolean {\r\n return this._postEffectSSR.get().enabled;\r\n }\r\n set SSR(val: boolean) {\r\n this._postEffectSSR.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets the maximum roughness value for screen space reflections.\r\n * Controls the cutoff point where surfaces are considered too rough for SSR.\r\n */\r\n get ssrMaxRoughness(): number {\r\n return this._ssrMaxRoughness;\r\n }\r\n set ssrMaxRoughness(val: number) {\r\n this._ssrMaxRoughness = val;\r\n }\r\n /**\r\n * Gets the roughness factor for SSR calculations.\r\n * Affects how surface roughness influences reflection clarity.\r\n */\r\n get ssrRoughnessFactor(): number {\r\n return this._ssrRoughnessFactor;\r\n }\r\n set ssrRoughnessFactor(val: number) {\r\n this._ssrRoughnessFactor = val;\r\n }\r\n /**\r\n * Gets the stride value for SSR ray marching.\r\n * Controls the step size during ray marching. Larger values improve performance but may miss details.\r\n */\r\n get ssrStride(): number {\r\n return this._ssrStride;\r\n }\r\n set ssrStride(val: number) {\r\n this._ssrStride = val;\r\n }\r\n /**\r\n * Gets the maximum distance for SSR ray marching.\r\n * Defines how far rays will travel when searching for reflection intersections.\r\n */\r\n get ssrMaxDistance(): number {\r\n return this._ssrParams.x;\r\n }\r\n set ssrMaxDistance(val: number) {\r\n this._ssrParams.x = val;\r\n }\r\n /**\r\n * Gets the number of iterations for SSR ray marching.\r\n * Higher values provide more accurate reflections but impact performance.\r\n */\r\n get ssrIterations(): number {\r\n return this._ssrParams.y;\r\n }\r\n set ssrIterations(val: number) {\r\n this._ssrParams.y = val;\r\n }\r\n /**\r\n * Gets the thickness value for SSR calculations.\r\n * Determines the thickness threshold for surfaces when calculating reflections.\r\n */\r\n get ssrThickness(): number {\r\n return this._ssrParams.z;\r\n }\r\n set ssrThickness(val: number) {\r\n this._ssrParams.z = val;\r\n }\r\n /**\r\n * Gets whether SSR should calculate thickness automatically.\r\n * When enabled, the system will dynamically compute surface thickness for reflections.\r\n */\r\n get ssrCalcThickness(): boolean {\r\n return this._ssrCalcThickness;\r\n }\r\n set ssrCalcThickness(val: boolean) {\r\n this._ssrCalcThickness = !!val;\r\n }\r\n /**\r\n * Gets the blur scale factor for SSR.\r\n * Controls the overall intensity of the blur effect applied to reflections.\r\n */\r\n get ssrBlurScale(): number {\r\n return this._ssrBlurriness;\r\n }\r\n set ssrBlurScale(val: number) {\r\n this._ssrBlurriness = val;\r\n }\r\n /**\r\n * Gets the depth cutoff value for SSR blur.\r\n * Determines at what depth difference the blur effect should be reduced or eliminated.\r\n */\r\n get ssrBlurDepthCutoff(): number {\r\n return this._ssrBlurDepthCutoff;\r\n }\r\n set ssrBlurDepthCutoff(val: number) {\r\n this._ssrBlurDepthCutoff = val;\r\n }\r\n /**\r\n * Gets the kernel size for the SSR blur effect.\r\n * Defines the size of the blur kernel. Larger values create softer, more spread-out blur.\r\n */\r\n get ssrBlurKernelSize(): number {\r\n return this._ssrBlurKernelSize;\r\n }\r\n set ssrBlurKernelSize(val: number) {\r\n this._ssrBlurKernelSize = val;\r\n }\r\n /**\r\n * Gets the standard deviation for the SSR Gaussian blur.\r\n * Controls the distribution of the blur effect. Higher values create more pronounced blur.\r\n */\r\n get ssrBlurStdDev(): number {\r\n return this._ssrBlurStdDev;\r\n }\r\n set ssrBlurStdDev(val: number) {\r\n this._ssrBlurStdDev = val;\r\n }\r\n /** @internal */\r\n get ssrParams(): Vector4 {\r\n return this._ssrParams;\r\n }\r\n /**\r\n * Gets whether SSAO is enabled.\r\n */\r\n get SSAO(): boolean {\r\n return this._postEffectSSAO.get().enabled;\r\n }\r\n set SSAO(val: boolean) {\r\n this._postEffectSSAO.get().enabled = !!val;\r\n }\r\n /** SSAO scale */\r\n get SSAOScale() {\r\n return this._SSAOScale;\r\n }\r\n set SSAOScale(val: number) {\r\n this._SSAOScale = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().scale = val;\r\n }\r\n }\r\n /** SSAO bias */\r\n get SSAOBias() {\r\n return this._SSAOBias;\r\n }\r\n set SSAOBias(val: number) {\r\n this._SSAOBias = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().bias = val;\r\n }\r\n }\r\n /** SSAO radius */\r\n get SSAORadius() {\r\n return this._SSAORadius;\r\n }\r\n set SSAORadius(val: number) {\r\n this._SSAORadius = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().radius = val;\r\n }\r\n }\r\n /** SSAO intensity */\r\n get SSAOIntensity() {\r\n return this._SSAOIntensity;\r\n }\r\n set SSAOIntensity(val: number) {\r\n this._SSAOIntensity = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().intensity = val;\r\n }\r\n }\r\n /** SSAO depth cutoff */\r\n get SSAOBlurDepthCutoff() {\r\n return this._SSAOBlurDepthCutoff;\r\n }\r\n set SSAOBlurDepthCutoff(val: number) {\r\n this._SSAOBlurDepthCutoff = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().blurDepthCutoff = val;\r\n }\r\n }\r\n /** Whether to perform a depth pass */\r\n get depthPrePass(): boolean {\r\n return this._depthPrePass;\r\n }\r\n set depthPrePass(val: boolean) {\r\n this._depthPrePass = !!val;\r\n }\r\n /** Whether to allow command buffer reuse optimization */\r\n get commandBufferReuse(): boolean {\r\n return this._commandBufferReuse;\r\n }\r\n set commandBufferReuse(val: boolean) {\r\n this._commandBufferReuse = !!val;\r\n }\r\n /** OIT */\r\n get oit(): OIT {\r\n return this._oit.get();\r\n }\r\n set oit(val: OIT) {\r\n this._oit.set(val);\r\n }\r\n /** Clip plane mask */\r\n get clipMask(): number {\r\n return this._clipMask;\r\n }\r\n set clipMask(val: number) {\r\n this._clipMask = val;\r\n }\r\n /** Viewport used for rendering, if null, use full framebuffer size */\r\n get viewport(): number[] {\r\n return this._viewport ? [...this._viewport] : null;\r\n }\r\n set viewport(rect: number[]) {\r\n this._viewport = rect?.slice() ?? null;\r\n }\r\n /** Scissor rectangle used for rendering, if null, use viewport value */\r\n get scissor(): number[] {\r\n return this._scissor ? [...this._scissor] : null;\r\n }\r\n set scissor(rect: number[]) {\r\n this._scissor = rect?.slice() ?? null;\r\n }\r\n /**\r\n * Handle input events\r\n * @param ev - input event object\r\n * @param type - event type, default to ev.type\r\n * @returns Boolean value indicates whether the event was handled.\r\n */\r\n handleEvent<T extends IBaseEvent<any>>(ev: T, type?: string): boolean {\r\n let handled = false;\r\n if (this._controller) {\r\n if (\r\n this._capturedButton < 0 &&\r\n (ev instanceof PointerEvent || ev instanceof WheelEvent) &&\r\n !this.posInViewport(ev.offsetX, ev.offsetY)\r\n ) {\r\n return false;\r\n }\r\n type = type ?? ev.type;\r\n if (type === 'pointerdown') {\r\n if (this._capturedButton < 0) {\r\n this._capturedButton = (ev as unknown as IControllerPointerDownEvent).button;\r\n }\r\n handled = this._controller.onMouseDown(ev as unknown as IControllerPointerDownEvent);\r\n } else if (type === 'pointerup') {\r\n handled = this._controller.onMouseUp(ev as unknown as IControllerPointerUpEvent);\r\n if (this._capturedButton === (ev as unknown as IControllerPointerUpEvent).button) {\r\n this._capturedButton = -1;\r\n }\r\n } else if (type === 'pointermove') {\r\n handled = this._controller.onMouseMove(ev as unknown as IControllerPointerMoveEvent);\r\n } else if (type === 'wheel') {\r\n handled = this._controller.onMouseWheel(ev as unknown as IControllerWheelEvent);\r\n } else if (type === 'keydown') {\r\n handled = this._controller.onKeyDown(ev as unknown as IControllerKeydownEvent);\r\n } else if (type === 'keyup') {\r\n handled = this._controller.onKeyUp(ev as unknown as IControllerKeyupEvent);\r\n }\r\n if (handled && ev.preventDefault) {\r\n ev.preventDefault();\r\n }\r\n }\r\n return handled;\r\n }\r\n /**\r\n * Constructs a ray based on the given screen coordinates.\r\n *\r\n * @param x - The x-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @param y - The y-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @returns The ray originating from the camera position and passing through the given screen coordinates.\r\n */\r\n constructRay(x: number, y: number): Ray {\r\n const width = this.viewport ? this.viewport[2] : getDevice().getViewport().width;\r\n const height = this.viewport ? this.viewport[3] : getDevice().getViewport().height;\r\n const ndcX = (2 * x) / width - 1;\r\n const ndcY = 1 - (2 * y) / height;\r\n const nearClip = new Vector4(ndcX, ndcY, 0, 1);\r\n const farClip = new Vector4(ndcX, ndcY, 1, 1);\r\n const nearWorld = this.invViewProjectionMatrix.transform(nearClip);\r\n const farWorld = this.invViewProjectionMatrix.transform(farClip);\r\n if (this.isPerspective()) {\r\n nearWorld.scaleBy(1 / nearWorld.w);\r\n farWorld.scaleBy(1 / farWorld.w);\r\n }\r\n const vEye = this.isPerspective() ? this.getWorldPosition() : nearWorld.xyz();\r\n const vDir = Vector3.sub(farWorld.xyz(), vEye).inplaceNormalize();\r\n return new Ray(vEye, vDir);\r\n }\r\n /**\r\n * Place the camera by specifying the camera position and the target point\r\n * @param eye - The camera position\r\n * @param target - The target point to look at\r\n * @param up - The up vector\r\n * @returns self\r\n */\r\n lookAt(eye: Vector3, target: Vector3, up: Vector3): this {\r\n return this.setLocalTransform(Matrix4x4.lookAt(eye, target, up));\r\n }\r\n /**\r\n * Place the camera to look at a given cube face at a given camera position\r\n * @param face - The cube face to look at\r\n * @param position - The camera position\r\n * @returns self\r\n */\r\n lookAtCubeFace(face: CubeFace, position?: Vector3): this {\r\n return this.setLocalTransform(Matrix4x4.lookAtCubeFace(face, position ?? this.position));\r\n }\r\n /**\r\n * Setup a perspective projection matrix for the camera\r\n * @param fovY - The vertical field of view in radians.\r\n * @param aspect - The aspect ratio\r\n * @param zNear - The near clip plane\r\n * @param zFar - The far clip plane\r\n * @returns self\r\n */\r\n setPerspective(fovY: number, aspect: number, zNear: number, zFar: number): this {\r\n this._projMatrix.perspective(fovY, aspect, zNear, zFar);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a orthogonal projection matrix for the camera\r\n * @param left - Left bound of the frustum\r\n * @param right - Right bound of the frustum\r\n * @param bottom - Bottom bound of the frustum\r\n * @param top - Top bound of the frustum\r\n * @param near - Near bound of the frustum.\r\n * @param far - Far bound of the frustum.\r\n * @returns self\r\n */\r\n setOrtho(left: number, right: number, bottom: number, top: number, near: number, far: number): this {\r\n this._projMatrix.ortho(left, right, bottom, top, near, far);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a projection matrix for the camera\r\n * @param matrix - The projection matrix\r\n */\r\n setProjectionMatrix(matrix: Matrix4x4): void {\r\n if (matrix && matrix !== this._projMatrix) {\r\n this._projMatrix = matrix;\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n }\r\n }\r\n /**\r\n * Gets the projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._projMatrix;\r\n }\r\n /**\r\n * Gets the inverse projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getInvProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._invProjMatrix;\r\n }\r\n getRotationMatrix(): Matrix4x4 {\r\n const rotationMatrix = new Matrix4x4();\r\n this.worldMatrix.decompose(null, rotationMatrix, null);\r\n const xAxis = rotationMatrix.getRow(0).xyz().scaleBy(-1);\r\n const yAxis = rotationMatrix.getRow(1).xyz();\r\n const zAxis = rotationMatrix.getRow(2).xyz().scaleBy(-1);\r\n rotationMatrix.setRow(0, new Vector4(xAxis.x, xAxis.y, xAxis.z, 0));\r\n rotationMatrix.setRow(1, new Vector4(yAxis.x, yAxis.y, yAxis.z, 0));\r\n rotationMatrix.setRow(2, new Vector4(zAxis.x, zAxis.y, zAxis.z, 0));\r\n return rotationMatrix;\r\n }\r\n /**\r\n * View matrix of the camera\r\n *\r\n * @remarks\r\n * Camera's view matrix will transform a point from the world space to the camera space\r\n */\r\n get viewMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._viewMatrix;\r\n }\r\n get viewProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._viewProjMatrix;\r\n }\r\n /**\r\n * The inverse-view-projection matrix of the camera\r\n *\r\n * @remarks\r\n * The inverse-view-projection matrix transforms a point from the clip space to the camera space\r\n */\r\n get invViewProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._invViewProjMatrix;\r\n }\r\n /** Gets the frustum of the camera */\r\n get frustum(): Frustum {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._frustum;\r\n }\r\n get frustumViewSpace(): Frustum {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n if (!this._frustumV) {\r\n this._frustumV = new Frustum(this._projMatrix);\r\n }\r\n return this._frustumV;\r\n }\r\n /** The camera controller */\r\n get controller(): BaseCameraController {\r\n return this._controller || null;\r\n }\r\n set controller(controller: BaseCameraController) {\r\n this.setController(controller);\r\n }\r\n /** {@inheritDoc SceneNode.isCamera} */\r\n isCamera(): this is Camera {\r\n return true;\r\n }\r\n /** Gets the near clip plane of the camera */\r\n getNearPlane(): number {\r\n return this.getProjectionMatrix().getNearPlane();\r\n }\r\n /** Gets the far clip plane of the camera */\r\n getFarPlane(): number {\r\n return this.getProjectionMatrix().getFarPlane();\r\n }\r\n /** Gets the vertical field of view of the camera */\r\n getFOV(): number {\r\n return this.getProjectionMatrix().getFov();\r\n }\r\n /** Gets the tangent of half of the vertical field of view */\r\n getTanHalfFovy(): number {\r\n return this.getProjectionMatrix().getTanHalfFov();\r\n }\r\n /** Gets the aspect ratio */\r\n getAspect(): number {\r\n return this.getProjectionMatrix().getAspect();\r\n }\r\n /** Returns true if the camera is perspective */\r\n isPerspective(): boolean {\r\n return this.getProjectionMatrix().isPerspective();\r\n }\r\n /** Returns true if the camera is orthographic */\r\n isOrtho(): boolean {\r\n return this.getProjectionMatrix().isOrtho();\r\n }\r\n /**\r\n * Gets the camera history data which is used in temporal reprojection\r\n * @returns Camera history data\r\n */\r\n getHistoryData(): CameraHistoryData {\r\n let data = Camera._historyData.get(this);\r\n if (!data) {\r\n data = {\r\n prevColorTex: null,\r\n prevMotionVectorTex: null\r\n };\r\n Camera._historyData.set(this, data);\r\n }\r\n return data;\r\n }\r\n /**\r\n * Clears the camera history data which is used in temporal reprojection\r\n */\r\n clearHistoryData() {\r\n const data = Camera._historyData.get(this);\r\n if (data) {\r\n if (data.prevColorTex) {\r\n getDevice().pool.releaseTexture(data.prevColorTex);\r\n }\r\n if (data.prevMotionVectorTex) {\r\n getDevice().pool.releaseTexture(data.prevMotionVectorTex);\r\n }\r\n Camera._historyData.delete(this);\r\n }\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n }\r\n /** @internal */\r\n private updatePostProcessing() {\r\n this._compositor.clear();\r\n if (!this._postEffectSSR.get()) {\r\n const ssr = new SSR();\r\n ssr.enabled = false;\r\n this._postEffectSSR.set(ssr);\r\n this._compositor.appendPostEffect(ssr);\r\n }\r\n if (!this._postEffectSSAO.get()) {\r\n const ssao = new SAO();\r\n ssao.enabled = false;\r\n ssao.scale = this._SSAOScale;\r\n ssao.bias = this._SSAOBias;\r\n ssao.radius = this._SSAORadius;\r\n ssao.intensity = this._SSAOIntensity;\r\n ssao.blurDepthCutoff = this._SSAOBlurDepthCutoff;\r\n this._postEffectSSAO.set(ssao);\r\n this._compositor.appendPostEffect(ssao);\r\n }\r\n if (!this._postEffectTAA.get()) {\r\n const taa = new TAA();\r\n taa.enabled = false;\r\n this._postEffectTAA.set(taa);\r\n this._compositor.appendPostEffect(taa);\r\n }\r\n if (!this._postEffectMotionBlur.get()) {\r\n const motionBlur = new MotionBlur();\r\n motionBlur.enabled = false;\r\n motionBlur.strength = this._motionBlurStrength;\r\n this._postEffectMotionBlur.set(motionBlur);\r\n this._compositor.appendPostEffect(motionBlur);\r\n }\r\n if (!this._postEffectTonemap.get()) {\r\n const tonemap = new Tonemap();\r\n tonemap.enabled = true;\r\n tonemap.exposure = this._tonemapExposure;\r\n this._postEffectTonemap.set(tonemap);\r\n this._compositor.appendPostEffect(tonemap);\r\n }\r\n if (!this._postEffectFXAA.get()) {\r\n const fxaa = new FXAA();\r\n fxaa.enabled = false;\r\n this._postEffectFXAA.set(fxaa);\r\n this._compositor.appendPostEffect(fxaa);\r\n }\r\n if (!this._postEffectBloom.get()) {\r\n const bloom = new Bloom();\r\n bloom.enabled = false;\r\n bloom.maxDownsampleLevel = this._bloomMaxDownsampleLevels;\r\n bloom.downsampleLimit = this._bloomDownsampleLimit;\r\n bloom.threshold = this._bloomThreshold;\r\n bloom.thresholdKnee = this._bloomThresholdKnee;\r\n bloom.intensity = this._bloomIntensity;\r\n this._postEffectBloom.set(bloom);\r\n this._compositor.appendPostEffect(bloom);\r\n }\r\n }\r\n /**\r\n * Renders a scene\r\n * @param scene - The scene to be rendered\r\n * @param compositor - Compositor instance that will be used to apply postprocess effects\r\n */\r\n render(scene: Scene) {\r\n const device = getDevice();\r\n //this.updatePostProcessing(device);\r\n const useMotionVector = (this.TAA || this.motionBlur) && device.type !== 'webgl';\r\n const useTAA = useMotionVector && this.TAA;\r\n scene.dispatchEvent('startrender', scene, this, this._compositor);\r\n if (useMotionVector) {\r\n const width = device.getDrawingBufferWidth();\r\n const height = device.getDrawingBufferHeight();\r\n if (useTAA) {\r\n const halton = Camera._halton23[device.frameInfo.frameCounter % Camera._halton23.length];\r\n this._jitterValue.setXY((halton[0] * 2) / width, (halton[1] * 2) / height);\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n }\r\n this._jitteredVPMatrix.set(this.getProjectionMatrix());\r\n this._jitteredVPMatrix[8] += this._jitterValue.x;\r\n this._jitteredVPMatrix[9] += this._jitterValue.y;\r\n this._jitteredVPMatrix.multiplyRight(this.viewMatrix);\r\n Matrix4x4.invert(this._jitteredVPMatrix, this._jitteredInvVPMatrix);\r\n if (!this._prevJitteredVPMatrix) {\r\n this._prevJitteredVPMatrix = new Matrix4x4();\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue = new Vector2(this._jitterValue);\r\n }\r\n if (!this._prevVPMatrix) {\r\n this._prevVPMatrix = new Matrix4x4();\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._jitteredInvVPMatrix.set(this.invViewProjectionMatrix);\r\n }\r\n device.pushDeviceStates();\r\n device.reverseVertexWindingOrder(false);\r\n scene.getRenderer().renderScene(scene, this);\r\n device.popDeviceStates();\r\n if (useMotionVector) {\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue.set(this._jitterValue);\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n scene.dispatchEvent('endrender', scene, this, this._compositor);\r\n }\r\n async pickAsync(posX: number, posY: number): Promise<PickResult> {\r\n this._pickPosX = posX;\r\n this._pickPosY = posY;\r\n if (!this._pickResultPromise) {\r\n this._pickResultPromise = new Promise<PickResult>((resolve) => {\r\n this._pickResultResolve = (result: PickResult) => {\r\n resolve(result);\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n };\r\n });\r\n }\r\n return this._pickResultPromise;\r\n }\r\n /** @internal */\r\n getPickResultResolveFunc() {\r\n return this._pickResultResolve;\r\n }\r\n /** @internal */\r\n getPickPosX() {\r\n return this._pickPosX;\r\n }\r\n /** @internal */\r\n getPickPosY() {\r\n return this._pickPosY;\r\n }\r\n /**\r\n * Updates the controller state\r\n */\r\n updateController() {\r\n this._controller?.update();\r\n }\r\n /**\r\n * Reset the controller\r\n */\r\n resetController() {\r\n this._controller?.reset();\r\n }\r\n /** @internal */\r\n get jitteredVPMatrix() {\r\n return this._jitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get jitteredInvVPMatrix() {\r\n return this._jitteredInvVPMatrix;\r\n }\r\n /** @internal */\r\n get jitterValue() {\r\n return this._jitterValue;\r\n }\r\n /** @internal */\r\n get prevJitteredVPMatrix() {\r\n return this._prevJitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get prevJitterValue() {\r\n return this._prevJitterValue;\r\n }\r\n /** @internal */\r\n get prevVPMatrix() {\r\n return this._prevVPMatrix;\r\n }\r\n /** @internal */\r\n get prevPosition() {\r\n return this._prevPosition;\r\n }\r\n /** @internal */\r\n private setController(controller: BaseCameraController): this {\r\n if (this._controller !== controller) {\r\n if (controller && controller._getCamera() && controller._getCamera() !== this) {\r\n throw new Error(\r\n 'Camera.setController failed: one camera controller object cannot be assigned to multiple camera'\r\n );\r\n }\r\n this._controller?._setCamera(null);\r\n this._controller = controller;\r\n this._controller?._setCamera(this);\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n protected _invalidate(projectMatrixChanged: boolean) {\r\n this._dirty = true;\r\n if (projectMatrixChanged) {\r\n this._frustumV = null;\r\n }\r\n }\r\n /** @internal */\r\n protected _compute() {\r\n this._computeProj();\r\n Matrix4x4.invertAffine(this.worldMatrix, this._viewMatrix);\r\n Matrix4x4.multiply(this._projMatrix, this._viewMatrix, this._viewProjMatrix);\r\n Matrix4x4.invert(this._viewProjMatrix, this._invViewProjMatrix);\r\n if (!this._frustum) {\r\n this._frustum = new Frustum(this._viewProjMatrix);\r\n } else {\r\n this._frustum.initWithMatrix(this._viewProjMatrix);\r\n }\r\n }\r\n /** @internal */\r\n protected _computeProj() {}\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n super._onTransformChanged(invalidateLocal);\r\n this._invalidate(false);\r\n }\r\n /** {@inheritdoc SceneNode.onDispose} */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.setController(null);\r\n this.clearHistoryData();\r\n this._projMatrix = null;\r\n this._viewMatrix = null;\r\n this._viewProjMatrix = null;\r\n this._postEffectBloom.dispose();\r\n this._postEffectFXAA.dispose();\r\n this._postEffectMotionBlur.dispose();\r\n this._postEffectSSAO.dispose();\r\n this._postEffectSSR.dispose();\r\n this._postEffectTAA.dispose();\r\n this._postEffectTonemap.dispose();\r\n this._oit.dispose();\r\n }\r\n /** @internal */\r\n private posInViewport(x: number, y: number): boolean {\r\n let rect = this._interactionRect;\r\n if (!rect && this.viewport) {\r\n const cvs = getDevice().canvas;\r\n const vp = this.viewport;\r\n const vp_x = vp[0];\r\n const vp_y = cvs.clientHeight - vp[1] - vp[3];\r\n const vp_w = vp[2];\r\n const vp_h = vp[3];\r\n rect = [vp_x, vp_y, vp_w, vp_h];\r\n }\r\n if (!rect) {\r\n return true;\r\n }\r\n x -= rect[0];\r\n y -= rect[1];\r\n return x >= 0 && x < rect[2] && y >= 0 && y < rect[3];\r\n }\r\n}\r\n"],"names":["Camera","SceneNode","_halton23","halton23","_historyData","WeakMap","scene","projectionMatrix","_projMatrix","Matrix4x4","identity","_invProjMatrix","invert","_viewMatrix","_viewProjMatrix","_invViewProjMatrix","_clipPlane","_clearColor","Vector4","_clearDepth","_clearStencil","_dirty","_controller","_viewport","_scissor","_clipMask","_frustum","_frustumV","_oit","DRef","_depthPrePass","_HiZ","_HDR","_toneMap","_postEffectTonemap","_tonemapExposure","_motionBlur","_postEffectMotionBlur","_motionBlurStrength","_bloom","_postEffectBloom","_bloomMaxDownsampleLevels","_bloomDownsampleLimit","_bloomThreshold","_bloomThresholdKnee","_bloomIntensity","_FXAA","_postEffectFXAA","_TAA","_postEffectTAA","_TAADebug","_SSR","_postEffectSSR","_ssrParams","_ssrMaxRoughness","_ssrRoughnessFactor","_ssrStride","_ssrCalcThickness","_ssrBlurriness","_ssrBlurDepthCutoff","_ssrBlurKernelSize","_ssrBlurStdDev","_SSAO","_postEffectSSAO","_SSAOScale","_SSAOBias","_SSAOIntensity","_SSAORadius","_SSAOBlurDepthCutoff","_pickResult","_commandBufferReuse","_jitteredVPMatrix","_jitteredInvVPMatrix","_jitterValue","Vector2","_prevVPMatrix","_prevPosition","_prevJitteredVPMatrix","_prevJitterValue","_pickResultPromise","_pickResultResolve","_pickPosX","_pickPosY","_compositor","Compositor","_capturedButton","_interactionRect","updatePostProcessing","mainCamera","compositor","interactionRect","rect","clipPlane","plane","_invalidate","clearColor","v","clone","clearDepth","clearStencil","HiZ","val","HDR","toneMap","get","enabled","motionBlur","motionBlurStrength","strength","bloom","bloomMaxDownsampleLevels","maxDownsampleLevel","bloomDownsampleLimit","downsampleLimit","bloomThreshold","threshold","bloomThresholdKnee","thresholdKnee","bloomIntensity","intensity","FXAA","toneMapExposure","exposure","TAA","TAADebug","SSR","ssrMaxRoughness","ssrRoughnessFactor","ssrStride","ssrMaxDistance","x","ssrIterations","y","ssrThickness","z","ssrCalcThickness","ssrBlurScale","ssrBlurDepthCutoff","ssrBlurKernelSize","ssrBlurStdDev","ssrParams","SSAO","SSAOScale","scale","SSAOBias","bias","SSAORadius","radius","SSAOIntensity","SSAOBlurDepthCutoff","blurDepthCutoff","depthPrePass","commandBufferReuse","oit","set","clipMask","viewport","slice","scissor","handleEvent","ev","type","handled","PointerEvent","WheelEvent","posInViewport","offsetX","offsetY","button","onMouseDown","onMouseUp","onMouseMove","onMouseWheel","onKeyDown","onKeyUp","preventDefault","constructRay","width","getDevice","getViewport","height","ndcX","ndcY","nearClip","farClip","nearWorld","invViewProjectionMatrix","transform","farWorld","isPerspective","scaleBy","w","vEye","getWorldPosition","xyz","vDir","Vector3","sub","inplaceNormalize","Ray","lookAt","eye","target","up","setLocalTransform","lookAtCubeFace","face","position","setPerspective","fovY","aspect","zNear","zFar","perspective","setOrtho","left","right","bottom","top","near","far","ortho","setProjectionMatrix","matrix","getProjectionMatrix","_compute","getInvProjectionMatrix","getRotationMatrix","rotationMatrix","worldMatrix","decompose","xAxis","getRow","yAxis","zAxis","setRow","viewMatrix","viewProjectionMatrix","frustum","frustumViewSpace","Frustum","controller","setController","isCamera","getNearPlane","getFarPlane","getFOV","getFov","getTanHalfFovy","getTanHalfFov","getAspect","isOrtho","getHistoryData","data","prevColorTex","prevMotionVectorTex","clearHistoryData","pool","releaseTexture","delete","clear","ssr","appendPostEffect","ssao","SAO","taa","MotionBlur","tonemap","Tonemap","fxaa","Bloom","render","device","useMotionVector","useTAA","dispatchEvent","getDrawingBufferWidth","getDrawingBufferHeight","halton","frameInfo","frameCounter","length","setXY","multiplyRight","pushDeviceStates","reverseVertexWindingOrder","getRenderer","renderScene","popDeviceStates","pickAsync","posX","posY","Promise","resolve","result","getPickResultResolveFunc","getPickPosX","getPickPosY","updateController","update","resetController","reset","jitteredVPMatrix","jitteredInvVPMatrix","jitterValue","prevJitteredVPMatrix","prevJitterValue","prevVPMatrix","prevPosition","_getCamera","Error","_setCamera","projectMatrixChanged","_computeProj","invertAffine","multiply","initWithMatrix","_onTransformChanged","invalidateLocal","onDispose","dispose","cvs","canvas","vp","vp_x","vp_y","clientHeight","vp_w","vp_h"],"mappings":"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"}
@@ -32,6 +32,7 @@ import { BaseCameraController } from './base.js';
32
32
  moveSpeed: 0.2,
33
33
  rotateSpeed: 0.01
34
34
  }, options || {});
35
+ this.reset();
35
36
  }
36
37
  /**
37
38
  * {@inheritDoc BaseCameraController.reset}
@@ -176,7 +177,7 @@ import { BaseCameraController } from './base.js';
176
177
  * Set options
177
178
  * @param opt - options
178
179
  */ setOptions(opt) {
179
- opt && Object.assign(this.options, opt);
180
+ Object.assign(this.options, opt ?? {});
180
181
  this.reset();
181
182
  }
182
183
  /**
@@ -186,13 +187,7 @@ import { BaseCameraController } from './base.js';
186
187
  const x = this._getCamera().worldMatrix.getRow(0).xyz();
187
188
  x.y = 0;
188
189
  x.inplaceNormalize();
189
- if (x.isNaN()) {
190
- console.log(`Camera error 1: ${x.toString()}`);
191
- }
192
190
  const z = this._getCamera().worldMatrix.getRow(2).xyz().inplaceNormalize();
193
- if (z.isNaN()) {
194
- console.log(`Camera error 2: ${z.toString()}`);
195
- }
196
191
  const move = new Vector3(0, 0, 0);
197
192
  let changed = false;
198
193
  if (this.keyForward) {
@@ -229,9 +224,6 @@ import { BaseCameraController } from './base.js';
229
224
  const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);
230
225
  const newLocalMatrix = newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix));
231
226
  newLocalMatrix.decompose(scale, rotation, pos);
232
- if (scale.isNaN() || rotation.isNaN() || pos.isNaN()) {
233
- console.log(`Camera error 3: ${scale.toString()} ${rotation.toString()} ${pos.toString()}`);
234
- }
235
227
  this._getCamera().position.set(pos);
236
228
  this._getCamera().scale.set(scale);
237
229
  this._getCamera().rotation.set(rotation);
@@ -1 +1 @@
1
- {"version":3,"file":"fps.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fps.js","sources":["../../src/camera/fps.ts"],"sourcesContent":["import { Vector3, Quaternion, Matrix3x3, Matrix4x4 } from '@zephyr3d/base';\r\nimport type {\r\n IControllerKeydownEvent,\r\n IControllerKeyupEvent,\r\n IControllerPointerDownEvent,\r\n IControllerPointerMoveEvent,\r\n IControllerPointerUpEvent\r\n} from './base';\r\nimport { BaseCameraController } from './base';\r\n\r\n/**\r\n * Creation options for FPSCameraController\r\n * @public\r\n */\r\nexport interface FPSCameraControllerOptions {\r\n /** The control keys */\r\n controlKeys?: {\r\n up: string;\r\n down: string;\r\n forward: string;\r\n backward: string;\r\n left: string;\r\n right: string;\r\n };\r\n /** Moving speed */\r\n moveSpeed?: number;\r\n /** Rotating speed */\r\n rotateSpeed?: number;\r\n}\r\n\r\n/**\r\n * FPS camera controller\r\n * @public\r\n */\r\nexport class FPSCameraController extends BaseCameraController {\r\n /** @internal */\r\n private readonly options: FPSCameraControllerOptions;\r\n /** @internal */\r\n private mouseDown: boolean;\r\n /** @internal */\r\n private lastMouseX: number;\r\n /** @internal */\r\n private lastMouseY: number;\r\n /** @internal */\r\n private keyUp: boolean;\r\n /** @internal */\r\n private keyDown: boolean;\r\n /** @internal */\r\n private keyLeft: boolean;\r\n /** @internal */\r\n private keyRight: boolean;\r\n /** @internal */\r\n private keyForward: boolean;\r\n /** @internal */\r\n private keyBackward: boolean;\r\n /**\r\n * Creates an instance of FPSCameraController\r\n * @param options - The creation options\r\n */\r\n constructor(options?: FPSCameraControllerOptions) {\r\n super();\r\n this.options = Object.assign(\r\n {\r\n controlKeys: {\r\n up: 'KeyQ',\r\n down: 'KeyE',\r\n forward: 'KeyW',\r\n backward: 'KeyS',\r\n left: 'KeyA',\r\n right: 'KeyD'\r\n },\r\n moveSpeed: 0.2,\r\n rotateSpeed: 0.01\r\n },\r\n options || {}\r\n );\r\n this.reset();\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController.reset}\r\n * @override\r\n */\r\n reset() {\r\n this.mouseDown = false;\r\n this.lastMouseX = 0;\r\n this.lastMouseY = 0;\r\n this.keyUp = false;\r\n this.keyDown = false;\r\n this.keyLeft = false;\r\n this.keyRight = false;\r\n this.keyForward = false;\r\n this.keyBackward = false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseDown}\r\n * @override\r\n */\r\n protected _onMouseDown(evt: IControllerPointerDownEvent): boolean {\r\n if (evt.button === 0) {\r\n this.mouseDown = true;\r\n this.lastMouseX = evt.offsetX;\r\n this.lastMouseY = evt.offsetY;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseUp}\r\n * @override\r\n */\r\n protected _onMouseUp(evt: IControllerPointerUpEvent): boolean {\r\n if (evt.button === 0 && this.mouseDown) {\r\n this.mouseDown = false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseMove}\r\n * @override\r\n */\r\n protected _onMouseMove(evt: IControllerPointerMoveEvent): boolean {\r\n if (this.mouseDown) {\r\n const dx = evt.offsetX - this.lastMouseX;\r\n const dy = evt.offsetY - this.lastMouseY;\r\n this.lastMouseX = evt.offsetX;\r\n this.lastMouseY = evt.offsetY;\r\n const zAxis = this._getCamera().worldMatrix.getRow(2).xyz();\r\n const alpha = Math.atan2(zAxis.z, zAxis.x) + dx * this.options.rotateSpeed;\r\n const beta = Math.min(\r\n Math.PI / 2.1,\r\n Math.max(-Math.PI / 2.1, Math.asin(zAxis.y) + dy * this.options.rotateSpeed)\r\n );\r\n const newY = Math.sin(beta);\r\n const r = Math.sqrt(Math.max(0, 1 - newY * newY));\r\n const newZ = Math.sin(alpha) * r;\r\n const newX = Math.cos(alpha) * r;\r\n zAxis.setXYZ(newX, newY, newZ).inplaceNormalize();\r\n const XAxis = Vector3.cross(Vector3.axisPY(), zAxis).inplaceNormalize();\r\n const YAxis = Vector3.cross(zAxis, XAxis).inplaceNormalize();\r\n const rotation = Quaternion.fromRotationMatrix(\r\n new Matrix3x3([XAxis.x, XAxis.y, XAxis.z, YAxis.x, YAxis.y, YAxis.z, zAxis.x, zAxis.y, zAxis.z])\r\n );\r\n if (!this._getCamera().parent) {\r\n this._getCamera().rotation.set(rotation);\r\n } else {\r\n const pos = new Vector3();\r\n const scale = new Vector3();\r\n this._getCamera().worldMatrix.decompose(scale, null, pos);\r\n const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);\r\n const newLocalMatrix = this._getCamera().parent\r\n ? newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix))\r\n : newWorldMatrix;\r\n newLocalMatrix.decompose(scale, rotation, pos);\r\n this._getCamera().position.set(pos);\r\n this._getCamera().scale.set(scale);\r\n this._getCamera().rotation.set(rotation);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onKeyDown}\r\n * @override\r\n */\r\n protected _onKeyDown(evt: IControllerKeydownEvent): boolean {\r\n switch (evt.code) {\r\n case this.options.controlKeys.up:\r\n this.keyUp = true;\r\n break;\r\n case this.options.controlKeys.down:\r\n this.keyDown = true;\r\n break;\r\n case this.options.controlKeys.left:\r\n this.keyLeft = true;\r\n break;\r\n case this.options.controlKeys.right:\r\n this.keyRight = true;\r\n break;\r\n case this.options.controlKeys.forward:\r\n this.keyForward = true;\r\n break;\r\n case this.options.controlKeys.backward:\r\n this.keyBackward = true;\r\n break;\r\n default:\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onKeyUp}\r\n * @override\r\n */\r\n protected _onKeyUp(evt: IControllerKeyupEvent): boolean {\r\n switch (evt.code) {\r\n case this.options.controlKeys.up:\r\n this.keyUp = false;\r\n break;\r\n case this.options.controlKeys.down:\r\n this.keyDown = false;\r\n break;\r\n case this.options.controlKeys.left:\r\n this.keyLeft = false;\r\n break;\r\n case this.options.controlKeys.right:\r\n this.keyRight = false;\r\n break;\r\n case this.options.controlKeys.forward:\r\n this.keyForward = false;\r\n break;\r\n case this.options.controlKeys.backward:\r\n this.keyBackward = false;\r\n break;\r\n default:\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Set options\r\n * @param opt - options\r\n */\r\n setOptions(opt?: FPSCameraControllerOptions) {\r\n Object.assign(this.options, opt ?? {});\r\n this.reset();\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController.update}\r\n * @override\r\n */\r\n update() {\r\n const x = this._getCamera().worldMatrix.getRow(0).xyz();\r\n x.y = 0;\r\n x.inplaceNormalize();\r\n const z = this._getCamera().worldMatrix.getRow(2).xyz().inplaceNormalize();\r\n const move = new Vector3(0, 0, 0);\r\n let changed = false;\r\n if (this.keyForward) {\r\n changed = true;\r\n move.subBy(Vector3.scale(z, this.options.moveSpeed));\r\n }\r\n if (this.keyBackward) {\r\n changed = true;\r\n move.addBy(Vector3.scale(z, this.options.moveSpeed));\r\n }\r\n if (this.keyUp) {\r\n changed = true;\r\n move.y += this.options.moveSpeed;\r\n }\r\n if (this.keyDown) {\r\n changed = true;\r\n move.y -= this.options.moveSpeed;\r\n }\r\n if (this.keyLeft) {\r\n changed = true;\r\n move.subBy(Vector3.scale(x, this.options.moveSpeed));\r\n }\r\n if (this.keyRight) {\r\n changed = true;\r\n move.addBy(Vector3.scale(x, this.options.moveSpeed));\r\n }\r\n if (changed) {\r\n if (this._getCamera().parent) {\r\n const pos = new Vector3();\r\n const scale = new Vector3();\r\n const rotation = new Quaternion();\r\n this._getCamera().worldMatrix.decompose(scale, rotation, pos);\r\n pos.addBy(move);\r\n const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);\r\n const newLocalMatrix = newWorldMatrix.multiplyLeftAffine(\r\n Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix)\r\n );\r\n newLocalMatrix.decompose(scale, rotation, pos);\r\n this._getCamera().position.set(pos);\r\n this._getCamera().scale.set(scale);\r\n this._getCamera().rotation.set(rotation);\r\n } else {\r\n this._getCamera().moveBy(move);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["FPSCameraController","BaseCameraController","options","Object","assign","controlKeys","up","down","forward","backward","left","right","moveSpeed","rotateSpeed","reset","mouseDown","lastMouseX","lastMouseY","keyUp","keyDown","keyLeft","keyRight","keyForward","keyBackward","_onMouseDown","evt","button","offsetX","offsetY","_onMouseUp","_onMouseMove","dx","dy","zAxis","_getCamera","worldMatrix","getRow","xyz","alpha","Math","atan2","z","x","beta","min","PI","max","asin","y","newY","sin","r","sqrt","newZ","newX","cos","setXYZ","inplaceNormalize","XAxis","Vector3","cross","axisPY","YAxis","rotation","Quaternion","fromRotationMatrix","Matrix3x3","parent","set","pos","scale","decompose","newWorldMatrix","Matrix4x4","scaling","rotateLeft","translateLeft","newLocalMatrix","multiplyLeftAffine","invertAffine","position","_onKeyDown","code","_onKeyUp","setOptions","opt","update","move","changed","subBy","addBy","moveBy"],"mappings":"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"}
@@ -6,7 +6,6 @@ import { BaseCameraController } from './base.js';
6
6
  * @public
7
7
  */ class OrbitCameraController extends BaseCameraController {
8
8
  /** @internal */ options;
9
- /** @internal */ mouseDown;
10
9
  /** @internal */ lastMouseX;
11
10
  /** @internal */ lastMouseY;
12
11
  /** @internal */ rotateX;
@@ -14,10 +13,11 @@ import { BaseCameraController } from './base.js';
14
13
  /** @internal */ eyePos;
15
14
  /** @internal */ upVector;
16
15
  /** @internal */ xVector;
17
- /** @internal */ target;
18
16
  /** @internal */ direction;
19
17
  /** @internal */ quat;
20
- /** @internal */ scale;
18
+ /** @internal */ currentOp;
19
+ /** @internal */ panVelocityX;
20
+ /** @internal */ panVelocityY;
21
21
  /**
22
22
  * Creates an instance of OrbitCameraController
23
23
  * @param options - The creation options
@@ -25,51 +25,101 @@ import { BaseCameraController } from './base.js';
25
25
  super();
26
26
  this.options = Object.assign({
27
27
  center: Vector3.zero(),
28
- distance: 1,
29
- damping: 0.1,
30
- moveSpeed: 0.2,
31
- rotateSpeed: 0.01,
32
- zoomSpeed: 1
28
+ damping: 1,
29
+ rotateSpeed: 1,
30
+ panSpeed: 1,
31
+ zoomSpeed: 1,
32
+ controls: {
33
+ rotate: {
34
+ button: 0,
35
+ shiftKey: false,
36
+ ctrlKey: false,
37
+ altKey: false,
38
+ metaKey: false
39
+ },
40
+ pan: {
41
+ button: 0,
42
+ shiftKey: true,
43
+ ctrlKey: false,
44
+ altKey: false,
45
+ metaKey: false
46
+ },
47
+ zoom: {
48
+ button: 2,
49
+ shiftKey: false,
50
+ ctrlKey: true,
51
+ altKey: false,
52
+ metaKey: false
53
+ },
54
+ zoomWheel: true
55
+ }
33
56
  }, options || {});
34
- this.rotateX = 0;
35
- this.rotateY = 0;
36
57
  this.eyePos = new Vector3();
37
- this.upVector = Vector3.axisPY();
58
+ this.upVector = new Vector3();
38
59
  this.xVector = new Vector3();
39
- this.target = new Vector3();
40
60
  this.direction = new Vector3();
41
61
  this.quat = new Quaternion();
42
- this.scale = 1;
62
+ this.reset();
43
63
  }
44
64
  /** Rotation center */ get center() {
45
65
  return this.options.center;
46
66
  }
47
67
  set center(val) {
48
- this.options.center.set(val);
68
+ const center = this.options.center;
69
+ const dx = val.x - center.x;
70
+ const dy = val.y - center.y;
71
+ const dz = val.z - center.z;
72
+ center.x += dx;
73
+ center.y += dy;
74
+ center.z += dz;
75
+ this.eyePos.x += dx;
76
+ this.eyePos.y += dy;
77
+ this.eyePos.z += dz;
49
78
  }
50
79
  /**
51
80
  * {@inheritDoc BaseCameraController.reset}
52
81
  * @override
53
82
  */ reset() {
54
- this.mouseDown = false;
55
83
  this.lastMouseX = 0;
56
84
  this.lastMouseY = 0;
57
85
  this.rotateX = 0;
58
86
  this.rotateY = 0;
59
87
  this.upVector = Vector3.axisPY();
60
- this.scale = 1;
88
+ this.currentOp = 0;
89
+ this.panVelocityX = 0;
90
+ this.panVelocityY = 0;
61
91
  this._loadCameraParams();
62
92
  }
63
93
  /**
64
94
  * {@inheritDoc BaseCameraController._onMouseDown}
65
95
  * @override
66
96
  */ _onMouseDown(evt) {
67
- if (evt.button === 0) {
68
- this.mouseDown = true;
97
+ if (this.matchesControl(evt, this.options.controls.rotate)) {
98
+ this.lastMouseX = evt.offsetX;
99
+ this.lastMouseY = evt.offsetY;
100
+ this.rotateX = 0;
101
+ this.rotateY = 0;
102
+ this.panVelocityX = 0;
103
+ this.panVelocityY = 0;
104
+ this.currentOp = 1;
105
+ return true;
106
+ } else if (this.matchesControl(evt, this.options.controls.pan)) {
107
+ this.lastMouseX = evt.offsetX;
108
+ this.lastMouseY = evt.offsetY;
109
+ this.rotateX = 0;
110
+ this.rotateY = 0;
111
+ this.panVelocityX = 0;
112
+ this.panVelocityY = 0;
113
+ this.currentOp = 2;
114
+ return true;
115
+ } else if (this.matchesControl(evt, this.options.controls.zoom)) {
69
116
  this.lastMouseX = evt.offsetX;
70
117
  this.lastMouseY = evt.offsetY;
118
+ this.currentOp = 3;
71
119
  this.rotateX = 0;
72
120
  this.rotateY = 0;
121
+ this.panVelocityX = 0;
122
+ this.panVelocityY = 0;
73
123
  return true;
74
124
  }
75
125
  return false;
@@ -78,8 +128,9 @@ import { BaseCameraController } from './base.js';
78
128
  * {@inheritDoc BaseCameraController._onMouseUp}
79
129
  * @override
80
130
  */ _onMouseUp(evt) {
81
- if (evt.button === 0 && this.mouseDown) {
82
- this.mouseDown = false;
131
+ const control = this.currentOp === 1 ? this.options.controls.rotate : this.currentOp === 2 ? this.options.controls.pan : this.currentOp === 3 ? this.options.controls.zoom : null;
132
+ if (control && evt.button === control.button) {
133
+ this.currentOp = 0;
83
134
  return true;
84
135
  }
85
136
  return false;
@@ -88,47 +139,63 @@ import { BaseCameraController } from './base.js';
88
139
  * {@inheritDoc BaseCameraController._onMouseWheel}
89
140
  * @override
90
141
  */ _onMouseWheel(evt) {
91
- const factor = Math.pow(0.9, Math.abs(this.options.zoomSpeed));
92
- if (evt.deltaY > 0) {
93
- this.scale /= factor;
94
- } else {
95
- this.scale *= factor;
96
- }
142
+ this.zoom(evt.deltaY);
97
143
  return true;
98
144
  }
99
145
  /**
100
146
  * {@inheritDoc BaseCameraController._onMouseMove}
101
147
  * @override
102
148
  */ _onMouseMove(evt) {
103
- if (this.mouseDown) {
149
+ if (this.currentOp !== 0) {
104
150
  const dx = evt.offsetX - this.lastMouseX;
105
151
  const dy = evt.offsetY - this.lastMouseY;
106
152
  this.lastMouseX = evt.offsetX;
107
153
  this.lastMouseY = evt.offsetY;
108
- this.rotateX -= dy * this.options.rotateSpeed;
109
- this.rotateY -= dx * this.options.rotateSpeed;
154
+ if (this.currentOp === 1) {
155
+ this.rotateX -= dy * this.options.rotateSpeed * 0.005;
156
+ this.rotateY -= dx * this.options.rotateSpeed * 0.005;
157
+ } else if (this.currentOp === 2) {
158
+ this.panVelocityX = -dx * this.options.panSpeed;
159
+ this.panVelocityY = dy * this.options.panSpeed;
160
+ } else if (this.currentOp === 3) {
161
+ this.zoom(dy);
162
+ }
110
163
  return true;
111
164
  }
112
165
  return false;
113
166
  }
167
+ zoom(dy) {
168
+ const distance = Vector3.distance(this.eyePos, this.options.center);
169
+ let t = dy > 0 ? this.options.zoomSpeed : dy < 0 ? -this.options.zoomSpeed : 0;
170
+ t = Math.exp(t * 0.1);
171
+ if (t > 1 || distance > 0.01) {
172
+ this.eyePos.combineBy(this.options.center, t, 1 - t);
173
+ }
174
+ }
175
+ matchesControl(evt, control) {
176
+ return evt.button === control.button && evt.shiftKey === control.shiftKey && evt.ctrlKey === control.ctrlKey && evt.altKey === control.altKey && evt.metaKey === control.metaKey;
177
+ }
114
178
  /** @internal */ _loadCameraParams() {
115
179
  const camera = this._getCamera();
116
180
  if (camera) {
117
- this.eyePos = this._getCamera().position;
118
- this.target.set(this.options.center);
119
- camera.lookAt(this.eyePos, this.target, this.upVector);
120
- Vector3.sub(this.eyePos, this.target, this.direction);
121
- this.options.distance = this.direction.magnitude;
122
- this.direction.inplaceNormalize();
123
- const mat = this._getCamera().localMatrix;
124
- this.xVector.setXYZ(mat[0], mat[1], mat[2]);
181
+ this.lookAt(camera.position, this.options.center, this.upVector);
125
182
  }
126
183
  }
184
+ lookAt(from, to, up) {
185
+ this.eyePos.set(from);
186
+ this.options.center.set(to);
187
+ this.upVector.set(up);
188
+ this._getCamera().lookAt(this.eyePos, this.options.center, this.upVector);
189
+ Vector3.sub(this.eyePos, this.options.center, this.direction);
190
+ this.direction.inplaceNormalize();
191
+ const mat = this._getCamera().localMatrix;
192
+ this.xVector.setXYZ(mat[0], mat[1], mat[2]);
193
+ }
127
194
  /**
128
195
  * Set options
129
196
  * @param opt - options
130
197
  */ setOptions(opt) {
131
- opt && Object.assign(this.options, opt);
198
+ Object.assign(this.options, opt ?? {});
132
199
  this.reset();
133
200
  }
134
201
  /**
@@ -136,27 +203,32 @@ import { BaseCameraController } from './base.js';
136
203
  * @override
137
204
  */ update() {
138
205
  if (this._getCamera()) {
139
- const dx = this.options.center.x - this.target.x;
140
- const dy = this.options.center.y - this.target.y;
141
- const dz = this.options.center.z - this.target.z;
142
- this.eyePos.x += dx;
143
- this.eyePos.y += dy;
144
- this.eyePos.z += dz;
145
- this.target.set(this.options.center);
146
- Quaternion.fromAxisAngle(this.xVector, this.rotateX, this.quat);
147
- this.quat.transform(this.eyePos.subBy(this.target), this.eyePos);
148
- Quaternion.fromEulerAngle(0, this.rotateY, 0, 'XYZ', this.quat);
149
- this.quat.transform(this.eyePos, this.eyePos);
150
- this.quat.transform(this.xVector, this.xVector).inplaceNormalize();
151
- Vector3.normalize(this.eyePos, this.direction).inplaceNormalize();
152
- Vector3.cross(this.direction, this.xVector, this.upVector).inplaceNormalize();
153
- Vector3.add(this.target, Vector3.scale(this.direction, this.options.distance * this.scale), this.eyePos);
154
- this._getCamera().lookAt(this.eyePos, this.target, this.upVector);
155
- // this._loadCameraParams();
156
- if (this.mouseDown) {
157
- this.rotateX = 0;
158
- this.rotateY = 0;
159
- } else {
206
+ const center = this.options.center;
207
+ if (Math.abs(this.panVelocityX) > 0.0001 || Math.abs(this.panVelocityY) > 0.0001) {
208
+ const right = this.xVector;
209
+ const up = this.upVector;
210
+ center.combineBy(right, 1, this.panVelocityX);
211
+ center.combineBy(up, 1, this.panVelocityY);
212
+ this.eyePos.combineBy(right, 1, this.panVelocityX);
213
+ this.eyePos.combineBy(up, 1, this.panVelocityY);
214
+ this.panVelocityX *= 1 - this.options.damping;
215
+ this.panVelocityY *= 1 - this.options.damping;
216
+ if (Math.abs(this.panVelocityX) < 0.0001) {
217
+ this.panVelocityX = 0;
218
+ }
219
+ if (Math.abs(this.panVelocityY) < 0.0001) {
220
+ this.panVelocityY = 0;
221
+ }
222
+ }
223
+ if (Math.abs(this.rotateX) > 0.0001 || Math.abs(this.rotateY) > 0.0001) {
224
+ Quaternion.fromAxisAngle(this.xVector, this.rotateX, this.quat);
225
+ this.quat.transform(this.eyePos.subBy(center), this.eyePos);
226
+ Quaternion.fromEulerAngle(0, this.rotateY, 0, 'ZYX', this.quat);
227
+ this.quat.transform(this.eyePos, this.eyePos);
228
+ this.quat.transform(this.xVector, this.xVector).inplaceNormalize();
229
+ Vector3.normalize(this.eyePos, this.direction).inplaceNormalize();
230
+ Vector3.cross(this.direction, this.xVector, this.upVector).inplaceNormalize();
231
+ this.eyePos.addBy(center);
160
232
  this.rotateX *= 1 - this.options.damping;
161
233
  this.rotateY *= 1 - this.options.damping;
162
234
  if (Math.abs(this.rotateX) < 0.0001) {
@@ -166,6 +238,7 @@ import { BaseCameraController } from './base.js';
166
238
  this.rotateY = 0;
167
239
  }
168
240
  }
241
+ this._getCamera().lookAt(this.eyePos, center, this.upVector);
169
242
  }
170
243
  }
171
244
  }