@ohos-ports/react-three-drei 10.7.7-beta.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 (483) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +852 -0
  3. package/core/AccumulativeShadows.cjs.js +1 -0
  4. package/core/AccumulativeShadows.d.ts +59 -0
  5. package/core/AccumulativeShadows.js +310 -0
  6. package/core/AdaptiveDpr.cjs.js +1 -0
  7. package/core/AdaptiveDpr.d.ts +3 -0
  8. package/core/AdaptiveDpr.js +28 -0
  9. package/core/AdaptiveEvents.cjs.js +1 -0
  10. package/core/AdaptiveEvents.d.ts +1 -0
  11. package/core/AdaptiveEvents.js +20 -0
  12. package/core/ArcballControls.cjs.js +1 -0
  13. package/core/ArcballControls.d.ts +15 -0
  14. package/core/ArcballControls.js +67 -0
  15. package/core/AsciiRenderer.cjs.js +1 -0
  16. package/core/AsciiRenderer.d.ts +11 -0
  17. package/core/AsciiRenderer.js +66 -0
  18. package/core/BBAnchor.cjs.js +1 -0
  19. package/core/BBAnchor.d.ts +7 -0
  20. package/core/BBAnchor.js +37 -0
  21. package/core/Backdrop.cjs.js +1 -0
  22. package/core/Backdrop.d.ts +15 -0
  23. package/core/Backdrop.js +33 -0
  24. package/core/BakeShadows.cjs.js +1 -0
  25. package/core/BakeShadows.d.ts +1 -0
  26. package/core/BakeShadows.js +16 -0
  27. package/core/Billboard.cjs.js +1 -0
  28. package/core/Billboard.d.ts +10 -0
  29. package/core/Billboard.js +53 -0
  30. package/core/Bounds.cjs.js +1 -0
  31. package/core/Bounds.d.ts +36 -0
  32. package/core/Bounds.js +254 -0
  33. package/core/Bvh.cjs.js +1 -0
  34. package/core/Bvh.d.ts +19 -0
  35. package/core/Bvh.js +92 -0
  36. package/core/CameraControls.cjs.js +1 -0
  37. package/core/CameraControls.d.ts +48 -0
  38. package/core/CameraControls.js +151 -0
  39. package/core/CameraShake.cjs.js +1 -0
  40. package/core/CameraShake.d.ts +17 -0
  41. package/core/CameraShake.js +57 -0
  42. package/core/CatmullRomLine.cjs.js +1 -0
  43. package/core/CatmullRomLine.d.ts +10 -0
  44. package/core/CatmullRomLine.js +42 -0
  45. package/core/Caustics.cjs.js +1 -0
  46. package/core/Caustics.d.ts +32 -0
  47. package/core/Caustics.js +388 -0
  48. package/core/Center.cjs.js +1 -0
  49. package/core/Center.d.ts +33 -0
  50. package/core/Center.js +67 -0
  51. package/core/Clone.cjs.js +1 -0
  52. package/core/Clone.d.ts +15 -0
  53. package/core/Clone.js +100 -0
  54. package/core/Cloud.cjs.js +1 -0
  55. package/core/Cloud.d.ts +97 -0
  56. package/core/Cloud.js +231 -0
  57. package/core/ComputedAttribute.cjs.js +1 -0
  58. package/core/ComputedAttribute.d.ts +8 -0
  59. package/core/ComputedAttribute.js +33 -0
  60. package/core/ContactShadows.cjs.js +1 -0
  61. package/core/ContactShadows.d.ts +18 -0
  62. package/core/ContactShadows.js +114 -0
  63. package/core/CubeCamera.cjs.js +1 -0
  64. package/core/CubeCamera.d.ts +21 -0
  65. package/core/CubeCamera.js +86 -0
  66. package/core/CubeTexture.cjs.js +1 -0
  67. package/core/CubeTexture.d.ts +14 -0
  68. package/core/CubeTexture.js +25 -0
  69. package/core/CubicBezierLine.cjs.js +1 -0
  70. package/core/CubicBezierLine.d.ts +12 -0
  71. package/core/CubicBezierLine.js +28 -0
  72. package/core/CurveModifier.cjs.js +1 -0
  73. package/core/CurveModifier.d.ts +11 -0
  74. package/core/CurveModifier.js +27 -0
  75. package/core/Decal.cjs.js +1 -0
  76. package/core/Decal.d.ts +16 -0
  77. package/core/Decal.js +128 -0
  78. package/core/Detailed.cjs.js +1 -0
  79. package/core/Detailed.d.ts +10 -0
  80. package/core/Detailed.js +33 -0
  81. package/core/DetectGPU.cjs.js +1 -0
  82. package/core/DetectGPU.d.ts +7 -0
  83. package/core/DetectGPU.js +14 -0
  84. package/core/DeviceOrientationControls.cjs.js +1 -0
  85. package/core/DeviceOrientationControls.d.ts +10 -0
  86. package/core/DeviceOrientationControls.js +51 -0
  87. package/core/Edges.cjs.js +1 -0
  88. package/core/Edges.d.ts +13 -0
  89. package/core/Edges.js +38 -0
  90. package/core/Effects.cjs.js +1 -0
  91. package/core/Effects.d.ts +25 -0
  92. package/core/Effects.js +91 -0
  93. package/core/Environment.cjs.js +1 -0
  94. package/core/Environment.d.ts +37 -0
  95. package/core/Environment.js +189 -0
  96. package/core/Example.cjs.js +1 -0
  97. package/core/Example.d.ts +13 -0
  98. package/core/Example.js +46 -0
  99. package/core/Fbo.cjs.js +1 -0
  100. package/core/Fbo.d.ts +22 -0
  101. package/core/Fbo.js +63 -0
  102. package/core/Fbx.cjs.js +1 -0
  103. package/core/Fbx.d.ts +11 -0
  104. package/core/Fbx.js +23 -0
  105. package/core/FirstPersonControls.cjs.js +1 -0
  106. package/core/FirstPersonControls.d.ts +8 -0
  107. package/core/FirstPersonControls.js +38 -0
  108. package/core/Fisheye.cjs.js +1 -0
  109. package/core/Fisheye.d.ts +10 -0
  110. package/core/Fisheye.js +95 -0
  111. package/core/Float.cjs.js +1 -0
  112. package/core/Float.d.ts +14 -0
  113. package/core/Float.js +37 -0
  114. package/core/FlyControls.cjs.js +1 -0
  115. package/core/FlyControls.d.ts +10 -0
  116. package/core/FlyControls.js +55 -0
  117. package/core/GizmoHelper.cjs.js +1 -0
  118. package/core/GizmoHelper.d.ts +16 -0
  119. package/core/GizmoHelper.js +116 -0
  120. package/core/GizmoViewcube.cjs.js +1 -0
  121. package/core/GizmoViewcube.d.ts +14 -0
  122. package/core/GizmoViewcube.js +133 -0
  123. package/core/GizmoViewport.cjs.js +1 -0
  124. package/core/GizmoViewport.d.ts +16 -0
  125. package/core/GizmoViewport.js +140 -0
  126. package/core/Gltf.cjs.js +1 -0
  127. package/core/Gltf.d.ts +27 -0
  128. package/core/Gltf.js +52 -0
  129. package/core/GradientTexture.cjs.js +1 -0
  130. package/core/GradientTexture.d.ts +18 -0
  131. package/core/GradientTexture.js +54 -0
  132. package/core/Grid.cjs.js +1 -0
  133. package/core/Grid.d.ts +26 -0
  134. package/core/Grid.js +142 -0
  135. package/core/Helper.cjs.js +1 -0
  136. package/core/Helper.d.ts +16 -0
  137. package/core/Helper.js +47 -0
  138. package/core/Hud.cjs.js +1 -0
  139. package/core/Hud.d.ts +6 -0
  140. package/core/Hud.js +55 -0
  141. package/core/Image.cjs.js +1 -0
  142. package/core/Image.d.ts +38 -0
  143. package/core/Image.js +160 -0
  144. package/core/Instances.cjs.js +1 -0
  145. package/core/Instances.d.ts +64 -0
  146. package/core/Instances.js +313 -0
  147. package/core/Ktx2.cjs.js +1 -0
  148. package/core/Ktx2.d.ts +14 -0
  149. package/core/Ktx2.js +48 -0
  150. package/core/Lightformer.cjs.js +1 -0
  151. package/core/Lightformer.d.ts +15 -0
  152. package/core/Lightformer.js +63 -0
  153. package/core/Line.cjs.js +1 -0
  154. package/core/Line.d.ts +13 -0
  155. package/core/Line.js +73 -0
  156. package/core/MapControls.cjs.js +1 -0
  157. package/core/MapControls.d.ts +14 -0
  158. package/core/MapControls.js +63 -0
  159. package/core/MarchingCubes.cjs.js +1 -0
  160. package/core/MarchingCubes.d.ts +24 -0
  161. package/core/MarchingCubes.js +78 -0
  162. package/core/Mask.cjs.js +1 -0
  163. package/core/Mask.d.ts +17 -0
  164. package/core/Mask.js +42 -0
  165. package/core/MatcapTexture.cjs.js +1 -0
  166. package/core/MatcapTexture.d.ts +9 -0
  167. package/core/MatcapTexture.js +51 -0
  168. package/core/MeshDiscardMaterial.cjs.js +1 -0
  169. package/core/MeshDiscardMaterial.d.ts +10 -0
  170. package/core/MeshDiscardMaterial.js +15 -0
  171. package/core/MeshDistortMaterial.cjs.js +1 -0
  172. package/core/MeshDistortMaterial.d.ts +39 -0
  173. package/core/MeshDistortMaterial.js +72 -0
  174. package/core/MeshPortalMaterial.cjs.js +1 -0
  175. package/core/MeshPortalMaterial.d.ts +25 -0
  176. package/core/MeshPortalMaterial.js +467 -0
  177. package/core/MeshReflectorMaterial.cjs.js +1 -0
  178. package/core/MeshReflectorMaterial.d.ts +14 -0
  179. package/core/MeshReflectorMaterial.js +180 -0
  180. package/core/MeshRefractionMaterial.cjs.js +1 -0
  181. package/core/MeshRefractionMaterial.d.ts +19 -0
  182. package/core/MeshRefractionMaterial.js +73 -0
  183. package/core/MeshTransmissionMaterial.cjs.js +1 -0
  184. package/core/MeshTransmissionMaterial.d.ts +34 -0
  185. package/core/MeshTransmissionMaterial.js +402 -0
  186. package/core/MeshWobbleMaterial.cjs.js +1 -0
  187. package/core/MeshWobbleMaterial.d.ts +36 -0
  188. package/core/MeshWobbleMaterial.js +60 -0
  189. package/core/MotionPathControls.cjs.js +1 -0
  190. package/core/MotionPathControls.d.ts +33 -0
  191. package/core/MotionPathControls.js +121 -0
  192. package/core/MultiMaterial.cjs.js +1 -0
  193. package/core/MultiMaterial.d.ts +4 -0
  194. package/core/MultiMaterial.js +29 -0
  195. package/core/NormalTexture.cjs.js +1 -0
  196. package/core/NormalTexture.d.ts +14 -0
  197. package/core/NormalTexture.js +42 -0
  198. package/core/OrbitControls.cjs.js +1 -0
  199. package/core/OrbitControls.d.ts +22 -0
  200. package/core/OrbitControls.js +79 -0
  201. package/core/OrthographicCamera.cjs.js +1 -0
  202. package/core/OrthographicCamera.d.ts +14 -0
  203. package/core/OrthographicCamera.js +76 -0
  204. package/core/Outlines.cjs.js +1 -0
  205. package/core/Outlines.d.ts +17 -0
  206. package/core/Outlines.js +166 -0
  207. package/core/PerformanceMonitor.cjs.js +1 -0
  208. package/core/PerformanceMonitor.d.ts +36 -0
  209. package/core/PerformanceMonitor.js +116 -0
  210. package/core/PerspectiveCamera.cjs.js +1 -0
  211. package/core/PerspectiveCamera.d.ts +14 -0
  212. package/core/PerspectiveCamera.js +72 -0
  213. package/core/PointMaterial.cjs.js +1 -0
  214. package/core/PointMaterial.d.ts +8 -0
  215. package/core/PointMaterial.js +36 -0
  216. package/core/PointerLockControls.cjs.js +1 -0
  217. package/core/PointerLockControls.d.ts +15 -0
  218. package/core/PointerLockControls.js +89 -0
  219. package/core/Points.cjs.js +1 -0
  220. package/core/Points.d.ts +31 -0
  221. package/core/Points.js +202 -0
  222. package/core/PositionalAudio.cjs.js +1 -0
  223. package/core/PositionalAudio.d.ts +9 -0
  224. package/core/PositionalAudio.js +46 -0
  225. package/core/Preload.cjs.js +1 -0
  226. package/core/Preload.d.ts +7 -0
  227. package/core/Preload.js +44 -0
  228. package/core/Progress.cjs.js +1 -0
  229. package/core/Progress.d.ts +14 -0
  230. package/core/Progress.js +55 -0
  231. package/core/QuadraticBezierLine.cjs.js +1 -0
  232. package/core/QuadraticBezierLine.d.ts +14 -0
  233. package/core/QuadraticBezierLine.js +42 -0
  234. package/core/RenderCubeTexture.cjs.js +1 -0
  235. package/core/RenderCubeTexture.d.ts +30 -0
  236. package/core/RenderCubeTexture.js +96 -0
  237. package/core/RenderTexture.cjs.js +1 -0
  238. package/core/RenderTexture.d.ts +18 -0
  239. package/core/RenderTexture.js +105 -0
  240. package/core/Resize.cjs.js +1 -0
  241. package/core/Resize.d.ts +17 -0
  242. package/core/Resize.js +39 -0
  243. package/core/RoundedBox.cjs.js +1 -0
  244. package/core/RoundedBox.d.ts +14 -0
  245. package/core/RoundedBox.js +70 -0
  246. package/core/Sampler.cjs.js +1 -0
  247. package/core/Sampler.d.ts +28 -0
  248. package/core/Sampler.js +75 -0
  249. package/core/ScreenQuad.cjs.js +1 -0
  250. package/core/ScreenQuad.d.ts +5 -0
  251. package/core/ScreenQuad.js +25 -0
  252. package/core/ScreenSizer.cjs.js +1 -0
  253. package/core/ScreenSizer.d.ts +7 -0
  254. package/core/ScreenSizer.js +39 -0
  255. package/core/ScreenSpace.cjs.js +1 -0
  256. package/core/ScreenSpace.d.ts +7 -0
  257. package/core/ScreenSpace.js +25 -0
  258. package/core/Segments.cjs.js +1 -0
  259. package/core/Segments.d.ts +29 -0
  260. package/core/Segments.js +96 -0
  261. package/core/Shadow.cjs.js +1 -0
  262. package/core/Shadow.d.ts +12 -0
  263. package/core/Shadow.js +42 -0
  264. package/core/ShadowAlpha.cjs.js +1 -0
  265. package/core/ShadowAlpha.d.ts +7 -0
  266. package/core/ShadowAlpha.js +108 -0
  267. package/core/Sky.cjs.js +1 -0
  268. package/core/Sky.d.ts +16 -0
  269. package/core/Sky.js +39 -0
  270. package/core/Sparkles.cjs.js +1 -0
  271. package/core/Sparkles.d.ts +26 -0
  272. package/core/Sparkles.js +161 -0
  273. package/core/Splat.cjs.js +1 -0
  274. package/core/Splat.d.ts +56 -0
  275. package/core/Splat.js +506 -0
  276. package/core/SpotLight.cjs.js +1 -0
  277. package/core/SpotLight.d.ts +27 -0
  278. package/core/SpotLight.js +223 -0
  279. package/core/SpriteAnimator.cjs.js +1 -0
  280. package/core/SpriteAnimator.d.ts +88 -0
  281. package/core/SpriteAnimator.js +413 -0
  282. package/core/Stage.cjs.js +1 -0
  283. package/core/Stage.d.ts +27 -0
  284. package/core/Stage.js +133 -0
  285. package/core/Stars.cjs.js +1 -0
  286. package/core/Stars.d.ts +22 -0
  287. package/core/Stars.js +100 -0
  288. package/core/Stats.cjs.js +1 -0
  289. package/core/Stats.d.ts +7 -0
  290. package/core/Stats.js +32 -0
  291. package/core/StatsGl.cjs.js +1 -0
  292. package/core/StatsGl.d.ts +14 -0
  293. package/core/StatsGl.js +44 -0
  294. package/core/Svg.cjs.js +1 -0
  295. package/core/Svg.d.ts +13 -0
  296. package/core/Svg.js +62 -0
  297. package/core/Text.cjs.js +1 -0
  298. package/core/Text.d.ts +38 -0
  299. package/core/Text.js +57 -0
  300. package/core/Text3D.cjs.js +1 -0
  301. package/core/Text3D.d.ts +20 -0
  302. package/core/Text3D.js +74 -0
  303. package/core/Texture.cjs.js +1 -0
  304. package/core/Texture.d.ts +20 -0
  305. package/core/Texture.js +60 -0
  306. package/core/TrackballControls.cjs.js +1 -0
  307. package/core/TrackballControls.d.ts +15 -0
  308. package/core/TrackballControls.js +72 -0
  309. package/core/Trail.cjs.js +1 -0
  310. package/core/Trail.d.ts +21 -0
  311. package/core/Trail.js +150 -0
  312. package/core/TrailTexture.cjs.js +1 -0
  313. package/core/TrailTexture.d.ts +19 -0
  314. package/core/TrailTexture.js +159 -0
  315. package/core/TransformControls.cjs.js +1 -0
  316. package/core/TransformControls.d.ts +28 -0
  317. package/core/TransformControls.js +114 -0
  318. package/core/VideoTexture.cjs.js +1 -0
  319. package/core/VideoTexture.d.ts +26 -0
  320. package/core/VideoTexture.js +111 -0
  321. package/core/Wireframe.cjs.js +1 -0
  322. package/core/Wireframe.d.ts +15 -0
  323. package/core/Wireframe.js +157 -0
  324. package/core/calculateScaleFactor.cjs.js +1 -0
  325. package/core/calculateScaleFactor.d.ts +3 -0
  326. package/core/calculateScaleFactor.js +31 -0
  327. package/core/index.cjs.js +1 -0
  328. package/core/index.d.ts +122 -0
  329. package/core/index.js +150 -0
  330. package/core/meshBounds.cjs.js +1 -0
  331. package/core/meshBounds.d.ts +2 -0
  332. package/core/meshBounds.js +28 -0
  333. package/core/shaderMaterial.cjs.js +1 -0
  334. package/core/shaderMaterial.d.ts +9 -0
  335. package/core/shaderMaterial.js +29 -0
  336. package/core/shapes.cjs.js +1 -0
  337. package/core/shapes.d.ts +26 -0
  338. package/core/shapes.js +65 -0
  339. package/core/softShadows.cjs.js +1 -0
  340. package/core/softShadows.d.ts +6 -0
  341. package/core/softShadows.js +158 -0
  342. package/core/useAnimations.cjs.js +1 -0
  343. package/core/useAnimations.d.ts +13 -0
  344. package/core/useAnimations.js +52 -0
  345. package/core/useAspect.cjs.js +1 -0
  346. package/core/useAspect.d.ts +1 -0
  347. package/core/useAspect.js +10 -0
  348. package/core/useBoxProjectedEnv.cjs.js +1 -0
  349. package/core/useBoxProjectedEnv.d.ts +19 -0
  350. package/core/useBoxProjectedEnv.js +95 -0
  351. package/core/useCamera.cjs.js +1 -0
  352. package/core/useCamera.d.ts +3 -0
  353. package/core/useCamera.js +19 -0
  354. package/core/useContextBridge.cjs.js +1 -0
  355. package/core/useContextBridge.d.ts +4 -0
  356. package/core/useContextBridge.js +20 -0
  357. package/core/useDepthBuffer.cjs.js +1 -0
  358. package/core/useDepthBuffer.d.ts +6 -0
  359. package/core/useDepthBuffer.js +38 -0
  360. package/core/useEnvironment.cjs.js +1 -0
  361. package/core/useEnvironment.d.ts +17 -0
  362. package/core/useEnvironment.js +150 -0
  363. package/core/useFont.cjs.js +1 -0
  364. package/core/useFont.d.ts +24 -0
  365. package/core/useFont.js +24 -0
  366. package/core/useIntersect.cjs.js +1 -0
  367. package/core/useIntersect.d.ts +3 -0
  368. package/core/useIntersect.js +36 -0
  369. package/core/useSpriteLoader.cjs.js +1 -0
  370. package/core/useSpriteLoader.d.ts +57 -0
  371. package/core/useSpriteLoader.js +402 -0
  372. package/helpers/constants.cjs.js +1 -0
  373. package/helpers/constants.d.ts +1 -0
  374. package/helpers/constants.js +6 -0
  375. package/helpers/deprecated.cjs.js +1 -0
  376. package/helpers/deprecated.d.ts +5 -0
  377. package/helpers/deprecated.js +8 -0
  378. package/helpers/environment-assets.cjs.js +1 -0
  379. package/helpers/environment-assets.d.ts +13 -0
  380. package/helpers/environment-assets.js +14 -0
  381. package/helpers/glsl/DefaultSpotlightShadowShadows.glsl.js +3 -0
  382. package/helpers/glsl/distort.vert.glsl.js +3 -0
  383. package/helpers/ts-utils.cjs.js +1 -0
  384. package/helpers/ts-utils.d.ts +7 -0
  385. package/helpers/ts-utils.js +1 -0
  386. package/helpers/useEffectfulState.cjs.js +1 -0
  387. package/helpers/useEffectfulState.d.ts +4 -0
  388. package/helpers/useEffectfulState.js +17 -0
  389. package/index.cjs.js +1 -0
  390. package/index.d.ts +1 -0
  391. package/index.js +139 -0
  392. package/materials/BlurPass.cjs.js +1 -0
  393. package/materials/BlurPass.d.ts +23 -0
  394. package/materials/BlurPass.js +72 -0
  395. package/materials/ConvolutionMaterial.cjs.js +1 -0
  396. package/materials/ConvolutionMaterial.d.ts +7 -0
  397. package/materials/ConvolutionMaterial.js +97 -0
  398. package/materials/DiscardMaterial.cjs.js +1 -0
  399. package/materials/DiscardMaterial.d.ts +3 -0
  400. package/materials/DiscardMaterial.js +5 -0
  401. package/materials/MeshReflectorMaterial.cjs.js +1 -0
  402. package/materials/MeshReflectorMaterial.d.ts +50 -0
  403. package/materials/MeshReflectorMaterial.js +256 -0
  404. package/materials/MeshRefractionMaterial.cjs.js +1 -0
  405. package/materials/MeshRefractionMaterial.d.ts +18 -0
  406. package/materials/MeshRefractionMaterial.js +163 -0
  407. package/materials/SpotLightMaterial.cjs.js +1 -0
  408. package/materials/SpotLightMaterial.d.ts +4 -0
  409. package/materials/SpotLightMaterial.js +115 -0
  410. package/materials/WireframeMaterial.cjs.js +1 -0
  411. package/materials/WireframeMaterial.d.ts +64 -0
  412. package/materials/WireframeMaterial.js +217 -0
  413. package/native/index.cjs.js +1 -0
  414. package/native/index.d.ts +1 -0
  415. package/native/index.js +150 -0
  416. package/native/package.json +5 -0
  417. package/package.json +83 -0
  418. package/web/CycleRaycast.cjs.js +1 -0
  419. package/web/CycleRaycast.d.ts +10 -0
  420. package/web/CycleRaycast.js +93 -0
  421. package/web/DragControls.cjs.js +1 -0
  422. package/web/DragControls.d.ts +17 -0
  423. package/web/DragControls.js +127 -0
  424. package/web/FaceControls.cjs.js +1 -0
  425. package/web/FaceControls.d.ts +29 -0
  426. package/web/FaceControls.js +236 -0
  427. package/web/FaceLandmarker.cjs.js +1 -0
  428. package/web/FaceLandmarker.d.ts +14 -0
  429. package/web/FaceLandmarker.js +49 -0
  430. package/web/Facemesh.cjs.js +1 -0
  431. package/web/Facemesh.d.ts +118 -0
  432. package/web/Facemesh.js +4538 -0
  433. package/web/Html.cjs.js +1 -0
  434. package/web/Html.d.ts +34 -0
  435. package/web/Html.js +375 -0
  436. package/web/KeyboardControls.cjs.js +1 -0
  437. package/web/KeyboardControls.d.ts +37 -0
  438. package/web/KeyboardControls.js +104 -0
  439. package/web/Loader.cjs.js +1 -0
  440. package/web/Loader.d.ts +12 -0
  441. package/web/Loader.js +101 -0
  442. package/web/PresentationControls.cjs.js +1 -0
  443. package/web/PresentationControls.d.ts +16 -0
  444. package/web/PresentationControls.js +79 -0
  445. package/web/ScreenVideoTexture.cjs.js +1 -0
  446. package/web/ScreenVideoTexture.d.ts +17 -0
  447. package/web/ScreenVideoTexture.js +30 -0
  448. package/web/ScrollControls.cjs.js +1 -0
  449. package/web/ScrollControls.d.ts +45 -0
  450. package/web/ScrollControls.js +237 -0
  451. package/web/Select.cjs.js +1 -0
  452. package/web/Select.d.ts +14 -0
  453. package/web/Select.js +171 -0
  454. package/web/View.cjs.js +1 -0
  455. package/web/View.d.ts +34 -0
  456. package/web/View.js +259 -0
  457. package/web/WebcamVideoTexture.cjs.js +1 -0
  458. package/web/WebcamVideoTexture.d.ts +17 -0
  459. package/web/WebcamVideoTexture.js +33 -0
  460. package/web/index.cjs.js +1 -0
  461. package/web/index.d.ts +17 -0
  462. package/web/index.js +176 -0
  463. package/web/pivotControls/AxisArrow.cjs.js +1 -0
  464. package/web/pivotControls/AxisArrow.d.ts +7 -0
  465. package/web/pivotControls/AxisArrow.js +193 -0
  466. package/web/pivotControls/AxisRotator.cjs.js +1 -0
  467. package/web/pivotControls/AxisRotator.d.ts +7 -0
  468. package/web/pivotControls/AxisRotator.js +220 -0
  469. package/web/pivotControls/PlaneSlider.cjs.js +1 -0
  470. package/web/pivotControls/PlaneSlider.d.ts +7 -0
  471. package/web/pivotControls/PlaneSlider.js +202 -0
  472. package/web/pivotControls/ScalingSphere.cjs.js +1 -0
  473. package/web/pivotControls/ScalingSphere.d.ts +7 -0
  474. package/web/pivotControls/ScalingSphere.js +192 -0
  475. package/web/pivotControls/context.cjs.js +1 -0
  476. package/web/pivotControls/context.d.ts +33 -0
  477. package/web/pivotControls/context.js +5 -0
  478. package/web/pivotControls/index.cjs.js +1 -0
  479. package/web/pivotControls/index.d.ts +39 -0
  480. package/web/pivotControls/index.js +213 -0
  481. package/web/useCursor.cjs.js +1 -0
  482. package/web/useCursor.d.ts +1 -0
  483. package/web/useCursor.js +12 -0
@@ -0,0 +1,37 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import * as React from 'react';
3
+ import * as THREE from 'three';
4
+ import { useFrame } from '@react-three/fiber';
5
+
6
+ const boundingBox = /* @__PURE__ */new THREE.Box3();
7
+ const boundingBoxSize = /* @__PURE__ */new THREE.Vector3();
8
+ const BBAnchor = ({
9
+ anchor,
10
+ ...props
11
+ }) => {
12
+ const ref = React.useRef(null);
13
+ const parentRef = React.useRef(null);
14
+
15
+ // Reattach group created by this component to the parent's parent,
16
+ // so it becomes a sibling of its initial parent.
17
+ // We do that so the children have no impact on a bounding box of a parent.
18
+ React.useEffect(() => {
19
+ var _ref$current;
20
+ if ((_ref$current = ref.current) != null && (_ref$current = _ref$current.parent) != null && _ref$current.parent) {
21
+ parentRef.current = ref.current.parent;
22
+ ref.current.parent.parent.add(ref.current);
23
+ }
24
+ }, []);
25
+ useFrame(() => {
26
+ if (parentRef.current) {
27
+ boundingBox.setFromObject(parentRef.current);
28
+ boundingBox.getSize(boundingBoxSize);
29
+ ref.current.position.set(parentRef.current.position.x + boundingBoxSize.x * (Array.isArray(anchor) ? anchor[0] : anchor.x) / 2, parentRef.current.position.y + boundingBoxSize.y * (Array.isArray(anchor) ? anchor[1] : anchor.y) / 2, parentRef.current.position.z + boundingBoxSize.z * (Array.isArray(anchor) ? anchor[2] : anchor.z) / 2);
30
+ }
31
+ });
32
+ return /*#__PURE__*/React.createElement("group", _extends({
33
+ ref: ref
34
+ }, props));
35
+ };
36
+
37
+ export { BBAnchor };
@@ -0,0 +1 @@
1
+ "use strict";function e(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("react"));const r=e=>0===e?0:Math.pow(2,10*e-10);exports.Backdrop=function({children:e,floor:o=.25,segments:n=20,receiveShadow:c,...a}){const u=t.useRef(null);return t.useLayoutEffect((()=>{let e=0;const t=n/n/2,c=u.current.attributes.position;for(let a=0;a<n+1;a++)for(let u=0;u<n+1;u++)c.setXYZ(e++,a/n-t+(0===a?-o:0),u/n-t,r(a/n));c.needsUpdate=!0,u.current.computeVertexNormals()}),[n,o]),t.createElement("group",a,t.createElement("mesh",{receiveShadow:c,rotation:[-Math.PI/2,0,Math.PI/2]},t.createElement("planeGeometry",{ref:u,args:[1,1,n,n]}),e))};
@@ -0,0 +1,15 @@
1
+ import { ThreeElements } from '@react-three/fiber';
2
+ import * as React from 'react';
3
+ export type BackdropProps = ThreeElements['group'] & {
4
+ floor?: number;
5
+ segments?: number;
6
+ receiveShadow?: boolean;
7
+ children?: React.ReactNode;
8
+ };
9
+ export declare function Backdrop({ children, floor, segments, receiveShadow, ...props }: {
10
+ [x: string]: any;
11
+ children: any;
12
+ floor?: number | undefined;
13
+ segments?: number | undefined;
14
+ receiveShadow: any;
15
+ }): React.JSX.Element;
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+
3
+ const easeInExpo = x => x === 0 ? 0 : Math.pow(2, 10 * x - 10);
4
+ function Backdrop({
5
+ children,
6
+ floor = 0.25,
7
+ segments = 20,
8
+ receiveShadow,
9
+ ...props
10
+ }) {
11
+ const ref = React.useRef(null);
12
+ React.useLayoutEffect(() => {
13
+ let i = 0;
14
+ const offset = segments / segments / 2;
15
+ const position = ref.current.attributes.position;
16
+ for (let x = 0; x < segments + 1; x++) {
17
+ for (let y = 0; y < segments + 1; y++) {
18
+ position.setXYZ(i++, x / segments - offset + (x === 0 ? -floor : 0), y / segments - offset, easeInExpo(x / segments));
19
+ }
20
+ }
21
+ position.needsUpdate = true;
22
+ ref.current.computeVertexNormals();
23
+ }, [segments, floor]);
24
+ return /*#__PURE__*/React.createElement("group", props, /*#__PURE__*/React.createElement("mesh", {
25
+ receiveShadow: receiveShadow,
26
+ rotation: [-Math.PI / 2, 0, Math.PI / 2]
27
+ }, /*#__PURE__*/React.createElement("planeGeometry", {
28
+ ref: ref,
29
+ args: [1, 1, segments, segments]
30
+ }), children));
31
+ }
32
+
33
+ export { Backdrop };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("@react-three/fiber");exports.BakeShadows=function(){const t=a.useThree((e=>e.gl));return e.useEffect((()=>(t.shadowMap.autoUpdate=!1,t.shadowMap.needsUpdate=!0,()=>{t.shadowMap.autoUpdate=t.shadowMap.needsUpdate=!0})),[t.shadowMap]),null};
@@ -0,0 +1 @@
1
+ export declare function BakeShadows(): null;
@@ -0,0 +1,16 @@
1
+ import { useEffect } from 'react';
2
+ import { useThree } from '@react-three/fiber';
3
+
4
+ function BakeShadows() {
5
+ const gl = useThree(state => state.gl);
6
+ useEffect(() => {
7
+ gl.shadowMap.autoUpdate = false;
8
+ gl.shadowMap.needsUpdate = true;
9
+ return () => {
10
+ gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;
11
+ };
12
+ }, [gl.shadowMap]);
13
+ return null;
14
+ }
15
+
16
+ export { BakeShadows };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),n=require("@react-three/fiber");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var c=u(e),a=o(r);const i=a.forwardRef((function({children:e,follow:r=!0,lockX:u=!1,lockY:o=!1,lockZ:i=!1,...l},f){const d=a.useRef(null),s=a.useRef(null),p=new t.Quaternion;return n.useFrame((({camera:e})=>{if(!r||!s.current)return;const t=d.current.rotation.clone();s.current.updateMatrix(),s.current.updateWorldMatrix(!1,!1),s.current.getWorldQuaternion(p),e.getWorldQuaternion(d.current.quaternion).premultiply(p.invert()),u&&(d.current.rotation.x=t.x),o&&(d.current.rotation.y=t.y),i&&(d.current.rotation.z=t.z)})),a.useImperativeHandle(f,(()=>s.current),[]),a.createElement("group",c.default({ref:s},l),a.createElement("group",{ref:d},e))}));exports.Billboard=i;
@@ -0,0 +1,10 @@
1
+ import { Group } from 'three';
2
+ import { ThreeElements } from '@react-three/fiber';
3
+ import { ForwardRefComponent } from '../helpers/ts-utils';
4
+ export type BillboardProps = Omit<ThreeElements['group'], 'ref'> & {
5
+ follow?: boolean;
6
+ lockX?: boolean;
7
+ lockY?: boolean;
8
+ lockZ?: boolean;
9
+ };
10
+ export declare const Billboard: ForwardRefComponent<BillboardProps, Group>;
@@ -0,0 +1,53 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import * as React from 'react';
3
+ import { Quaternion } from 'three';
4
+ import { useFrame } from '@react-three/fiber';
5
+
6
+ /**
7
+ * Wraps children in a billboarded group. Sample usage:
8
+ *
9
+ * ```js
10
+ * <Billboard>
11
+ * <Text>hi</Text>
12
+ * </Billboard>
13
+ * ```
14
+ */
15
+ const Billboard = /* @__PURE__ */React.forwardRef(function Billboard({
16
+ children,
17
+ follow = true,
18
+ lockX = false,
19
+ lockY = false,
20
+ lockZ = false,
21
+ ...props
22
+ }, fref) {
23
+ const inner = React.useRef(null);
24
+ const localRef = React.useRef(null);
25
+ const q = new Quaternion();
26
+ useFrame(({
27
+ camera
28
+ }) => {
29
+ if (!follow || !localRef.current) return;
30
+
31
+ // save previous rotation in case we're locking an axis
32
+ const prevRotation = inner.current.rotation.clone();
33
+
34
+ // always face the camera
35
+ localRef.current.updateMatrix();
36
+ localRef.current.updateWorldMatrix(false, false);
37
+ localRef.current.getWorldQuaternion(q);
38
+ camera.getWorldQuaternion(inner.current.quaternion).premultiply(q.invert());
39
+
40
+ // readjust any axis that is locked
41
+ if (lockX) inner.current.rotation.x = prevRotation.x;
42
+ if (lockY) inner.current.rotation.y = prevRotation.y;
43
+ if (lockZ) inner.current.rotation.z = prevRotation.z;
44
+ });
45
+ React.useImperativeHandle(fref, () => localRef.current, []);
46
+ return /*#__PURE__*/React.createElement("group", _extends({
47
+ ref: localRef
48
+ }, props), /*#__PURE__*/React.createElement("group", {
49
+ ref: inner
50
+ }, children));
51
+ });
52
+
53
+ export { Billboard };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("three"),r=require("@react-three/fiber");function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=n(e),c=n(t),a=function(e){return e[e.NONE=0]="NONE",e[e.START=1]="START",e[e.ACTIVE=2]="ACTIVE",e}(a||{});const u=e=>e&&e.isOrthographicCamera,i=e=>1-Math.exp(-5*e)+.007*e,s=o.createContext(null);exports.Bounds=function({children:e,maxDuration:t=1,margin:n=1.2,observe:m,fit:p,clip:l,interpolateFunc:x=i,onFit:d}){const f=o.useRef(null),{camera:y,size:h,invalidate:g}=r.useThree(),v=r.useThree((e=>e.controls)),R=o.useRef(d);R.current=d;const M=o.useRef({camPos:new c.Vector3,camRot:new c.Quaternion,camZoom:1}),P=o.useRef({camPos:void 0,camRot:void 0,camZoom:void 0,camUp:void 0,target:void 0}),w=o.useRef(a.NONE),T=o.useRef(0),[V]=o.useState((()=>new c.Box3)),A=o.useMemo((()=>{function e(){const e=V.getSize(new c.Vector3),t=V.getCenter(new c.Vector3),r=Math.max(e.x,e.y,e.z),o=u(y)?4*r:r/(2*Math.atan(Math.PI*y.fov/360)),a=u(y)?4*r:o/y.aspect,i=n*Math.max(o,a);return{box:V,size:e,center:t,distance:i}}return{getSize:e,refresh(e){if((t=e)&&t.isBox3)V.copy(e);else{const t=e||f.current;if(!t)return this;t.updateWorldMatrix(!0,!0),V.setFromObject(t)}var t;if(V.isEmpty()){const e=y.position.length()||10;V.setFromCenterAndSize(new c.Vector3,new c.Vector3(e,e,e))}return M.current.camPos.copy(y.position),M.current.camRot.copy(y.quaternion),u(y)&&(M.current.camZoom=y.zoom),P.current.camPos=void 0,P.current.camRot=void 0,P.current.camZoom=void 0,P.current.camUp=void 0,P.current.target=void 0,this},reset(){const{center:t,distance:r}=e(),n=y.position.clone().sub(t).normalize();P.current.camPos=t.clone().addScaledVector(n,r),P.current.target=t.clone();const o=(new c.Matrix4).lookAt(P.current.camPos,P.current.target,y.up);return P.current.camRot=(new c.Quaternion).setFromRotationMatrix(o),w.current=a.START,T.current=0,this},moveTo(e){return P.current.camPos=Array.isArray(e)?new c.Vector3(...e):e.clone(),w.current=a.START,T.current=0,this},lookAt({target:e,up:t}){P.current.target=Array.isArray(e)?new c.Vector3(...e):e.clone(),P.current.camUp=t?Array.isArray(t)?new c.Vector3(...t):t.clone():y.up.clone();const r=(new c.Matrix4).lookAt(P.current.camPos||y.position,P.current.target,P.current.camUp);return P.current.camRot=(new c.Quaternion).setFromRotationMatrix(r),w.current=a.START,T.current=0,this},to({position:e,target:t}){return this.moveTo(e).lookAt({target:t})},fit(){if(!u(y))return this.reset();let e=0,t=0;const r=[new c.Vector3(V.min.x,V.min.y,V.min.z),new c.Vector3(V.min.x,V.max.y,V.min.z),new c.Vector3(V.min.x,V.min.y,V.max.z),new c.Vector3(V.min.x,V.max.y,V.max.z),new c.Vector3(V.max.x,V.max.y,V.max.z),new c.Vector3(V.max.x,V.max.y,V.min.z),new c.Vector3(V.max.x,V.min.y,V.max.z),new c.Vector3(V.max.x,V.min.y,V.min.z)],o=P.current.camPos||y.position,i=P.current.target||(null==v?void 0:v.target),s=P.current.camUp||y.up,m=i?(new c.Matrix4).lookAt(o,i,s).setPosition(o).invert():y.matrixWorldInverse;for(const n of r)n.applyMatrix4(m),e=Math.max(e,Math.abs(n.y)),t=Math.max(t,Math.abs(n.x));e*=2,t*=2;const p=(y.top-y.bottom)/e,l=(y.right-y.left)/t;return P.current.camZoom=Math.min(p,l)/n,w.current=a.START,T.current=0,R.current&&R.current(this.getSize()),this},clip(){const{distance:t}=e();return y.near=t/100,y.far=100*t,y.updateProjectionMatrix(),v&&(v.maxDistance=10*t,v.update()),g(),this}}}),[V,y,v,n,g]);o.useLayoutEffect((()=>{if(v){const e=()=>{if(v&&P.current.target&&w.current!==a.NONE){const e=(new c.Vector3).setFromMatrixColumn(y.matrix,2),t=M.current.camPos.distanceTo(v.target),r=(P.current.camPos||M.current.camPos).distanceTo(P.current.target),n=(1-T.current)*t+T.current*r;v.target.copy(y.position).addScaledVector(e,-n),v.update()}w.current=a.NONE};return v.addEventListener("start",e),()=>v.removeEventListener("start",e)}}),[v]);const z=o.useRef(0);return o.useLayoutEffect((()=>{(m||0==z.current++)&&(A.refresh(),p&&A.reset().fit(),l&&A.clip())}),[h,l,p,m,y,v]),r.useFrame(((e,r)=>{if(w.current===a.START)w.current=a.ACTIVE,g();else if(w.current===a.ACTIVE){if(T.current+=r/t,T.current>=1)P.current.camPos&&y.position.copy(P.current.camPos),P.current.camRot&&y.quaternion.copy(P.current.camRot),P.current.camUp&&y.up.copy(P.current.camUp),P.current.camZoom&&u(y)&&(y.zoom=P.current.camZoom),y.updateMatrixWorld(),y.updateProjectionMatrix(),v&&P.current.target&&(v.target.copy(P.current.target),v.update()),w.current=a.NONE;else{const e=x(T.current);P.current.camPos&&y.position.lerpVectors(M.current.camPos,P.current.camPos,e),P.current.camRot&&y.quaternion.slerpQuaternions(M.current.camRot,P.current.camRot,e),P.current.camUp&&y.up.set(0,1,0).applyQuaternion(y.quaternion),P.current.camZoom&&u(y)&&(y.zoom=(1-e)*M.current.camZoom+e*P.current.camZoom),y.updateMatrixWorld(),y.updateProjectionMatrix()}g()}})),o.createElement("group",{ref:f},o.createElement(s.Provider,{value:A},e))},exports.useBounds=function(){return o.useContext(s)};
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import * as THREE from 'three';
3
+ import { ThreeElements } from '@react-three/fiber';
4
+ export type SizeProps = {
5
+ box: THREE.Box3;
6
+ size: THREE.Vector3;
7
+ center: THREE.Vector3;
8
+ distance: number;
9
+ };
10
+ export type BoundsApi = {
11
+ getSize: () => SizeProps;
12
+ refresh(object?: THREE.Object3D | THREE.Box3): BoundsApi;
13
+ reset(): BoundsApi;
14
+ moveTo(position: THREE.Vector3 | [number, number, number]): BoundsApi;
15
+ lookAt({ target, up, }: {
16
+ target?: THREE.Vector3 | [number, number, number];
17
+ up?: THREE.Vector3 | [number, number, number];
18
+ }): BoundsApi;
19
+ to({ position, target }: {
20
+ position: [number, number, number];
21
+ target: [number, number, number];
22
+ }): BoundsApi;
23
+ fit(): BoundsApi;
24
+ clip(): BoundsApi;
25
+ };
26
+ export type BoundsProps = Omit<ThreeElements['group'], 'ref'> & {
27
+ maxDuration?: number;
28
+ margin?: number;
29
+ observe?: boolean;
30
+ fit?: boolean;
31
+ clip?: boolean;
32
+ interpolateFunc?: (t: number) => number;
33
+ onFit?: (data: SizeProps) => void;
34
+ };
35
+ export declare function Bounds({ children, maxDuration, margin, observe, fit, clip, interpolateFunc, onFit, }: BoundsProps): React.JSX.Element;
36
+ export declare function useBounds(): BoundsApi;
package/core/Bounds.js ADDED
@@ -0,0 +1,254 @@
1
+ import * as React from 'react';
2
+ import * as THREE from 'three';
3
+ import { useThree, useFrame } from '@react-three/fiber';
4
+
5
+ var AnimationState = /*#__PURE__*/function (AnimationState) {
6
+ AnimationState[AnimationState["NONE"] = 0] = "NONE";
7
+ AnimationState[AnimationState["START"] = 1] = "START";
8
+ AnimationState[AnimationState["ACTIVE"] = 2] = "ACTIVE";
9
+ return AnimationState;
10
+ }(AnimationState || {});
11
+ const isOrthographic = def => def && def.isOrthographicCamera;
12
+ const isBox3 = def => def && def.isBox3;
13
+ const interpolateFuncDefault = t => {
14
+ // Imitates the previously used THREE.MathUtils.damp
15
+ return 1 - Math.exp(-5 * t) + 0.007 * t;
16
+ };
17
+ const context = /*#__PURE__*/React.createContext(null);
18
+ function Bounds({
19
+ children,
20
+ maxDuration = 1.0,
21
+ margin = 1.2,
22
+ observe,
23
+ fit,
24
+ clip,
25
+ interpolateFunc = interpolateFuncDefault,
26
+ onFit
27
+ }) {
28
+ const ref = React.useRef(null);
29
+ const {
30
+ camera,
31
+ size,
32
+ invalidate
33
+ } = useThree();
34
+ const controls = useThree(state => state.controls);
35
+ const onFitRef = React.useRef(onFit);
36
+ onFitRef.current = onFit;
37
+ const origin = React.useRef({
38
+ camPos: new THREE.Vector3(),
39
+ camRot: new THREE.Quaternion(),
40
+ camZoom: 1
41
+ });
42
+ const goal = React.useRef({
43
+ camPos: undefined,
44
+ camRot: undefined,
45
+ camZoom: undefined,
46
+ camUp: undefined,
47
+ target: undefined
48
+ });
49
+ const animationState = React.useRef(AnimationState.NONE);
50
+ const t = React.useRef(0); // represent animation state from 0 to 1
51
+
52
+ const [box] = React.useState(() => new THREE.Box3());
53
+ const api = React.useMemo(() => {
54
+ function getSize() {
55
+ const boxSize = box.getSize(new THREE.Vector3());
56
+ const center = box.getCenter(new THREE.Vector3());
57
+ const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z);
58
+ const fitHeightDistance = isOrthographic(camera) ? maxSize * 4 : maxSize / (2 * Math.atan(Math.PI * camera.fov / 360));
59
+ const fitWidthDistance = isOrthographic(camera) ? maxSize * 4 : fitHeightDistance / camera.aspect;
60
+ const distance = margin * Math.max(fitHeightDistance, fitWidthDistance);
61
+ return {
62
+ box,
63
+ size: boxSize,
64
+ center,
65
+ distance
66
+ };
67
+ }
68
+ return {
69
+ getSize,
70
+ refresh(object) {
71
+ if (isBox3(object)) box.copy(object);else {
72
+ const target = object || ref.current;
73
+ if (!target) return this;
74
+ target.updateWorldMatrix(true, true);
75
+ box.setFromObject(target);
76
+ }
77
+ if (box.isEmpty()) {
78
+ const max = camera.position.length() || 10;
79
+ box.setFromCenterAndSize(new THREE.Vector3(), new THREE.Vector3(max, max, max));
80
+ }
81
+ origin.current.camPos.copy(camera.position);
82
+ origin.current.camRot.copy(camera.quaternion);
83
+ isOrthographic(camera) && (origin.current.camZoom = camera.zoom);
84
+ goal.current.camPos = undefined;
85
+ goal.current.camRot = undefined;
86
+ goal.current.camZoom = undefined;
87
+ goal.current.camUp = undefined;
88
+ goal.current.target = undefined;
89
+ return this;
90
+ },
91
+ reset() {
92
+ const {
93
+ center,
94
+ distance
95
+ } = getSize();
96
+ const direction = camera.position.clone().sub(center).normalize();
97
+ goal.current.camPos = center.clone().addScaledVector(direction, distance);
98
+ goal.current.target = center.clone();
99
+ const mCamRot = new THREE.Matrix4().lookAt(goal.current.camPos, goal.current.target, camera.up);
100
+ goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot);
101
+ animationState.current = AnimationState.START;
102
+ t.current = 0;
103
+ return this;
104
+ },
105
+ moveTo(position) {
106
+ goal.current.camPos = Array.isArray(position) ? new THREE.Vector3(...position) : position.clone();
107
+ animationState.current = AnimationState.START;
108
+ t.current = 0;
109
+ return this;
110
+ },
111
+ lookAt({
112
+ target,
113
+ up
114
+ }) {
115
+ goal.current.target = Array.isArray(target) ? new THREE.Vector3(...target) : target.clone();
116
+ if (up) {
117
+ goal.current.camUp = Array.isArray(up) ? new THREE.Vector3(...up) : up.clone();
118
+ } else {
119
+ goal.current.camUp = camera.up.clone();
120
+ }
121
+ const mCamRot = new THREE.Matrix4().lookAt(goal.current.camPos || camera.position, goal.current.target, goal.current.camUp);
122
+ goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot);
123
+ animationState.current = AnimationState.START;
124
+ t.current = 0;
125
+ return this;
126
+ },
127
+ /**
128
+ * @deprecated Use moveTo and lookAt instead
129
+ */
130
+ to({
131
+ position,
132
+ target
133
+ }) {
134
+ return this.moveTo(position).lookAt({
135
+ target
136
+ });
137
+ },
138
+ fit() {
139
+ if (!isOrthographic(camera)) {
140
+ // For non-orthographic cameras, fit should behave exactly like reset
141
+ return this.reset();
142
+ }
143
+
144
+ // For orthographic cameras, fit should only modify the zoom value
145
+ let maxHeight = 0,
146
+ maxWidth = 0;
147
+ const vertices = [new THREE.Vector3(box.min.x, box.min.y, box.min.z), new THREE.Vector3(box.min.x, box.max.y, box.min.z), new THREE.Vector3(box.min.x, box.min.y, box.max.z), new THREE.Vector3(box.min.x, box.max.y, box.max.z), new THREE.Vector3(box.max.x, box.max.y, box.max.z), new THREE.Vector3(box.max.x, box.max.y, box.min.z), new THREE.Vector3(box.max.x, box.min.y, box.max.z), new THREE.Vector3(box.max.x, box.min.y, box.min.z)];
148
+
149
+ // Transform the center and each corner to camera space
150
+ const pos = goal.current.camPos || camera.position;
151
+ const target = goal.current.target || (controls == null ? void 0 : controls.target);
152
+ const up = goal.current.camUp || camera.up;
153
+ const mCamWInv = target ? new THREE.Matrix4().lookAt(pos, target, up).setPosition(pos).invert() : camera.matrixWorldInverse;
154
+ for (const v of vertices) {
155
+ v.applyMatrix4(mCamWInv);
156
+ maxHeight = Math.max(maxHeight, Math.abs(v.y));
157
+ maxWidth = Math.max(maxWidth, Math.abs(v.x));
158
+ }
159
+ maxHeight *= 2;
160
+ maxWidth *= 2;
161
+ const zoomForHeight = (camera.top - camera.bottom) / maxHeight;
162
+ const zoomForWidth = (camera.right - camera.left) / maxWidth;
163
+ goal.current.camZoom = Math.min(zoomForHeight, zoomForWidth) / margin;
164
+ animationState.current = AnimationState.START;
165
+ t.current = 0;
166
+ onFitRef.current && onFitRef.current(this.getSize());
167
+ return this;
168
+ },
169
+ clip() {
170
+ const {
171
+ distance
172
+ } = getSize();
173
+ camera.near = distance / 100;
174
+ camera.far = distance * 100;
175
+ camera.updateProjectionMatrix();
176
+ if (controls) {
177
+ controls.maxDistance = distance * 10;
178
+ controls.update();
179
+ }
180
+ invalidate();
181
+ return this;
182
+ }
183
+ };
184
+ }, [box, camera, controls, margin, invalidate]);
185
+ React.useLayoutEffect(() => {
186
+ if (controls) {
187
+ // Try to prevent drag hijacking
188
+ const callback = () => {
189
+ if (controls && goal.current.target && animationState.current !== AnimationState.NONE) {
190
+ const front = new THREE.Vector3().setFromMatrixColumn(camera.matrix, 2);
191
+ const d0 = origin.current.camPos.distanceTo(controls.target);
192
+ const d1 = (goal.current.camPos || origin.current.camPos).distanceTo(goal.current.target);
193
+ const d = (1 - t.current) * d0 + t.current * d1;
194
+ controls.target.copy(camera.position).addScaledVector(front, -d);
195
+ controls.update();
196
+ }
197
+ animationState.current = AnimationState.NONE;
198
+ };
199
+ controls.addEventListener('start', callback);
200
+ return () => controls.removeEventListener('start', callback);
201
+ }
202
+ }, [controls]);
203
+
204
+ // Scale pointer on window resize
205
+ const count = React.useRef(0);
206
+ React.useLayoutEffect(() => {
207
+ if (observe || count.current++ === 0) {
208
+ api.refresh();
209
+ if (fit) api.reset().fit();
210
+ if (clip) api.clip();
211
+ }
212
+ }, [size, clip, fit, observe, camera, controls]);
213
+ useFrame((state, delta) => {
214
+ // This [additional animation step START] is needed to guarantee that delta used in animation isn't absurdly high (2-3 seconds) which is actually possible if rendering happens on demand...
215
+ if (animationState.current === AnimationState.START) {
216
+ animationState.current = AnimationState.ACTIVE;
217
+ invalidate();
218
+ } else if (animationState.current === AnimationState.ACTIVE) {
219
+ t.current += delta / maxDuration;
220
+ if (t.current >= 1) {
221
+ goal.current.camPos && camera.position.copy(goal.current.camPos);
222
+ goal.current.camRot && camera.quaternion.copy(goal.current.camRot);
223
+ goal.current.camUp && camera.up.copy(goal.current.camUp);
224
+ goal.current.camZoom && isOrthographic(camera) && (camera.zoom = goal.current.camZoom);
225
+ camera.updateMatrixWorld();
226
+ camera.updateProjectionMatrix();
227
+ if (controls && goal.current.target) {
228
+ controls.target.copy(goal.current.target);
229
+ controls.update();
230
+ }
231
+ animationState.current = AnimationState.NONE;
232
+ } else {
233
+ const k = interpolateFunc(t.current);
234
+ goal.current.camPos && camera.position.lerpVectors(origin.current.camPos, goal.current.camPos, k);
235
+ goal.current.camRot && camera.quaternion.slerpQuaternions(origin.current.camRot, goal.current.camRot, k);
236
+ goal.current.camUp && camera.up.set(0, 1, 0).applyQuaternion(camera.quaternion);
237
+ goal.current.camZoom && isOrthographic(camera) && (camera.zoom = (1 - k) * origin.current.camZoom + k * goal.current.camZoom);
238
+ camera.updateMatrixWorld();
239
+ camera.updateProjectionMatrix();
240
+ }
241
+ invalidate();
242
+ }
243
+ });
244
+ return /*#__PURE__*/React.createElement("group", {
245
+ ref: ref
246
+ }, /*#__PURE__*/React.createElement(context.Provider, {
247
+ value: api
248
+ }, children));
249
+ }
250
+ function useBounds() {
251
+ return React.useContext(context);
252
+ }
253
+
254
+ export { Bounds, useBounds };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),s=require("three"),o=require("three-mesh-bvh");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var a=n(e),c=u(t);const i=e=>e.isMesh;const d=c.forwardRef((({enabled:e=!0,firstHitOnly:t=!1,children:n,strategy:u=o.SAH,verbose:d=!1,setBoundingBox:f=!0,maxDepth:p=40,maxLeafTris:y=10,indirect:l=!1,...m},B)=>{const b=c.useRef(null),T=r.useThree((e=>e.raycaster));return c.useImperativeHandle(B,(()=>b.current),[]),c.useEffect((()=>{if(e){const e={strategy:u,verbose:d,setBoundingBox:f,maxDepth:p,maxLeafTris:y,indirect:l},r=b.current;return T.firstHitOnly=t,r.traverse((r=>{i(r)&&!r.geometry.boundsTree&&r.raycast===s.Mesh.prototype.raycast&&(r.raycast=o.acceleratedRaycast,r.geometry.computeBoundsTree=o.computeBoundsTree,r.geometry.disposeBoundsTree=o.disposeBoundsTree,r.geometry.computeBoundsTree(e))})),()=>{delete T.firstHitOnly,r.traverse((e=>{i(e)&&e.geometry.boundsTree&&(e.geometry.disposeBoundsTree(),e.raycast=s.Mesh.prototype.raycast)}))}}}),[]),c.createElement("group",a.default({ref:b},m),n)}));exports.Bvh=d,exports.useBVH=function(e,r){r={strategy:o.SAH,verbose:!1,setBoundingBox:!0,maxDepth:40,maxLeafTris:10,indirect:!1,...r},c.useEffect((()=>{if(e.current){e.current.raycast=o.acceleratedRaycast;const t=e.current.geometry;return t.computeBoundsTree=o.computeBoundsTree,t.disposeBoundsTree=o.disposeBoundsTree,t.computeBoundsTree(r),()=>{t.boundsTree&&t.disposeBoundsTree()}}}),[e,JSON.stringify(r)])};
package/core/Bvh.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { ThreeElements } from '@react-three/fiber';
2
+ import * as React from 'react';
3
+ import { Mesh, Group } from 'three';
4
+ import { SplitStrategy } from 'three-mesh-bvh';
5
+ import { ForwardRefComponent } from '../helpers/ts-utils';
6
+ export interface BVHOptions {
7
+ strategy?: SplitStrategy;
8
+ verbose?: boolean;
9
+ setBoundingBox?: boolean;
10
+ maxDepth?: number;
11
+ maxLeafTris?: number;
12
+ indirect?: boolean;
13
+ }
14
+ export type BvhProps = BVHOptions & ThreeElements['group'] & {
15
+ enabled?: boolean;
16
+ firstHitOnly?: boolean;
17
+ };
18
+ export declare function useBVH(mesh: React.RefObject<Mesh | undefined>, options?: BVHOptions): void;
19
+ export declare const Bvh: ForwardRefComponent<BvhProps, Group>;
package/core/Bvh.js ADDED
@@ -0,0 +1,92 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import { useThree } from '@react-three/fiber';
3
+ import * as React from 'react';
4
+ import { Mesh } from 'three';
5
+ import { SAH, acceleratedRaycast, computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh';
6
+
7
+ const isMesh = child => child.isMesh;
8
+
9
+ /**
10
+ * @deprecated Use the Bvh component instead
11
+ */
12
+ function useBVH(mesh, options) {
13
+ options = {
14
+ strategy: SAH,
15
+ verbose: false,
16
+ setBoundingBox: true,
17
+ maxDepth: 40,
18
+ maxLeafTris: 10,
19
+ indirect: false,
20
+ ...options
21
+ };
22
+ React.useEffect(() => {
23
+ if (mesh.current) {
24
+ mesh.current.raycast = acceleratedRaycast;
25
+ const geometry = mesh.current.geometry;
26
+ geometry.computeBoundsTree = computeBoundsTree;
27
+ geometry.disposeBoundsTree = disposeBoundsTree;
28
+ geometry.computeBoundsTree(options);
29
+ return () => {
30
+ if (geometry.boundsTree) {
31
+ geometry.disposeBoundsTree();
32
+ }
33
+ };
34
+ }
35
+ }, [mesh, JSON.stringify(options)]);
36
+ }
37
+ const Bvh = /* @__PURE__ */React.forwardRef(({
38
+ enabled = true,
39
+ firstHitOnly = false,
40
+ children,
41
+ strategy = SAH,
42
+ verbose = false,
43
+ setBoundingBox = true,
44
+ maxDepth = 40,
45
+ maxLeafTris = 10,
46
+ indirect = false,
47
+ ...props
48
+ }, fref) => {
49
+ const ref = React.useRef(null);
50
+ const raycaster = useThree(state => state.raycaster);
51
+ React.useImperativeHandle(fref, () => ref.current, []);
52
+ React.useEffect(() => {
53
+ if (enabled) {
54
+ const options = {
55
+ strategy,
56
+ verbose,
57
+ setBoundingBox,
58
+ maxDepth,
59
+ maxLeafTris,
60
+ indirect
61
+ };
62
+ const group = ref.current;
63
+ // This can only safely work if the component is used once, but there is no alternative.
64
+ // Hijacking the raycast method to do it for individual meshes is not an option as it would
65
+ // cost too much memory ...
66
+ raycaster.firstHitOnly = firstHitOnly;
67
+ group.traverse(child => {
68
+ // Only include meshes that do not yet have a boundsTree and whose raycast is standard issue
69
+ if (isMesh(child) && !child.geometry.boundsTree && child.raycast === Mesh.prototype.raycast) {
70
+ child.raycast = acceleratedRaycast;
71
+ child.geometry.computeBoundsTree = computeBoundsTree;
72
+ child.geometry.disposeBoundsTree = disposeBoundsTree;
73
+ child.geometry.computeBoundsTree(options);
74
+ }
75
+ });
76
+ return () => {
77
+ delete raycaster.firstHitOnly;
78
+ group.traverse(child => {
79
+ if (isMesh(child) && child.geometry.boundsTree) {
80
+ child.geometry.disposeBoundsTree();
81
+ child.raycast = Mesh.prototype.raycast;
82
+ }
83
+ });
84
+ };
85
+ }
86
+ }, []);
87
+ return /*#__PURE__*/React.createElement("group", _extends({
88
+ ref: ref
89
+ }, props), children);
90
+ });
91
+
92
+ export { Bvh, useBVH };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),o=require("camera-controls");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=l(e),u=a(r),c=l(o);const i=r.forwardRef(((e,o)=>{const{impl:l,camera:a,domElement:i,makeDefault:d,onControlStart:f,onControl:m,onControlEnd:v,onTransitionStart:p,onUpdate:E,onWake:h,onRest:L,onSleep:b,onStart:C,onEnd:T,onChange:g,regress:j,...x}=e,y=null!=l?l:c.default;r.useMemo((()=>{const e={Box3:t.Box3,MathUtils:{clamp:t.MathUtils.clamp},Matrix4:t.Matrix4,Quaternion:t.Quaternion,Raycaster:t.Raycaster,Sphere:t.Sphere,Spherical:t.Spherical,Vector2:t.Vector2,Vector3:t.Vector3,Vector4:t.Vector4};y.install({THREE:e}),n.extend({CameraControlsImpl:y})}),[y]);const M=n.useThree((e=>e.camera)),O=n.useThree((e=>e.gl)),S=n.useThree((e=>e.invalidate)),V=n.useThree((e=>e.events)),k=n.useThree((e=>e.setEvents)),q=n.useThree((e=>e.set)),w=n.useThree((e=>e.get)),R=n.useThree((e=>e.performance)),P=a||M,_=i||V.connected||O.domElement,U=r.useMemo((()=>new y(P)),[y,P]);return n.useFrame(((e,t)=>{U.update(t)}),-1),r.useEffect((()=>(U.connect(_),()=>{U.disconnect()})),[_,U]),r.useEffect((()=>{function e(){S(),j&&R.regress()}const t=t=>{e(),null==f||f(t),null==C||C(t)},r=t=>{e(),null==m||m(t),null==g||g(t)},n=e=>{null==v||v(e),null==T||T(e)},o=t=>{e(),null==p||p(t),null==g||g(t)},l=t=>{e(),null==E||E(t),null==g||g(t)},a=t=>{e(),null==h||h(t),null==g||g(t)},s=e=>{null==L||L(e)},u=e=>{null==b||b(e)};return U.addEventListener("controlstart",t),U.addEventListener("control",r),U.addEventListener("controlend",n),U.addEventListener("transitionstart",o),U.addEventListener("update",l),U.addEventListener("wake",a),U.addEventListener("rest",s),U.addEventListener("sleep",u),()=>{U.removeEventListener("controlstart",t),U.removeEventListener("control",r),U.removeEventListener("controlend",n),U.removeEventListener("transitionstart",o),U.removeEventListener("update",l),U.removeEventListener("wake",a),U.removeEventListener("rest",s),U.removeEventListener("sleep",u)}}),[U,S,k,j,R,f,m,v,p,E,h,L,b,g,C,T]),r.useEffect((()=>{if(d){const e=w().controls;return q({controls:U}),()=>q({controls:e})}}),[d,U]),u.createElement("primitive",s.default({ref:o,object:U},x))}));Object.defineProperty(exports,"CameraControlsImpl",{enumerable:!0,get:function(){return c.default}}),exports.CameraControls=i;
@@ -0,0 +1,48 @@
1
+ import { EventDispatcher, OrthographicCamera, PerspectiveCamera } from 'three';
2
+ import { ThreeElement } from '@react-three/fiber';
3
+ import CameraControlsImpl from 'camera-controls';
4
+ import { ForwardRefComponent, Overwrite } from '../helpers/ts-utils';
5
+ export type CameraControlsProps = Omit<Overwrite<ThreeElement<typeof CameraControlsImpl>, {
6
+ impl?: typeof CameraControlsImpl;
7
+ camera?: PerspectiveCamera | OrthographicCamera;
8
+ domElement?: HTMLElement;
9
+ makeDefault?: boolean;
10
+ onControlStart?: (e?: {
11
+ type: 'controlstart';
12
+ }) => void;
13
+ onControl?: (e?: {
14
+ type: 'control';
15
+ }) => void;
16
+ onControlEnd?: (e?: {
17
+ type: 'controlend';
18
+ }) => void;
19
+ onTransitionStart?: (e?: {
20
+ type: 'transitionstart';
21
+ }) => void;
22
+ onUpdate?: (e?: {
23
+ type: 'update';
24
+ }) => void;
25
+ onWake?: (e?: {
26
+ type: 'wake';
27
+ }) => void;
28
+ onRest?: (e?: {
29
+ type: 'rest';
30
+ }) => void;
31
+ onSleep?: (e?: {
32
+ type: 'sleep';
33
+ }) => void;
34
+ onStart?: (e?: {
35
+ type: 'controlstart';
36
+ }) => void;
37
+ onEnd?: (e?: {
38
+ type: 'controlend';
39
+ }) => void;
40
+ onChange?: (e?: {
41
+ type: string;
42
+ }) => void;
43
+ events?: boolean;
44
+ regress?: boolean;
45
+ }>, 'ref' | 'args' | keyof EventDispatcher>;
46
+ export declare const CameraControls: ForwardRefComponent<CameraControlsProps, CameraControlsImpl>;
47
+ export type CameraControls = CameraControlsImpl;
48
+ export { CameraControlsImpl };