three-stdlib 2.35.4 → 2.35.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (514) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +17 -20
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +17 -20
  4. package/_polyfill/CapsuleGeometry.js.map +1 -1
  5. package/_polyfill/constants.cjs +1 -1
  6. package/_polyfill/constants.cjs.map +1 -1
  7. package/_polyfill/constants.js +1 -1
  8. package/_polyfill/constants.js.map +1 -1
  9. package/animation/AnimationClipCreator.cjs +13 -13
  10. package/animation/AnimationClipCreator.cjs.map +1 -1
  11. package/animation/AnimationClipCreator.js +13 -13
  12. package/animation/AnimationClipCreator.js.map +1 -1
  13. package/animation/CCDIKSolver.cjs +11 -11
  14. package/animation/CCDIKSolver.cjs.map +1 -1
  15. package/animation/CCDIKSolver.js +12 -12
  16. package/animation/CCDIKSolver.js.map +1 -1
  17. package/animation/MMDAnimationHelper.cjs +1 -1
  18. package/animation/MMDAnimationHelper.cjs.map +1 -1
  19. package/animation/MMDAnimationHelper.js +1 -1
  20. package/animation/MMDAnimationHelper.js.map +1 -1
  21. package/animation/MMDPhysics.cjs +4 -4
  22. package/animation/MMDPhysics.cjs.map +1 -1
  23. package/animation/MMDPhysics.js +4 -4
  24. package/animation/MMDPhysics.js.map +1 -1
  25. package/controls/ArcballControls.cjs +2 -2
  26. package/controls/ArcballControls.cjs.map +1 -1
  27. package/controls/ArcballControls.js +3 -3
  28. package/controls/ArcballControls.js.map +1 -1
  29. package/controls/FirstPersonControls.cjs +1 -1
  30. package/controls/FirstPersonControls.cjs.map +1 -1
  31. package/controls/FirstPersonControls.js +1 -1
  32. package/controls/FirstPersonControls.js.map +1 -1
  33. package/controls/OrbitControls.cjs +2 -2
  34. package/controls/OrbitControls.cjs.map +1 -1
  35. package/controls/OrbitControls.js +3 -3
  36. package/controls/OrbitControls.js.map +1 -1
  37. package/controls/PointerLockControls.cjs +2 -2
  38. package/controls/PointerLockControls.cjs.map +1 -1
  39. package/controls/PointerLockControls.js +3 -3
  40. package/controls/PointerLockControls.js.map +1 -1
  41. package/csm/CSM.cjs +4 -4
  42. package/csm/CSM.cjs.map +1 -1
  43. package/csm/CSM.js +5 -5
  44. package/csm/CSM.js.map +1 -1
  45. package/csm/CSMFrustum.cjs +1 -1
  46. package/csm/CSMFrustum.cjs.map +1 -1
  47. package/csm/CSMFrustum.js +2 -2
  48. package/csm/CSMFrustum.js.map +1 -1
  49. package/deprecated/Geometry.cjs +715 -722
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +716 -723
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +1 -2
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +2 -3
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +1 -2
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +2 -3
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +1 -2
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +2 -3
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +122 -133
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +21 -23
  68. package/exporters/DRACOExporter.js +122 -133
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +167 -170
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +167 -170
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +515 -524
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +515 -524
  77. package/geometries/LightningStrike.js.map +1 -1
  78. package/geometries/RoundedBoxGeometry.cjs +1 -1
  79. package/geometries/RoundedBoxGeometry.cjs.map +1 -1
  80. package/geometries/RoundedBoxGeometry.js +2 -2
  81. package/geometries/RoundedBoxGeometry.js.map +1 -1
  82. package/helpers/RaycasterHelper.cjs +2 -2
  83. package/helpers/RaycasterHelper.cjs.map +1 -1
  84. package/helpers/RaycasterHelper.js +3 -3
  85. package/helpers/RaycasterHelper.js.map +1 -1
  86. package/helpers/VertexNormalsHelper.cjs +3 -3
  87. package/helpers/VertexNormalsHelper.cjs.map +1 -1
  88. package/helpers/VertexNormalsHelper.js +4 -4
  89. package/helpers/VertexNormalsHelper.js.map +1 -1
  90. package/helpers/VertexTangentsHelper.cjs +2 -2
  91. package/helpers/VertexTangentsHelper.cjs.map +1 -1
  92. package/helpers/VertexTangentsHelper.js +3 -3
  93. package/helpers/VertexTangentsHelper.js.map +1 -1
  94. package/interactive/InteractiveGroup.cjs +1 -1
  95. package/interactive/InteractiveGroup.cjs.map +1 -1
  96. package/interactive/InteractiveGroup.js +2 -2
  97. package/interactive/InteractiveGroup.js.map +1 -1
  98. package/interactive/SelectionBox.cjs +15 -15
  99. package/interactive/SelectionBox.cjs.map +1 -1
  100. package/interactive/SelectionBox.js +16 -16
  101. package/interactive/SelectionBox.js.map +1 -1
  102. package/libs/chevrotain.cjs +1 -1
  103. package/libs/chevrotain.cjs.map +1 -1
  104. package/libs/chevrotain.js +1 -1
  105. package/libs/chevrotain.js.map +1 -1
  106. package/libs/lottie.cjs +1 -1
  107. package/libs/lottie.cjs.map +1 -1
  108. package/libs/lottie.js +1 -1
  109. package/libs/lottie.js.map +1 -1
  110. package/libs/opentype.cjs +1 -1
  111. package/libs/opentype.cjs.map +1 -1
  112. package/libs/opentype.js +1 -1
  113. package/libs/opentype.js.map +1 -1
  114. package/lights/LightProbeGenerator.cjs +5 -5
  115. package/lights/LightProbeGenerator.cjs.map +1 -1
  116. package/lights/LightProbeGenerator.js +5 -5
  117. package/lights/LightProbeGenerator.js.map +1 -1
  118. package/lights/RectAreaLightUniformsLib.cjs +3 -3
  119. package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
  120. package/lights/RectAreaLightUniformsLib.js +3 -3
  121. package/lights/RectAreaLightUniformsLib.js.map +1 -1
  122. package/lines/LineMaterial.cjs +1 -2
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +2 -3
  125. package/lines/LineMaterial.js.map +1 -1
  126. package/lines/LineSegments2.cjs +13 -13
  127. package/lines/LineSegments2.cjs.map +1 -1
  128. package/lines/LineSegments2.js +14 -14
  129. package/lines/LineSegments2.js.map +1 -1
  130. package/lines/LineSegmentsGeometry.cjs +2 -2
  131. package/lines/LineSegmentsGeometry.cjs.map +1 -1
  132. package/lines/LineSegmentsGeometry.js +3 -3
  133. package/lines/LineSegmentsGeometry.js.map +1 -1
  134. package/lines/Wireframe.cjs +3 -3
  135. package/lines/Wireframe.cjs.map +1 -1
  136. package/lines/Wireframe.js +4 -4
  137. package/lines/Wireframe.js.map +1 -1
  138. package/loaders/BasisTextureLoader.cjs +435 -441
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +435 -441
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +1 -2
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +2 -3
  145. package/loaders/EXRLoader.js.map +1 -1
  146. package/loaders/FBXLoader.cjs +2 -2
  147. package/loaders/FBXLoader.cjs.map +1 -1
  148. package/loaders/FBXLoader.js +2 -2
  149. package/loaders/FBXLoader.js.map +1 -1
  150. package/loaders/FontLoader.cjs +2 -2
  151. package/loaders/FontLoader.cjs.map +1 -1
  152. package/loaders/FontLoader.d.ts +2 -2
  153. package/loaders/FontLoader.js +2 -2
  154. package/loaders/FontLoader.js.map +1 -1
  155. package/loaders/GLTFLoader.cjs +2 -2
  156. package/loaders/GLTFLoader.cjs.map +1 -1
  157. package/loaders/GLTFLoader.js +2 -2
  158. package/loaders/GLTFLoader.js.map +1 -1
  159. package/loaders/KTX2Loader.cjs +374 -377
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +374 -377
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +4 -5
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +5 -6
  166. package/loaders/LDrawLoader.js.map +1 -1
  167. package/loaders/OBJLoader.cjs +5 -5
  168. package/loaders/OBJLoader.cjs.map +1 -1
  169. package/loaders/OBJLoader.js +6 -6
  170. package/loaders/OBJLoader.js.map +1 -1
  171. package/loaders/PRWMLoader.cjs +43 -46
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +43 -46
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1688 -1694
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1688 -1694
  178. package/loaders/SVGLoader.js.map +1 -1
  179. package/loaders/XLoader.cjs +1 -1
  180. package/loaders/XLoader.cjs.map +1 -1
  181. package/loaders/XLoader.js +1 -1
  182. package/loaders/XLoader.js.map +1 -1
  183. package/math/Capsule.cjs +3 -3
  184. package/math/Capsule.cjs.map +1 -1
  185. package/math/Capsule.js +3 -3
  186. package/math/Capsule.js.map +1 -1
  187. package/math/ColorConverter.cjs +9 -9
  188. package/math/ColorConverter.cjs.map +1 -1
  189. package/math/ColorConverter.js +9 -9
  190. package/math/ColorConverter.js.map +1 -1
  191. package/math/ConvexHull.cjs +50 -53
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +50 -53
  194. package/math/ConvexHull.js.map +1 -1
  195. package/math/ImprovedNoise.cjs +1 -1
  196. package/math/ImprovedNoise.cjs.map +1 -1
  197. package/math/ImprovedNoise.js +1 -1
  198. package/math/ImprovedNoise.js.map +1 -1
  199. package/math/MeshSurfaceSampler.cjs +2 -2
  200. package/math/MeshSurfaceSampler.cjs.map +1 -1
  201. package/math/MeshSurfaceSampler.js +2 -2
  202. package/math/MeshSurfaceSampler.js.map +1 -1
  203. package/math/OBB.cjs +14 -14
  204. package/math/OBB.cjs.map +1 -1
  205. package/math/OBB.js +15 -15
  206. package/math/OBB.js.map +1 -1
  207. package/math/Octree.cjs +7 -7
  208. package/math/Octree.cjs.map +1 -1
  209. package/math/Octree.js +8 -8
  210. package/math/Octree.js.map +1 -1
  211. package/misc/ConvexObjectBreaker.cjs +268 -271
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +269 -272
  214. package/misc/ConvexObjectBreaker.js.map +1 -1
  215. package/misc/Gyroscope.cjs +6 -6
  216. package/misc/Gyroscope.cjs.map +1 -1
  217. package/misc/Gyroscope.js +7 -7
  218. package/misc/Gyroscope.js.map +1 -1
  219. package/modifiers/CurveModifier.cjs +1 -1
  220. package/modifiers/CurveModifier.cjs.map +1 -1
  221. package/modifiers/CurveModifier.js +2 -2
  222. package/modifiers/CurveModifier.js.map +1 -1
  223. package/modifiers/SimplifyModifier.cjs +2 -2
  224. package/modifiers/SimplifyModifier.cjs.map +1 -1
  225. package/modifiers/SimplifyModifier.js +2 -2
  226. package/modifiers/SimplifyModifier.js.map +1 -1
  227. package/objects/BatchedMesh.cjs +2 -2
  228. package/objects/BatchedMesh.cjs.map +1 -1
  229. package/objects/BatchedMesh.js +3 -3
  230. package/objects/BatchedMesh.js.map +1 -1
  231. package/objects/GroundProjectedEnv.cjs +1 -2
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +2 -3
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +206 -209
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +206 -209
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +146 -154
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +146 -154
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +180 -183
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +180 -183
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +161 -164
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +161 -164
  250. package/objects/Refractor.js.map +1 -1
  251. package/objects/ShadowMesh.cjs +1 -1
  252. package/objects/ShadowMesh.cjs.map +1 -1
  253. package/objects/ShadowMesh.js +2 -2
  254. package/objects/ShadowMesh.js.map +1 -1
  255. package/objects/Sky.cjs +32 -35
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +6 -100
  258. package/objects/Sky.js +32 -35
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +1 -2
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +2 -3
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +140 -143
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +140 -143
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/SAOPass.cjs +264 -267
  270. package/postprocessing/SAOPass.cjs.map +1 -1
  271. package/postprocessing/SAOPass.js +264 -267
  272. package/postprocessing/SAOPass.js.map +1 -1
  273. package/postprocessing/SSAOPass.cjs +250 -253
  274. package/postprocessing/SSAOPass.cjs.map +1 -1
  275. package/postprocessing/SSAOPass.js +250 -253
  276. package/postprocessing/SSAOPass.js.map +1 -1
  277. package/postprocessing/SSRPass.cjs +376 -379
  278. package/postprocessing/SSRPass.cjs.map +1 -1
  279. package/postprocessing/SSRPass.js +376 -379
  280. package/postprocessing/SSRPass.js.map +1 -1
  281. package/postprocessing/UnrealBloomPass.cjs +202 -205
  282. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  283. package/postprocessing/UnrealBloomPass.js +202 -205
  284. package/postprocessing/UnrealBloomPass.js.map +1 -1
  285. package/renderers/CSS2DRenderer.cjs +5 -5
  286. package/renderers/CSS2DRenderer.cjs.map +1 -1
  287. package/renderers/CSS2DRenderer.js +5 -5
  288. package/renderers/CSS2DRenderer.js.map +1 -1
  289. package/renderers/CSS3DRenderer.cjs +5 -5
  290. package/renderers/CSS3DRenderer.cjs.map +1 -1
  291. package/renderers/CSS3DRenderer.js +6 -6
  292. package/renderers/CSS3DRenderer.js.map +1 -1
  293. package/shaders/ACESFilmicToneMappingShader.cjs +46 -71
  294. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  295. package/shaders/ACESFilmicToneMappingShader.js +46 -71
  296. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  297. package/shaders/AfterimageShader.cjs +22 -41
  298. package/shaders/AfterimageShader.cjs.map +1 -1
  299. package/shaders/AfterimageShader.js +22 -41
  300. package/shaders/AfterimageShader.js.map +1 -1
  301. package/shaders/BasicShader.cjs +6 -20
  302. package/shaders/BasicShader.cjs.map +1 -1
  303. package/shaders/BasicShader.js +6 -20
  304. package/shaders/BasicShader.js.map +1 -1
  305. package/shaders/BleachBypassShader.cjs +26 -46
  306. package/shaders/BleachBypassShader.cjs.map +1 -1
  307. package/shaders/BleachBypassShader.js +26 -46
  308. package/shaders/BleachBypassShader.js.map +1 -1
  309. package/shaders/BlendShader.cjs +19 -33
  310. package/shaders/BlendShader.cjs.map +1 -1
  311. package/shaders/BlendShader.js +19 -33
  312. package/shaders/BlendShader.js.map +1 -1
  313. package/shaders/BokehShader.cjs +90 -117
  314. package/shaders/BokehShader.cjs.map +1 -1
  315. package/shaders/BokehShader.js +90 -117
  316. package/shaders/BokehShader.js.map +1 -1
  317. package/shaders/BokehShader2.cjs +232 -333
  318. package/shaders/BokehShader2.cjs.map +1 -1
  319. package/shaders/BokehShader2.js +232 -333
  320. package/shaders/BokehShader2.js.map +1 -1
  321. package/shaders/BrightnessContrastShader.cjs +22 -38
  322. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  323. package/shaders/BrightnessContrastShader.js +22 -38
  324. package/shaders/BrightnessContrastShader.js.map +1 -1
  325. package/shaders/ColorCorrectionShader.cjs +21 -35
  326. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  327. package/shaders/ColorCorrectionShader.js +21 -35
  328. package/shaders/ColorCorrectionShader.js.map +1 -1
  329. package/shaders/ColorifyShader.cjs +19 -34
  330. package/shaders/ColorifyShader.cjs.map +1 -1
  331. package/shaders/ColorifyShader.js +19 -34
  332. package/shaders/ColorifyShader.js.map +1 -1
  333. package/shaders/ConvolutionShader.cjs +24 -43
  334. package/shaders/ConvolutionShader.cjs.map +1 -1
  335. package/shaders/ConvolutionShader.js +24 -43
  336. package/shaders/ConvolutionShader.js.map +1 -1
  337. package/shaders/CopyShader.cjs +16 -30
  338. package/shaders/CopyShader.cjs.map +1 -1
  339. package/shaders/CopyShader.js +16 -30
  340. package/shaders/CopyShader.js.map +1 -1
  341. package/shaders/DOFMipMapShader.cjs +21 -38
  342. package/shaders/DOFMipMapShader.cjs.map +1 -1
  343. package/shaders/DOFMipMapShader.js +21 -38
  344. package/shaders/DOFMipMapShader.js.map +1 -1
  345. package/shaders/DepthLimitedBlurShader.cjs +69 -98
  346. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  347. package/shaders/DepthLimitedBlurShader.js +69 -98
  348. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  349. package/shaders/DigitalGlitch.cjs +59 -70
  350. package/shaders/DigitalGlitch.cjs.map +1 -1
  351. package/shaders/DigitalGlitch.js +59 -70
  352. package/shaders/DigitalGlitch.js.map +1 -1
  353. package/shaders/DotScreenShader.cjs +28 -49
  354. package/shaders/DotScreenShader.cjs.map +1 -1
  355. package/shaders/DotScreenShader.js +28 -49
  356. package/shaders/DotScreenShader.js.map +1 -1
  357. package/shaders/FXAAShader.cjs +1089 -1098
  358. package/shaders/FXAAShader.cjs.map +1 -1
  359. package/shaders/FXAAShader.js +1089 -1098
  360. package/shaders/FXAAShader.js.map +1 -1
  361. package/shaders/FilmShader.cjs +29 -57
  362. package/shaders/FilmShader.cjs.map +1 -1
  363. package/shaders/FilmShader.js +29 -57
  364. package/shaders/FilmShader.js.map +1 -1
  365. package/shaders/FocusShader.cjs +43 -70
  366. package/shaders/FocusShader.cjs.map +1 -1
  367. package/shaders/FocusShader.js +43 -70
  368. package/shaders/FocusShader.js.map +1 -1
  369. package/shaders/FreiChenShader.cjs +53 -74
  370. package/shaders/FreiChenShader.cjs.map +1 -1
  371. package/shaders/FreiChenShader.js +53 -74
  372. package/shaders/FreiChenShader.js.map +1 -1
  373. package/shaders/FresnelShader.cjs +35 -55
  374. package/shaders/FresnelShader.cjs.map +1 -1
  375. package/shaders/FresnelShader.js +35 -55
  376. package/shaders/FresnelShader.js.map +1 -1
  377. package/shaders/GammaCorrectionShader.cjs +19 -33
  378. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  379. package/shaders/GammaCorrectionShader.js +19 -33
  380. package/shaders/GammaCorrectionShader.js.map +1 -1
  381. package/shaders/GodRaysShader.cjs +116 -193
  382. package/shaders/GodRaysShader.cjs.map +1 -1
  383. package/shaders/GodRaysShader.js +116 -193
  384. package/shaders/GodRaysShader.js.map +1 -1
  385. package/shaders/HalftoneShader.cjs +192 -270
  386. package/shaders/HalftoneShader.cjs.map +1 -1
  387. package/shaders/HalftoneShader.js +192 -270
  388. package/shaders/HalftoneShader.js.map +1 -1
  389. package/shaders/HorizontalTiltShiftShader.cjs +27 -43
  390. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  391. package/shaders/HorizontalTiltShiftShader.js +27 -43
  392. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  393. package/shaders/HueSaturationShader.cjs +31 -47
  394. package/shaders/HueSaturationShader.cjs.map +1 -1
  395. package/shaders/HueSaturationShader.js +31 -47
  396. package/shaders/HueSaturationShader.js.map +1 -1
  397. package/shaders/KaleidoShader.cjs +24 -37
  398. package/shaders/KaleidoShader.cjs.map +1 -1
  399. package/shaders/KaleidoShader.js +24 -37
  400. package/shaders/KaleidoShader.js.map +1 -1
  401. package/shaders/LuminosityHighPassShader.cjs +24 -43
  402. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  403. package/shaders/LuminosityHighPassShader.js +24 -43
  404. package/shaders/LuminosityHighPassShader.js.map +1 -1
  405. package/shaders/LuminosityShader.cjs +17 -34
  406. package/shaders/LuminosityShader.cjs.map +1 -1
  407. package/shaders/LuminosityShader.js +17 -34
  408. package/shaders/LuminosityShader.js.map +1 -1
  409. package/shaders/MirrorShader.cjs +26 -39
  410. package/shaders/MirrorShader.cjs.map +1 -1
  411. package/shaders/MirrorShader.js +26 -39
  412. package/shaders/MirrorShader.js.map +1 -1
  413. package/shaders/NormalMapShader.cjs +21 -36
  414. package/shaders/NormalMapShader.cjs.map +1 -1
  415. package/shaders/NormalMapShader.js +21 -36
  416. package/shaders/NormalMapShader.js.map +1 -1
  417. package/shaders/ParallaxShader.cjs +97 -147
  418. package/shaders/ParallaxShader.cjs.map +1 -1
  419. package/shaders/ParallaxShader.js +97 -147
  420. package/shaders/ParallaxShader.js.map +1 -1
  421. package/shaders/PixelShader.cjs +18 -31
  422. package/shaders/PixelShader.cjs.map +1 -1
  423. package/shaders/PixelShader.js +18 -31
  424. package/shaders/PixelShader.js.map +1 -1
  425. package/shaders/RGBShiftShader.cjs +20 -33
  426. package/shaders/RGBShiftShader.cjs.map +1 -1
  427. package/shaders/RGBShiftShader.js +20 -33
  428. package/shaders/RGBShiftShader.js.map +1 -1
  429. package/shaders/SAOShader.cjs +117 -154
  430. package/shaders/SAOShader.cjs.map +1 -1
  431. package/shaders/SAOShader.js +117 -154
  432. package/shaders/SAOShader.js.map +1 -1
  433. package/shaders/SMAAShader.cjs +270 -358
  434. package/shaders/SMAAShader.cjs.map +1 -1
  435. package/shaders/SMAAShader.js +270 -358
  436. package/shaders/SMAAShader.js.map +1 -1
  437. package/shaders/SSAOShader.cjs +142 -236
  438. package/shaders/SSAOShader.cjs.map +1 -1
  439. package/shaders/SSAOShader.js +142 -236
  440. package/shaders/SSAOShader.js.map +1 -1
  441. package/shaders/SSRShader.cjs +4 -4
  442. package/shaders/SSRShader.cjs.map +1 -1
  443. package/shaders/SSRShader.js +4 -4
  444. package/shaders/SSRShader.js.map +1 -1
  445. package/shaders/SepiaShader.cjs +20 -36
  446. package/shaders/SepiaShader.cjs.map +1 -1
  447. package/shaders/SepiaShader.js +20 -36
  448. package/shaders/SepiaShader.js.map +1 -1
  449. package/shaders/SobelOperatorShader.cjs +37 -64
  450. package/shaders/SobelOperatorShader.cjs.map +1 -1
  451. package/shaders/SobelOperatorShader.js +37 -64
  452. package/shaders/SobelOperatorShader.js.map +1 -1
  453. package/shaders/TechnicolorShader.cjs +16 -29
  454. package/shaders/TechnicolorShader.cjs.map +1 -1
  455. package/shaders/TechnicolorShader.js +16 -29
  456. package/shaders/TechnicolorShader.js.map +1 -1
  457. package/shaders/ToneMapShader.cjs +35 -55
  458. package/shaders/ToneMapShader.cjs.map +1 -1
  459. package/shaders/ToneMapShader.js +35 -55
  460. package/shaders/ToneMapShader.js.map +1 -1
  461. package/shaders/ToonShader.cjs +165 -275
  462. package/shaders/ToonShader.cjs.map +1 -1
  463. package/shaders/ToonShader.js +165 -275
  464. package/shaders/ToonShader.js.map +1 -1
  465. package/shaders/TriangleBlurShader.cjs +27 -50
  466. package/shaders/TriangleBlurShader.cjs.map +1 -1
  467. package/shaders/TriangleBlurShader.js +27 -50
  468. package/shaders/TriangleBlurShader.js.map +1 -1
  469. package/shaders/UnpackDepthRGBAShader.cjs +17 -32
  470. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  471. package/shaders/UnpackDepthRGBAShader.js +17 -32
  472. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  473. package/shaders/VerticalTiltShiftShader.cjs +27 -43
  474. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  475. package/shaders/VerticalTiltShiftShader.js +27 -43
  476. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  477. package/shaders/VignetteShader.cjs +27 -43
  478. package/shaders/VignetteShader.cjs.map +1 -1
  479. package/shaders/VignetteShader.js +27 -43
  480. package/shaders/VignetteShader.js.map +1 -1
  481. package/shaders/VolumeShader.cjs +213 -264
  482. package/shaders/VolumeShader.cjs.map +1 -1
  483. package/shaders/VolumeShader.js +213 -264
  484. package/shaders/VolumeShader.js.map +1 -1
  485. package/shaders/WaterRefractionShader.cjs +35 -63
  486. package/shaders/WaterRefractionShader.cjs.map +1 -1
  487. package/shaders/WaterRefractionShader.js +35 -63
  488. package/shaders/WaterRefractionShader.js.map +1 -1
  489. package/utils/GeometryCompressionUtils.cjs +1 -2
  490. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  491. package/utils/GeometryCompressionUtils.js +2 -3
  492. package/utils/GeometryCompressionUtils.js.map +1 -1
  493. package/utils/RoughnessMipmapper.cjs +3 -3
  494. package/utils/RoughnessMipmapper.cjs.map +1 -1
  495. package/utils/RoughnessMipmapper.js +4 -4
  496. package/utils/RoughnessMipmapper.js.map +1 -1
  497. package/webxr/ARButton.cjs +106 -109
  498. package/webxr/ARButton.cjs.map +1 -1
  499. package/webxr/ARButton.d.ts +3 -4
  500. package/webxr/ARButton.js +106 -109
  501. package/webxr/ARButton.js.map +1 -1
  502. package/webxr/OculusHandPointerModel.cjs +2 -2
  503. package/webxr/OculusHandPointerModel.cjs.map +1 -1
  504. package/webxr/OculusHandPointerModel.js +2 -2
  505. package/webxr/OculusHandPointerModel.js.map +1 -1
  506. package/webxr/VRButton.cjs +95 -98
  507. package/webxr/VRButton.cjs.map +1 -1
  508. package/webxr/VRButton.d.ts +5 -6
  509. package/webxr/VRButton.js +95 -98
  510. package/webxr/VRButton.js.map +1 -1
  511. package/webxr/XRHandPrimitiveModel.cjs +2 -2
  512. package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
  513. package/webxr/XRHandPrimitiveModel.js +3 -3
  514. package/webxr/XRHandPrimitiveModel.js.map +1 -1
package/webxr/ARButton.js CHANGED
@@ -1,121 +1,118 @@
1
- const ARButton = /* @__PURE__ */ (() => {
2
- class ARButton2 {
3
- static createButton(renderer, sessionInit = {}) {
4
- const button = document.createElement("button");
5
- function showStartAR() {
6
- if (sessionInit.domOverlay === void 0) {
7
- const overlay = document.createElement("div");
8
- overlay.style.display = "none";
9
- document.body.appendChild(overlay);
10
- const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
11
- svg.setAttribute("width", "38px");
12
- svg.setAttribute("height", "38px");
13
- svg.style.position = "absolute";
14
- svg.style.right = "20px";
15
- svg.style.top = "20px";
16
- svg.addEventListener("click", function() {
17
- currentSession == null ? void 0 : currentSession.end();
18
- });
19
- overlay.appendChild(svg);
20
- const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
21
- path.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28");
22
- path.setAttribute("stroke", "#fff");
23
- path.setAttribute("stroke-width", "2px");
24
- svg.appendChild(path);
25
- if (sessionInit.optionalFeatures === void 0) {
26
- sessionInit.optionalFeatures = [];
27
- }
28
- sessionInit.optionalFeatures.push("dom-overlay");
29
- sessionInit.domOverlay = { root: overlay };
1
+ class ARButton {
2
+ static createButton(renderer, sessionInit = {}) {
3
+ const button = document.createElement("button");
4
+ function showStartAR() {
5
+ if (sessionInit.domOverlay === void 0) {
6
+ const overlay = document.createElement("div");
7
+ overlay.style.display = "none";
8
+ document.body.appendChild(overlay);
9
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
10
+ svg.setAttribute("width", "38px");
11
+ svg.setAttribute("height", "38px");
12
+ svg.style.position = "absolute";
13
+ svg.style.right = "20px";
14
+ svg.style.top = "20px";
15
+ svg.addEventListener("click", function() {
16
+ currentSession == null ? void 0 : currentSession.end();
17
+ });
18
+ overlay.appendChild(svg);
19
+ const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
20
+ path.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28");
21
+ path.setAttribute("stroke", "#fff");
22
+ path.setAttribute("stroke-width", "2px");
23
+ svg.appendChild(path);
24
+ if (sessionInit.optionalFeatures === void 0) {
25
+ sessionInit.optionalFeatures = [];
30
26
  }
31
- let currentSession = null;
32
- async function onSessionStarted(session) {
33
- session.addEventListener("end", onSessionEnded);
34
- renderer.xr.setReferenceSpaceType("local");
35
- await renderer.xr.setSession(session);
36
- button.textContent = "STOP AR";
37
- sessionInit.domOverlay.root.style.display = "";
38
- currentSession = session;
39
- }
40
- function onSessionEnded() {
41
- currentSession.removeEventListener("end", onSessionEnded);
42
- button.textContent = "START AR";
43
- sessionInit.domOverlay.root.style.display = "none";
44
- currentSession = null;
45
- }
46
- button.style.display = "";
47
- button.style.cursor = "pointer";
48
- button.style.left = "calc(50% - 50px)";
49
- button.style.width = "100px";
50
- button.textContent = "START AR";
51
- button.onmouseenter = () => {
52
- button.style.opacity = "1.0";
53
- };
54
- button.onmouseleave = () => {
55
- button.style.opacity = "0.5";
56
- };
57
- button.onclick = () => {
58
- if (currentSession === null) {
59
- navigator.xr.requestSession("immersive-ar", sessionInit).then(onSessionStarted);
60
- } else {
61
- currentSession.end();
62
- }
63
- };
27
+ sessionInit.optionalFeatures.push("dom-overlay");
28
+ sessionInit.domOverlay = { root: overlay };
64
29
  }
65
- function disableButton() {
66
- button.style.display = "";
67
- button.style.cursor = "auto";
68
- button.style.left = "calc(50% - 75px)";
69
- button.style.width = "150px";
70
- button.onmouseenter = null;
71
- button.onmouseleave = null;
72
- button.onclick = null;
30
+ let currentSession = null;
31
+ async function onSessionStarted(session) {
32
+ session.addEventListener("end", onSessionEnded);
33
+ renderer.xr.setReferenceSpaceType("local");
34
+ await renderer.xr.setSession(session);
35
+ button.textContent = "STOP AR";
36
+ sessionInit.domOverlay.root.style.display = "";
37
+ currentSession = session;
73
38
  }
74
- function showARNotSupported() {
75
- disableButton();
76
- button.textContent = "AR NOT SUPPORTED";
77
- }
78
- function stylizeElement(element) {
79
- element.style.position = "absolute";
80
- element.style.bottom = "20px";
81
- element.style.padding = "12px 6px";
82
- element.style.border = "1px solid #fff";
83
- element.style.borderRadius = "4px";
84
- element.style.background = "rgba(0,0,0,0.1)";
85
- element.style.color = "#fff";
86
- element.style.font = "normal 13px sans-serif";
87
- element.style.textAlign = "center";
88
- element.style.opacity = "0.5";
89
- element.style.outline = "none";
90
- element.style.zIndex = "999";
39
+ function onSessionEnded() {
40
+ currentSession.removeEventListener("end", onSessionEnded);
41
+ button.textContent = "START AR";
42
+ sessionInit.domOverlay.root.style.display = "none";
43
+ currentSession = null;
91
44
  }
92
- if ("xr" in navigator) {
93
- button.id = "ARButton";
94
- button.style.display = "none";
95
- stylizeElement(button);
96
- navigator.xr.isSessionSupported("immersive-ar").then(function(supported) {
97
- supported ? showStartAR() : showARNotSupported();
98
- }).catch(showARNotSupported);
99
- return button;
100
- } else {
101
- const message = document.createElement("a");
102
- if (window.isSecureContext === false) {
103
- message.href = document.location.href.replace(/^http:/, "https:");
104
- message.innerHTML = "WEBXR NEEDS HTTPS";
45
+ button.style.display = "";
46
+ button.style.cursor = "pointer";
47
+ button.style.left = "calc(50% - 50px)";
48
+ button.style.width = "100px";
49
+ button.textContent = "START AR";
50
+ button.onmouseenter = () => {
51
+ button.style.opacity = "1.0";
52
+ };
53
+ button.onmouseleave = () => {
54
+ button.style.opacity = "0.5";
55
+ };
56
+ button.onclick = () => {
57
+ if (currentSession === null) {
58
+ navigator.xr.requestSession("immersive-ar", sessionInit).then(onSessionStarted);
105
59
  } else {
106
- message.href = "https://immersiveweb.dev/";
107
- message.innerHTML = "WEBXR NOT AVAILABLE";
60
+ currentSession.end();
108
61
  }
109
- message.style.left = "calc(50% - 90px)";
110
- message.style.width = "180px";
111
- message.style.textDecoration = "none";
112
- stylizeElement(message);
113
- return message;
62
+ };
63
+ }
64
+ function disableButton() {
65
+ button.style.display = "";
66
+ button.style.cursor = "auto";
67
+ button.style.left = "calc(50% - 75px)";
68
+ button.style.width = "150px";
69
+ button.onmouseenter = null;
70
+ button.onmouseleave = null;
71
+ button.onclick = null;
72
+ }
73
+ function showARNotSupported() {
74
+ disableButton();
75
+ button.textContent = "AR NOT SUPPORTED";
76
+ }
77
+ function stylizeElement(element) {
78
+ element.style.position = "absolute";
79
+ element.style.bottom = "20px";
80
+ element.style.padding = "12px 6px";
81
+ element.style.border = "1px solid #fff";
82
+ element.style.borderRadius = "4px";
83
+ element.style.background = "rgba(0,0,0,0.1)";
84
+ element.style.color = "#fff";
85
+ element.style.font = "normal 13px sans-serif";
86
+ element.style.textAlign = "center";
87
+ element.style.opacity = "0.5";
88
+ element.style.outline = "none";
89
+ element.style.zIndex = "999";
90
+ }
91
+ if ("xr" in navigator) {
92
+ button.id = "ARButton";
93
+ button.style.display = "none";
94
+ stylizeElement(button);
95
+ navigator.xr.isSessionSupported("immersive-ar").then(function(supported) {
96
+ supported ? showStartAR() : showARNotSupported();
97
+ }).catch(showARNotSupported);
98
+ return button;
99
+ } else {
100
+ const message = document.createElement("a");
101
+ if (window.isSecureContext === false) {
102
+ message.href = document.location.href.replace(/^http:/, "https:");
103
+ message.innerHTML = "WEBXR NEEDS HTTPS";
104
+ } else {
105
+ message.href = "https://immersiveweb.dev/";
106
+ message.innerHTML = "WEBXR NOT AVAILABLE";
114
107
  }
108
+ message.style.left = "calc(50% - 90px)";
109
+ message.style.width = "180px";
110
+ message.style.textDecoration = "none";
111
+ stylizeElement(message);
112
+ return message;
115
113
  }
116
114
  }
117
- return ARButton2;
118
- })();
115
+ }
119
116
  export {
120
117
  ARButton
121
118
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ARButton.js","sources":["../../src/webxr/ARButton.ts"],"sourcesContent":["import { WebGLRenderer } from 'three'\n\nconst ARButton = /* @__PURE__ */ (() => {\n class ARButton {\n static createButton(\n renderer: WebGLRenderer,\n sessionInit: XRSessionInit = {},\n ): HTMLButtonElement | HTMLAnchorElement {\n const button = document.createElement('button')\n\n function showStartAR(/*device*/): void {\n if ((sessionInit as any).domOverlay === undefined) {\n const overlay = document.createElement('div')\n overlay.style.display = 'none'\n document.body.appendChild(overlay)\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', '38px')\n svg.setAttribute('height', '38px')\n svg.style.position = 'absolute'\n svg.style.right = '20px'\n svg.style.top = '20px'\n svg.addEventListener('click', function () {\n currentSession?.end()\n })\n overlay.appendChild(svg)\n\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n path.setAttribute('d', 'M 12,12 L 28,28 M 28,12 12,28')\n path.setAttribute('stroke', '#fff')\n path.setAttribute('stroke-width', '2px')\n svg.appendChild(path)\n\n if (sessionInit.optionalFeatures === undefined) {\n sessionInit.optionalFeatures = []\n }\n\n sessionInit.optionalFeatures.push('dom-overlay')\n ;(sessionInit as any).domOverlay = { root: overlay }\n }\n\n //\n\n let currentSession: XRSession | null = null\n\n async function onSessionStarted(session: XRSession): Promise<void> {\n session.addEventListener('end', onSessionEnded)\n\n renderer.xr.setReferenceSpaceType('local')\n\n await renderer.xr.setSession(session as any)\n\n button.textContent = 'STOP AR'\n ;(sessionInit as any).domOverlay!.root.style.display = ''\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/): void {\n currentSession!.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'START AR'\n ;(sessionInit as any).domOverlay!.root.style.display = 'none'\n\n currentSession = null\n }\n\n //\n\n button.style.display = ''\n\n button.style.cursor = 'pointer'\n button.style.left = 'calc(50% - 50px)'\n button.style.width = '100px'\n\n button.textContent = 'START AR'\n\n button.onmouseenter = (): void => {\n button.style.opacity = '1.0'\n }\n\n button.onmouseleave = (): void => {\n button.style.opacity = '0.5'\n }\n\n button.onclick = (): void => {\n if (currentSession === null) {\n ;(navigator as Navigator).xr!.requestSession('immersive-ar', sessionInit).then(onSessionStarted)\n } else {\n currentSession.end()\n }\n }\n }\n\n function disableButton(): void {\n button.style.display = ''\n\n button.style.cursor = 'auto'\n button.style.left = 'calc(50% - 75px)'\n button.style.width = '150px'\n\n button.onmouseenter = null\n button.onmouseleave = null\n\n button.onclick = null\n }\n\n function showARNotSupported(): void {\n disableButton()\n\n button.textContent = 'AR NOT SUPPORTED'\n }\n\n function stylizeElement(element: HTMLElement): void {\n element.style.position = 'absolute'\n element.style.bottom = '20px'\n element.style.padding = '12px 6px'\n element.style.border = '1px solid #fff'\n element.style.borderRadius = '4px'\n element.style.background = 'rgba(0,0,0,0.1)'\n element.style.color = '#fff'\n element.style.font = 'normal 13px sans-serif'\n element.style.textAlign = 'center'\n element.style.opacity = '0.5'\n element.style.outline = 'none'\n element.style.zIndex = '999'\n }\n\n if ('xr' in navigator) {\n button.id = 'ARButton'\n button.style.display = 'none'\n\n stylizeElement(button)\n\n // Query for session mode\n ;(navigator as Navigator)\n .xr!.isSessionSupported('immersive-ar')\n .then(function (supported: boolean) {\n supported ? showStartAR() : showARNotSupported()\n })\n .catch(showARNotSupported)\n\n return button\n } else {\n const message = document.createElement('a')\n\n if (window.isSecureContext === false) {\n message.href = document.location.href.replace(/^http:/, 'https:')\n message.innerHTML = 'WEBXR NEEDS HTTPS' // TODO Improve message\n } else {\n message.href = 'https://immersiveweb.dev/'\n message.innerHTML = 'WEBXR NOT AVAILABLE'\n }\n\n message.style.left = 'calc(50% - 90px)'\n message.style.width = '180px'\n message.style.textDecoration = 'none'\n\n stylizeElement(message)\n\n return message\n }\n }\n }\n\n return ARButton\n})()\n\nexport { ARButton }\n"],"names":["ARButton"],"mappings":"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"}
1
+ {"version":3,"file":"ARButton.js","sources":["../../src/webxr/ARButton.ts"],"sourcesContent":["import { WebGLRenderer } from 'three'\n\nclass ARButton {\n static createButton(renderer: WebGLRenderer, sessionInit: XRSessionInit = {}): HTMLButtonElement | HTMLAnchorElement {\n const button = document.createElement('button')\n\n function showStartAR(/*device*/): void {\n if ((sessionInit as any).domOverlay === undefined) {\n const overlay = document.createElement('div')\n overlay.style.display = 'none'\n document.body.appendChild(overlay)\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', '38px')\n svg.setAttribute('height', '38px')\n svg.style.position = 'absolute'\n svg.style.right = '20px'\n svg.style.top = '20px'\n svg.addEventListener('click', function () {\n currentSession?.end()\n })\n overlay.appendChild(svg)\n\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n path.setAttribute('d', 'M 12,12 L 28,28 M 28,12 12,28')\n path.setAttribute('stroke', '#fff')\n path.setAttribute('stroke-width', '2px')\n svg.appendChild(path)\n\n if (sessionInit.optionalFeatures === undefined) {\n sessionInit.optionalFeatures = []\n }\n\n sessionInit.optionalFeatures.push('dom-overlay')\n ;(sessionInit as any).domOverlay = { root: overlay }\n }\n\n //\n\n let currentSession: XRSession | null = null\n\n async function onSessionStarted(session: XRSession): Promise<void> {\n session.addEventListener('end', onSessionEnded)\n\n renderer.xr.setReferenceSpaceType('local')\n\n await renderer.xr.setSession(session as any)\n\n button.textContent = 'STOP AR'\n ;(sessionInit as any).domOverlay!.root.style.display = ''\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/): void {\n currentSession!.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'START AR'\n ;(sessionInit as any).domOverlay!.root.style.display = 'none'\n\n currentSession = null\n }\n\n //\n\n button.style.display = ''\n\n button.style.cursor = 'pointer'\n button.style.left = 'calc(50% - 50px)'\n button.style.width = '100px'\n\n button.textContent = 'START AR'\n\n button.onmouseenter = (): void => {\n button.style.opacity = '1.0'\n }\n\n button.onmouseleave = (): void => {\n button.style.opacity = '0.5'\n }\n\n button.onclick = (): void => {\n if (currentSession === null) {\n ;(navigator as Navigator).xr!.requestSession('immersive-ar', sessionInit).then(onSessionStarted)\n } else {\n currentSession.end()\n }\n }\n }\n\n function disableButton(): void {\n button.style.display = ''\n\n button.style.cursor = 'auto'\n button.style.left = 'calc(50% - 75px)'\n button.style.width = '150px'\n\n button.onmouseenter = null\n button.onmouseleave = null\n\n button.onclick = null\n }\n\n function showARNotSupported(): void {\n disableButton()\n\n button.textContent = 'AR NOT SUPPORTED'\n }\n\n function stylizeElement(element: HTMLElement): void {\n element.style.position = 'absolute'\n element.style.bottom = '20px'\n element.style.padding = '12px 6px'\n element.style.border = '1px solid #fff'\n element.style.borderRadius = '4px'\n element.style.background = 'rgba(0,0,0,0.1)'\n element.style.color = '#fff'\n element.style.font = 'normal 13px sans-serif'\n element.style.textAlign = 'center'\n element.style.opacity = '0.5'\n element.style.outline = 'none'\n element.style.zIndex = '999'\n }\n\n if ('xr' in navigator) {\n button.id = 'ARButton'\n button.style.display = 'none'\n\n stylizeElement(button)\n\n // Query for session mode\n ;(navigator as Navigator)\n .xr!.isSessionSupported('immersive-ar')\n .then(function (supported: boolean) {\n supported ? showStartAR() : showARNotSupported()\n })\n .catch(showARNotSupported)\n\n return button\n } else {\n const message = document.createElement('a')\n\n if (window.isSecureContext === false) {\n message.href = document.location.href.replace(/^http:/, 'https:')\n message.innerHTML = 'WEBXR NEEDS HTTPS' // TODO Improve message\n } else {\n message.href = 'https://immersiveweb.dev/'\n message.innerHTML = 'WEBXR NOT AVAILABLE'\n }\n\n message.style.left = 'calc(50% - 90px)'\n message.style.width = '180px'\n message.style.textDecoration = 'none'\n\n stylizeElement(message)\n\n return message\n }\n }\n}\n\nexport { ARButton }\n"],"names":[],"mappings":"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"}
@@ -31,8 +31,8 @@ const POINTER_LENGTH = 0.035;
31
31
  const POINTER_SEGMENTS = 16;
32
32
  const POINTER_RINGS = 12;
33
33
  const POINTER_HEMISPHERE_ANGLE = 110;
34
- const YAXIS = /* @__PURE__ */ new THREE__namespace.Vector3(0, 1, 0);
35
- const ZAXIS = /* @__PURE__ */ new THREE__namespace.Vector3(0, 0, 1);
34
+ const YAXIS = new THREE__namespace.Vector3(0, 1, 0);
35
+ const ZAXIS = new THREE__namespace.Vector3(0, 0, 1);
36
36
  const CURSOR_RADIUS = 0.02;
37
37
  const CURSOR_MAX_DISTANCE = 1.5;
38
38
  class OculusHandPointerModel extends THREE__namespace.Object3D {
@@ -1 +1 @@
1
- {"version":3,"file":"OculusHandPointerModel.cjs","sources":["../../src/webxr/OculusHandPointerModel.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst PINCH_MAX = 0.05\nconst PINCH_THRESHOLD = 0.02\nconst PINCH_MIN = 0.01\nconst POINTER_ADVANCE_MAX = 0.02\nconst POINTER_OPACITY_MAX = 1\nconst POINTER_OPACITY_MIN = 0.4\nconst POINTER_FRONT_RADIUS = 0.002\nconst POINTER_REAR_RADIUS = 0.01\nconst POINTER_REAR_RADIUS_MIN = 0.003\nconst POINTER_LENGTH = 0.035\nconst POINTER_SEGMENTS = 16\nconst POINTER_RINGS = 12\nconst POINTER_HEMISPHERE_ANGLE = 110\nconst YAXIS = /* @__PURE__ */ new THREE.Vector3(0, 1, 0)\nconst ZAXIS = /* @__PURE__ */ new THREE.Vector3(0, 0, 1)\n\nconst CURSOR_RADIUS = 0.02\nconst CURSOR_MAX_DISTANCE = 1.5\n\nclass OculusHandPointerModel extends THREE.Object3D {\n constructor(hand, controller) {\n super()\n\n this.hand = hand\n this.controller = controller\n\n // Unused\n this.motionController = null\n this.envMap = null\n this.mesh = null\n\n this.pointerGeometry = null\n this.pointerMesh = null\n this.pointerObject = null\n\n this.pinched = false\n this.attached = false\n\n this.cursorObject = null\n\n this.raycaster = null\n\n this._onConnected = this._onConnected.bind(this)\n this._onDisconnected = this._onDisconnected.bind(this)\n this.hand.addEventListener('connected', this._onConnected)\n this.hand.addEventListener('disconnected', this._onDisconnected)\n }\n\n _onConnected(event) {\n const xrInputSource = event.data\n if (xrInputSource.hand) {\n this.visible = true\n this.xrInputSource = xrInputSource\n\n this.createPointer()\n }\n }\n\n _onDisconnected() {\n this.visible = false\n this.xrInputSource = null\n\n this.pointerGeometry?.dispose()\n this.pointerMesh?.material.dispose()\n\n this.clear()\n }\n\n _drawVerticesRing(vertices, baseVector, ringIndex) {\n const segmentVector = baseVector.clone()\n for (var i = 0; i < POINTER_SEGMENTS; i++) {\n segmentVector.applyAxisAngle(ZAXIS, (Math.PI * 2) / POINTER_SEGMENTS)\n const vid = ringIndex * POINTER_SEGMENTS + i\n vertices[3 * vid] = segmentVector.x\n vertices[3 * vid + 1] = segmentVector.y\n vertices[3 * vid + 2] = segmentVector.z\n }\n }\n\n _updatePointerVertices(rearRadius) {\n const vertices = this.pointerGeometry.attributes.position.array\n // first ring for front face\n const frontFaceBase = new THREE.Vector3(POINTER_FRONT_RADIUS, 0, -1 * (POINTER_LENGTH - rearRadius))\n this._drawVerticesRing(vertices, frontFaceBase, 0)\n\n // rings for rear hemisphere\n const rearBase = new THREE.Vector3(\n Math.sin((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n Math.cos((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n 0,\n )\n for (var i = 0; i < POINTER_RINGS; i++) {\n this._drawVerticesRing(vertices, rearBase, i + 1)\n rearBase.applyAxisAngle(YAXIS, (Math.PI * POINTER_HEMISPHERE_ANGLE) / 180 / (POINTER_RINGS * -2))\n }\n\n // front and rear face center vertices\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n const frontCenter = new THREE.Vector3(0, 0, -1 * (POINTER_LENGTH - rearRadius))\n vertices[frontCenterIndex * 3] = frontCenter.x\n vertices[frontCenterIndex * 3 + 1] = frontCenter.y\n vertices[frontCenterIndex * 3 + 2] = frontCenter.z\n const rearCenter = new THREE.Vector3(0, 0, rearRadius)\n vertices[rearCenterIndex * 3] = rearCenter.x\n vertices[rearCenterIndex * 3 + 1] = rearCenter.y\n vertices[rearCenterIndex * 3 + 2] = rearCenter.z\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n // verticesNeedUpdate = true;\n }\n\n createPointer() {\n var i, j\n const vertices = new Array(((POINTER_RINGS + 1) * POINTER_SEGMENTS + 2) * 3).fill(0)\n // const vertices = [];\n const indices = []\n this.pointerGeometry = new THREE.BufferGeometry()\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n\n // construct faces to connect rings\n for (i = 0; i < POINTER_RINGS; i++) {\n for (j = 0; j < POINTER_SEGMENTS - 1; j++) {\n indices.push(i * POINTER_SEGMENTS + j, i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n indices.push(i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n }\n\n indices.push((i + 1) * POINTER_SEGMENTS - 1, i * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n indices.push(i * POINTER_SEGMENTS, (i + 1) * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n }\n\n // construct front and rear face\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n\n for (i = 0; i < POINTER_SEGMENTS - 1; i++) {\n indices.push(frontCenterIndex, i + 1, i)\n indices.push(rearCenterIndex, i + POINTER_SEGMENTS * POINTER_RINGS, i + POINTER_SEGMENTS * POINTER_RINGS + 1)\n }\n\n indices.push(frontCenterIndex, 0, POINTER_SEGMENTS - 1)\n indices.push(rearCenterIndex, POINTER_SEGMENTS * (POINTER_RINGS + 1) - 1, POINTER_SEGMENTS * POINTER_RINGS)\n\n const material = new THREE.MeshBasicMaterial()\n material.transparent = true\n material.opacity = POINTER_OPACITY_MIN\n\n this.pointerGeometry.setIndex(indices)\n\n this.pointerMesh = new THREE.Mesh(this.pointerGeometry, material)\n\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerObject = new THREE.Object3D()\n this.pointerObject.add(this.pointerMesh)\n\n this.raycaster = new THREE.Raycaster()\n\n // create cursor\n const cursorGeometry = new THREE.SphereGeometry(CURSOR_RADIUS, 10, 10)\n const cursorMaterial = new THREE.MeshBasicMaterial()\n cursorMaterial.transparent = true\n cursorMaterial.opacity = POINTER_OPACITY_MIN\n\n this.cursorObject = new THREE.Mesh(cursorGeometry, cursorMaterial)\n this.pointerObject.add(this.cursorObject)\n\n this.add(this.pointerObject)\n }\n\n _updateRaycaster() {\n if (this.raycaster) {\n const pointerMatrix = this.pointerObject.matrixWorld\n const tempMatrix = new THREE.Matrix4()\n tempMatrix.identity().extractRotation(pointerMatrix)\n this.raycaster.ray.origin.setFromMatrixPosition(pointerMatrix)\n this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix)\n }\n }\n\n _updatePointer() {\n this.pointerObject.visible = this.controller.visible\n const indexTip = this.hand.joints['index-finger-tip']\n const thumbTip = this.hand.joints['thumb-tip']\n const distance = indexTip.position.distanceTo(thumbTip.position)\n const position = indexTip.position.clone().add(thumbTip.position).multiplyScalar(0.5)\n this.pointerObject.position.copy(position)\n this.pointerObject.quaternion.copy(this.controller.quaternion)\n\n this.pinched = distance <= PINCH_THRESHOLD\n\n const pinchScale = (distance - PINCH_MIN) / (PINCH_MAX - PINCH_MIN)\n const focusScale = (distance - PINCH_MIN) / (PINCH_THRESHOLD - PINCH_MIN)\n if (pinchScale > 1) {\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n } else if (pinchScale > 0) {\n const rearRadius = (POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN) * pinchScale + POINTER_REAR_RADIUS_MIN\n this._updatePointerVertices(rearRadius)\n if (focusScale < 1) {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius - (1 - focusScale) * POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity =\n POINTER_OPACITY_MIN + (1 - focusScale) * (POINTER_OPACITY_MAX - POINTER_OPACITY_MIN)\n } else {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n }\n } else {\n this._updatePointerVertices(POINTER_REAR_RADIUS_MIN)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MAX\n }\n\n this.cursorObject.material.opacity = this.pointerMesh.material.opacity\n }\n\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force)\n if (this.pointerGeometry) {\n this._updatePointer()\n this._updateRaycaster()\n }\n }\n\n isPinched() {\n return this.pinched\n }\n\n setAttached(attached) {\n this.attached = attached\n }\n\n isAttached() {\n return this.attached\n }\n\n intersectObject(object, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObject(object, recursive)\n }\n }\n\n intersectObjects(objects, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObjects(objects, recursive)\n }\n }\n\n checkIntersections(objects, recursive = false) {\n if (this.raycaster && !this.attached) {\n const intersections = this.raycaster.intersectObjects(objects, recursive)\n const direction = new THREE.Vector3(0, 0, -1)\n if (intersections.length > 0) {\n const intersection = intersections[0]\n const distance = intersection.distance\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n } else {\n this.cursorObject.position.copy(direction.multiplyScalar(CURSOR_MAX_DISTANCE))\n }\n }\n }\n\n setCursor(distance) {\n const direction = new THREE.Vector3(0, 0, -1)\n if (this.raycaster && !this.attached) {\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n }\n }\n\n dispose() {\n this._onDisconnected()\n this.hand.removeEventListener('connected', this._onConnected)\n this.hand.removeEventListener('disconnected', this._onDisconnected)\n }\n}\n\nexport { OculusHandPointerModel }\n"],"names":["THREE"],"mappings":"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"}
1
+ {"version":3,"file":"OculusHandPointerModel.cjs","sources":["../../src/webxr/OculusHandPointerModel.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst PINCH_MAX = 0.05\nconst PINCH_THRESHOLD = 0.02\nconst PINCH_MIN = 0.01\nconst POINTER_ADVANCE_MAX = 0.02\nconst POINTER_OPACITY_MAX = 1\nconst POINTER_OPACITY_MIN = 0.4\nconst POINTER_FRONT_RADIUS = 0.002\nconst POINTER_REAR_RADIUS = 0.01\nconst POINTER_REAR_RADIUS_MIN = 0.003\nconst POINTER_LENGTH = 0.035\nconst POINTER_SEGMENTS = 16\nconst POINTER_RINGS = 12\nconst POINTER_HEMISPHERE_ANGLE = 110\nconst YAXIS = new THREE.Vector3(0, 1, 0)\nconst ZAXIS = new THREE.Vector3(0, 0, 1)\n\nconst CURSOR_RADIUS = 0.02\nconst CURSOR_MAX_DISTANCE = 1.5\n\nclass OculusHandPointerModel extends THREE.Object3D {\n constructor(hand, controller) {\n super()\n\n this.hand = hand\n this.controller = controller\n\n // Unused\n this.motionController = null\n this.envMap = null\n this.mesh = null\n\n this.pointerGeometry = null\n this.pointerMesh = null\n this.pointerObject = null\n\n this.pinched = false\n this.attached = false\n\n this.cursorObject = null\n\n this.raycaster = null\n\n this._onConnected = this._onConnected.bind(this)\n this._onDisconnected = this._onDisconnected.bind(this)\n this.hand.addEventListener('connected', this._onConnected)\n this.hand.addEventListener('disconnected', this._onDisconnected)\n }\n\n _onConnected(event) {\n const xrInputSource = event.data\n if (xrInputSource.hand) {\n this.visible = true\n this.xrInputSource = xrInputSource\n\n this.createPointer()\n }\n }\n\n _onDisconnected() {\n this.visible = false\n this.xrInputSource = null\n\n this.pointerGeometry?.dispose()\n this.pointerMesh?.material.dispose()\n\n this.clear()\n }\n\n _drawVerticesRing(vertices, baseVector, ringIndex) {\n const segmentVector = baseVector.clone()\n for (var i = 0; i < POINTER_SEGMENTS; i++) {\n segmentVector.applyAxisAngle(ZAXIS, (Math.PI * 2) / POINTER_SEGMENTS)\n const vid = ringIndex * POINTER_SEGMENTS + i\n vertices[3 * vid] = segmentVector.x\n vertices[3 * vid + 1] = segmentVector.y\n vertices[3 * vid + 2] = segmentVector.z\n }\n }\n\n _updatePointerVertices(rearRadius) {\n const vertices = this.pointerGeometry.attributes.position.array\n // first ring for front face\n const frontFaceBase = new THREE.Vector3(POINTER_FRONT_RADIUS, 0, -1 * (POINTER_LENGTH - rearRadius))\n this._drawVerticesRing(vertices, frontFaceBase, 0)\n\n // rings for rear hemisphere\n const rearBase = new THREE.Vector3(\n Math.sin((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n Math.cos((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n 0,\n )\n for (var i = 0; i < POINTER_RINGS; i++) {\n this._drawVerticesRing(vertices, rearBase, i + 1)\n rearBase.applyAxisAngle(YAXIS, (Math.PI * POINTER_HEMISPHERE_ANGLE) / 180 / (POINTER_RINGS * -2))\n }\n\n // front and rear face center vertices\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n const frontCenter = new THREE.Vector3(0, 0, -1 * (POINTER_LENGTH - rearRadius))\n vertices[frontCenterIndex * 3] = frontCenter.x\n vertices[frontCenterIndex * 3 + 1] = frontCenter.y\n vertices[frontCenterIndex * 3 + 2] = frontCenter.z\n const rearCenter = new THREE.Vector3(0, 0, rearRadius)\n vertices[rearCenterIndex * 3] = rearCenter.x\n vertices[rearCenterIndex * 3 + 1] = rearCenter.y\n vertices[rearCenterIndex * 3 + 2] = rearCenter.z\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n // verticesNeedUpdate = true;\n }\n\n createPointer() {\n var i, j\n const vertices = new Array(((POINTER_RINGS + 1) * POINTER_SEGMENTS + 2) * 3).fill(0)\n // const vertices = [];\n const indices = []\n this.pointerGeometry = new THREE.BufferGeometry()\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n\n // construct faces to connect rings\n for (i = 0; i < POINTER_RINGS; i++) {\n for (j = 0; j < POINTER_SEGMENTS - 1; j++) {\n indices.push(i * POINTER_SEGMENTS + j, i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n indices.push(i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n }\n\n indices.push((i + 1) * POINTER_SEGMENTS - 1, i * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n indices.push(i * POINTER_SEGMENTS, (i + 1) * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n }\n\n // construct front and rear face\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n\n for (i = 0; i < POINTER_SEGMENTS - 1; i++) {\n indices.push(frontCenterIndex, i + 1, i)\n indices.push(rearCenterIndex, i + POINTER_SEGMENTS * POINTER_RINGS, i + POINTER_SEGMENTS * POINTER_RINGS + 1)\n }\n\n indices.push(frontCenterIndex, 0, POINTER_SEGMENTS - 1)\n indices.push(rearCenterIndex, POINTER_SEGMENTS * (POINTER_RINGS + 1) - 1, POINTER_SEGMENTS * POINTER_RINGS)\n\n const material = new THREE.MeshBasicMaterial()\n material.transparent = true\n material.opacity = POINTER_OPACITY_MIN\n\n this.pointerGeometry.setIndex(indices)\n\n this.pointerMesh = new THREE.Mesh(this.pointerGeometry, material)\n\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerObject = new THREE.Object3D()\n this.pointerObject.add(this.pointerMesh)\n\n this.raycaster = new THREE.Raycaster()\n\n // create cursor\n const cursorGeometry = new THREE.SphereGeometry(CURSOR_RADIUS, 10, 10)\n const cursorMaterial = new THREE.MeshBasicMaterial()\n cursorMaterial.transparent = true\n cursorMaterial.opacity = POINTER_OPACITY_MIN\n\n this.cursorObject = new THREE.Mesh(cursorGeometry, cursorMaterial)\n this.pointerObject.add(this.cursorObject)\n\n this.add(this.pointerObject)\n }\n\n _updateRaycaster() {\n if (this.raycaster) {\n const pointerMatrix = this.pointerObject.matrixWorld\n const tempMatrix = new THREE.Matrix4()\n tempMatrix.identity().extractRotation(pointerMatrix)\n this.raycaster.ray.origin.setFromMatrixPosition(pointerMatrix)\n this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix)\n }\n }\n\n _updatePointer() {\n this.pointerObject.visible = this.controller.visible\n const indexTip = this.hand.joints['index-finger-tip']\n const thumbTip = this.hand.joints['thumb-tip']\n const distance = indexTip.position.distanceTo(thumbTip.position)\n const position = indexTip.position.clone().add(thumbTip.position).multiplyScalar(0.5)\n this.pointerObject.position.copy(position)\n this.pointerObject.quaternion.copy(this.controller.quaternion)\n\n this.pinched = distance <= PINCH_THRESHOLD\n\n const pinchScale = (distance - PINCH_MIN) / (PINCH_MAX - PINCH_MIN)\n const focusScale = (distance - PINCH_MIN) / (PINCH_THRESHOLD - PINCH_MIN)\n if (pinchScale > 1) {\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n } else if (pinchScale > 0) {\n const rearRadius = (POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN) * pinchScale + POINTER_REAR_RADIUS_MIN\n this._updatePointerVertices(rearRadius)\n if (focusScale < 1) {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius - (1 - focusScale) * POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity =\n POINTER_OPACITY_MIN + (1 - focusScale) * (POINTER_OPACITY_MAX - POINTER_OPACITY_MIN)\n } else {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n }\n } else {\n this._updatePointerVertices(POINTER_REAR_RADIUS_MIN)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MAX\n }\n\n this.cursorObject.material.opacity = this.pointerMesh.material.opacity\n }\n\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force)\n if (this.pointerGeometry) {\n this._updatePointer()\n this._updateRaycaster()\n }\n }\n\n isPinched() {\n return this.pinched\n }\n\n setAttached(attached) {\n this.attached = attached\n }\n\n isAttached() {\n return this.attached\n }\n\n intersectObject(object, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObject(object, recursive)\n }\n }\n\n intersectObjects(objects, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObjects(objects, recursive)\n }\n }\n\n checkIntersections(objects, recursive = false) {\n if (this.raycaster && !this.attached) {\n const intersections = this.raycaster.intersectObjects(objects, recursive)\n const direction = new THREE.Vector3(0, 0, -1)\n if (intersections.length > 0) {\n const intersection = intersections[0]\n const distance = intersection.distance\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n } else {\n this.cursorObject.position.copy(direction.multiplyScalar(CURSOR_MAX_DISTANCE))\n }\n }\n }\n\n setCursor(distance) {\n const direction = new THREE.Vector3(0, 0, -1)\n if (this.raycaster && !this.attached) {\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n }\n }\n\n dispose() {\n this._onDisconnected()\n this.hand.removeEventListener('connected', this._onConnected)\n this.hand.removeEventListener('disconnected', this._onDisconnected)\n }\n}\n\nexport { OculusHandPointerModel }\n"],"names":["THREE"],"mappings":"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"}
@@ -12,8 +12,8 @@ const POINTER_LENGTH = 0.035;
12
12
  const POINTER_SEGMENTS = 16;
13
13
  const POINTER_RINGS = 12;
14
14
  const POINTER_HEMISPHERE_ANGLE = 110;
15
- const YAXIS = /* @__PURE__ */ new THREE.Vector3(0, 1, 0);
16
- const ZAXIS = /* @__PURE__ */ new THREE.Vector3(0, 0, 1);
15
+ const YAXIS = new THREE.Vector3(0, 1, 0);
16
+ const ZAXIS = new THREE.Vector3(0, 0, 1);
17
17
  const CURSOR_RADIUS = 0.02;
18
18
  const CURSOR_MAX_DISTANCE = 1.5;
19
19
  class OculusHandPointerModel extends THREE.Object3D {
@@ -1 +1 @@
1
- {"version":3,"file":"OculusHandPointerModel.js","sources":["../../src/webxr/OculusHandPointerModel.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst PINCH_MAX = 0.05\nconst PINCH_THRESHOLD = 0.02\nconst PINCH_MIN = 0.01\nconst POINTER_ADVANCE_MAX = 0.02\nconst POINTER_OPACITY_MAX = 1\nconst POINTER_OPACITY_MIN = 0.4\nconst POINTER_FRONT_RADIUS = 0.002\nconst POINTER_REAR_RADIUS = 0.01\nconst POINTER_REAR_RADIUS_MIN = 0.003\nconst POINTER_LENGTH = 0.035\nconst POINTER_SEGMENTS = 16\nconst POINTER_RINGS = 12\nconst POINTER_HEMISPHERE_ANGLE = 110\nconst YAXIS = /* @__PURE__ */ new THREE.Vector3(0, 1, 0)\nconst ZAXIS = /* @__PURE__ */ new THREE.Vector3(0, 0, 1)\n\nconst CURSOR_RADIUS = 0.02\nconst CURSOR_MAX_DISTANCE = 1.5\n\nclass OculusHandPointerModel extends THREE.Object3D {\n constructor(hand, controller) {\n super()\n\n this.hand = hand\n this.controller = controller\n\n // Unused\n this.motionController = null\n this.envMap = null\n this.mesh = null\n\n this.pointerGeometry = null\n this.pointerMesh = null\n this.pointerObject = null\n\n this.pinched = false\n this.attached = false\n\n this.cursorObject = null\n\n this.raycaster = null\n\n this._onConnected = this._onConnected.bind(this)\n this._onDisconnected = this._onDisconnected.bind(this)\n this.hand.addEventListener('connected', this._onConnected)\n this.hand.addEventListener('disconnected', this._onDisconnected)\n }\n\n _onConnected(event) {\n const xrInputSource = event.data\n if (xrInputSource.hand) {\n this.visible = true\n this.xrInputSource = xrInputSource\n\n this.createPointer()\n }\n }\n\n _onDisconnected() {\n this.visible = false\n this.xrInputSource = null\n\n this.pointerGeometry?.dispose()\n this.pointerMesh?.material.dispose()\n\n this.clear()\n }\n\n _drawVerticesRing(vertices, baseVector, ringIndex) {\n const segmentVector = baseVector.clone()\n for (var i = 0; i < POINTER_SEGMENTS; i++) {\n segmentVector.applyAxisAngle(ZAXIS, (Math.PI * 2) / POINTER_SEGMENTS)\n const vid = ringIndex * POINTER_SEGMENTS + i\n vertices[3 * vid] = segmentVector.x\n vertices[3 * vid + 1] = segmentVector.y\n vertices[3 * vid + 2] = segmentVector.z\n }\n }\n\n _updatePointerVertices(rearRadius) {\n const vertices = this.pointerGeometry.attributes.position.array\n // first ring for front face\n const frontFaceBase = new THREE.Vector3(POINTER_FRONT_RADIUS, 0, -1 * (POINTER_LENGTH - rearRadius))\n this._drawVerticesRing(vertices, frontFaceBase, 0)\n\n // rings for rear hemisphere\n const rearBase = new THREE.Vector3(\n Math.sin((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n Math.cos((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n 0,\n )\n for (var i = 0; i < POINTER_RINGS; i++) {\n this._drawVerticesRing(vertices, rearBase, i + 1)\n rearBase.applyAxisAngle(YAXIS, (Math.PI * POINTER_HEMISPHERE_ANGLE) / 180 / (POINTER_RINGS * -2))\n }\n\n // front and rear face center vertices\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n const frontCenter = new THREE.Vector3(0, 0, -1 * (POINTER_LENGTH - rearRadius))\n vertices[frontCenterIndex * 3] = frontCenter.x\n vertices[frontCenterIndex * 3 + 1] = frontCenter.y\n vertices[frontCenterIndex * 3 + 2] = frontCenter.z\n const rearCenter = new THREE.Vector3(0, 0, rearRadius)\n vertices[rearCenterIndex * 3] = rearCenter.x\n vertices[rearCenterIndex * 3 + 1] = rearCenter.y\n vertices[rearCenterIndex * 3 + 2] = rearCenter.z\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n // verticesNeedUpdate = true;\n }\n\n createPointer() {\n var i, j\n const vertices = new Array(((POINTER_RINGS + 1) * POINTER_SEGMENTS + 2) * 3).fill(0)\n // const vertices = [];\n const indices = []\n this.pointerGeometry = new THREE.BufferGeometry()\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n\n // construct faces to connect rings\n for (i = 0; i < POINTER_RINGS; i++) {\n for (j = 0; j < POINTER_SEGMENTS - 1; j++) {\n indices.push(i * POINTER_SEGMENTS + j, i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n indices.push(i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n }\n\n indices.push((i + 1) * POINTER_SEGMENTS - 1, i * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n indices.push(i * POINTER_SEGMENTS, (i + 1) * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n }\n\n // construct front and rear face\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n\n for (i = 0; i < POINTER_SEGMENTS - 1; i++) {\n indices.push(frontCenterIndex, i + 1, i)\n indices.push(rearCenterIndex, i + POINTER_SEGMENTS * POINTER_RINGS, i + POINTER_SEGMENTS * POINTER_RINGS + 1)\n }\n\n indices.push(frontCenterIndex, 0, POINTER_SEGMENTS - 1)\n indices.push(rearCenterIndex, POINTER_SEGMENTS * (POINTER_RINGS + 1) - 1, POINTER_SEGMENTS * POINTER_RINGS)\n\n const material = new THREE.MeshBasicMaterial()\n material.transparent = true\n material.opacity = POINTER_OPACITY_MIN\n\n this.pointerGeometry.setIndex(indices)\n\n this.pointerMesh = new THREE.Mesh(this.pointerGeometry, material)\n\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerObject = new THREE.Object3D()\n this.pointerObject.add(this.pointerMesh)\n\n this.raycaster = new THREE.Raycaster()\n\n // create cursor\n const cursorGeometry = new THREE.SphereGeometry(CURSOR_RADIUS, 10, 10)\n const cursorMaterial = new THREE.MeshBasicMaterial()\n cursorMaterial.transparent = true\n cursorMaterial.opacity = POINTER_OPACITY_MIN\n\n this.cursorObject = new THREE.Mesh(cursorGeometry, cursorMaterial)\n this.pointerObject.add(this.cursorObject)\n\n this.add(this.pointerObject)\n }\n\n _updateRaycaster() {\n if (this.raycaster) {\n const pointerMatrix = this.pointerObject.matrixWorld\n const tempMatrix = new THREE.Matrix4()\n tempMatrix.identity().extractRotation(pointerMatrix)\n this.raycaster.ray.origin.setFromMatrixPosition(pointerMatrix)\n this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix)\n }\n }\n\n _updatePointer() {\n this.pointerObject.visible = this.controller.visible\n const indexTip = this.hand.joints['index-finger-tip']\n const thumbTip = this.hand.joints['thumb-tip']\n const distance = indexTip.position.distanceTo(thumbTip.position)\n const position = indexTip.position.clone().add(thumbTip.position).multiplyScalar(0.5)\n this.pointerObject.position.copy(position)\n this.pointerObject.quaternion.copy(this.controller.quaternion)\n\n this.pinched = distance <= PINCH_THRESHOLD\n\n const pinchScale = (distance - PINCH_MIN) / (PINCH_MAX - PINCH_MIN)\n const focusScale = (distance - PINCH_MIN) / (PINCH_THRESHOLD - PINCH_MIN)\n if (pinchScale > 1) {\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n } else if (pinchScale > 0) {\n const rearRadius = (POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN) * pinchScale + POINTER_REAR_RADIUS_MIN\n this._updatePointerVertices(rearRadius)\n if (focusScale < 1) {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius - (1 - focusScale) * POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity =\n POINTER_OPACITY_MIN + (1 - focusScale) * (POINTER_OPACITY_MAX - POINTER_OPACITY_MIN)\n } else {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n }\n } else {\n this._updatePointerVertices(POINTER_REAR_RADIUS_MIN)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MAX\n }\n\n this.cursorObject.material.opacity = this.pointerMesh.material.opacity\n }\n\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force)\n if (this.pointerGeometry) {\n this._updatePointer()\n this._updateRaycaster()\n }\n }\n\n isPinched() {\n return this.pinched\n }\n\n setAttached(attached) {\n this.attached = attached\n }\n\n isAttached() {\n return this.attached\n }\n\n intersectObject(object, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObject(object, recursive)\n }\n }\n\n intersectObjects(objects, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObjects(objects, recursive)\n }\n }\n\n checkIntersections(objects, recursive = false) {\n if (this.raycaster && !this.attached) {\n const intersections = this.raycaster.intersectObjects(objects, recursive)\n const direction = new THREE.Vector3(0, 0, -1)\n if (intersections.length > 0) {\n const intersection = intersections[0]\n const distance = intersection.distance\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n } else {\n this.cursorObject.position.copy(direction.multiplyScalar(CURSOR_MAX_DISTANCE))\n }\n }\n }\n\n setCursor(distance) {\n const direction = new THREE.Vector3(0, 0, -1)\n if (this.raycaster && !this.attached) {\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n }\n }\n\n dispose() {\n this._onDisconnected()\n this.hand.removeEventListener('connected', this._onConnected)\n this.hand.removeEventListener('disconnected', this._onDisconnected)\n }\n}\n\nexport { OculusHandPointerModel }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OculusHandPointerModel.js","sources":["../../src/webxr/OculusHandPointerModel.js"],"sourcesContent":["import * as THREE from 'three'\n\nconst PINCH_MAX = 0.05\nconst PINCH_THRESHOLD = 0.02\nconst PINCH_MIN = 0.01\nconst POINTER_ADVANCE_MAX = 0.02\nconst POINTER_OPACITY_MAX = 1\nconst POINTER_OPACITY_MIN = 0.4\nconst POINTER_FRONT_RADIUS = 0.002\nconst POINTER_REAR_RADIUS = 0.01\nconst POINTER_REAR_RADIUS_MIN = 0.003\nconst POINTER_LENGTH = 0.035\nconst POINTER_SEGMENTS = 16\nconst POINTER_RINGS = 12\nconst POINTER_HEMISPHERE_ANGLE = 110\nconst YAXIS = new THREE.Vector3(0, 1, 0)\nconst ZAXIS = new THREE.Vector3(0, 0, 1)\n\nconst CURSOR_RADIUS = 0.02\nconst CURSOR_MAX_DISTANCE = 1.5\n\nclass OculusHandPointerModel extends THREE.Object3D {\n constructor(hand, controller) {\n super()\n\n this.hand = hand\n this.controller = controller\n\n // Unused\n this.motionController = null\n this.envMap = null\n this.mesh = null\n\n this.pointerGeometry = null\n this.pointerMesh = null\n this.pointerObject = null\n\n this.pinched = false\n this.attached = false\n\n this.cursorObject = null\n\n this.raycaster = null\n\n this._onConnected = this._onConnected.bind(this)\n this._onDisconnected = this._onDisconnected.bind(this)\n this.hand.addEventListener('connected', this._onConnected)\n this.hand.addEventListener('disconnected', this._onDisconnected)\n }\n\n _onConnected(event) {\n const xrInputSource = event.data\n if (xrInputSource.hand) {\n this.visible = true\n this.xrInputSource = xrInputSource\n\n this.createPointer()\n }\n }\n\n _onDisconnected() {\n this.visible = false\n this.xrInputSource = null\n\n this.pointerGeometry?.dispose()\n this.pointerMesh?.material.dispose()\n\n this.clear()\n }\n\n _drawVerticesRing(vertices, baseVector, ringIndex) {\n const segmentVector = baseVector.clone()\n for (var i = 0; i < POINTER_SEGMENTS; i++) {\n segmentVector.applyAxisAngle(ZAXIS, (Math.PI * 2) / POINTER_SEGMENTS)\n const vid = ringIndex * POINTER_SEGMENTS + i\n vertices[3 * vid] = segmentVector.x\n vertices[3 * vid + 1] = segmentVector.y\n vertices[3 * vid + 2] = segmentVector.z\n }\n }\n\n _updatePointerVertices(rearRadius) {\n const vertices = this.pointerGeometry.attributes.position.array\n // first ring for front face\n const frontFaceBase = new THREE.Vector3(POINTER_FRONT_RADIUS, 0, -1 * (POINTER_LENGTH - rearRadius))\n this._drawVerticesRing(vertices, frontFaceBase, 0)\n\n // rings for rear hemisphere\n const rearBase = new THREE.Vector3(\n Math.sin((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n Math.cos((Math.PI * POINTER_HEMISPHERE_ANGLE) / 180) * rearRadius,\n 0,\n )\n for (var i = 0; i < POINTER_RINGS; i++) {\n this._drawVerticesRing(vertices, rearBase, i + 1)\n rearBase.applyAxisAngle(YAXIS, (Math.PI * POINTER_HEMISPHERE_ANGLE) / 180 / (POINTER_RINGS * -2))\n }\n\n // front and rear face center vertices\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n const frontCenter = new THREE.Vector3(0, 0, -1 * (POINTER_LENGTH - rearRadius))\n vertices[frontCenterIndex * 3] = frontCenter.x\n vertices[frontCenterIndex * 3 + 1] = frontCenter.y\n vertices[frontCenterIndex * 3 + 2] = frontCenter.z\n const rearCenter = new THREE.Vector3(0, 0, rearRadius)\n vertices[rearCenterIndex * 3] = rearCenter.x\n vertices[rearCenterIndex * 3 + 1] = rearCenter.y\n vertices[rearCenterIndex * 3 + 2] = rearCenter.z\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n // verticesNeedUpdate = true;\n }\n\n createPointer() {\n var i, j\n const vertices = new Array(((POINTER_RINGS + 1) * POINTER_SEGMENTS + 2) * 3).fill(0)\n // const vertices = [];\n const indices = []\n this.pointerGeometry = new THREE.BufferGeometry()\n\n this.pointerGeometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3))\n\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n\n // construct faces to connect rings\n for (i = 0; i < POINTER_RINGS; i++) {\n for (j = 0; j < POINTER_SEGMENTS - 1; j++) {\n indices.push(i * POINTER_SEGMENTS + j, i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n indices.push(i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j)\n }\n\n indices.push((i + 1) * POINTER_SEGMENTS - 1, i * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n indices.push(i * POINTER_SEGMENTS, (i + 1) * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1)\n }\n\n // construct front and rear face\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS)\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1\n\n for (i = 0; i < POINTER_SEGMENTS - 1; i++) {\n indices.push(frontCenterIndex, i + 1, i)\n indices.push(rearCenterIndex, i + POINTER_SEGMENTS * POINTER_RINGS, i + POINTER_SEGMENTS * POINTER_RINGS + 1)\n }\n\n indices.push(frontCenterIndex, 0, POINTER_SEGMENTS - 1)\n indices.push(rearCenterIndex, POINTER_SEGMENTS * (POINTER_RINGS + 1) - 1, POINTER_SEGMENTS * POINTER_RINGS)\n\n const material = new THREE.MeshBasicMaterial()\n material.transparent = true\n material.opacity = POINTER_OPACITY_MIN\n\n this.pointerGeometry.setIndex(indices)\n\n this.pointerMesh = new THREE.Mesh(this.pointerGeometry, material)\n\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerObject = new THREE.Object3D()\n this.pointerObject.add(this.pointerMesh)\n\n this.raycaster = new THREE.Raycaster()\n\n // create cursor\n const cursorGeometry = new THREE.SphereGeometry(CURSOR_RADIUS, 10, 10)\n const cursorMaterial = new THREE.MeshBasicMaterial()\n cursorMaterial.transparent = true\n cursorMaterial.opacity = POINTER_OPACITY_MIN\n\n this.cursorObject = new THREE.Mesh(cursorGeometry, cursorMaterial)\n this.pointerObject.add(this.cursorObject)\n\n this.add(this.pointerObject)\n }\n\n _updateRaycaster() {\n if (this.raycaster) {\n const pointerMatrix = this.pointerObject.matrixWorld\n const tempMatrix = new THREE.Matrix4()\n tempMatrix.identity().extractRotation(pointerMatrix)\n this.raycaster.ray.origin.setFromMatrixPosition(pointerMatrix)\n this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix)\n }\n }\n\n _updatePointer() {\n this.pointerObject.visible = this.controller.visible\n const indexTip = this.hand.joints['index-finger-tip']\n const thumbTip = this.hand.joints['thumb-tip']\n const distance = indexTip.position.distanceTo(thumbTip.position)\n const position = indexTip.position.clone().add(thumbTip.position).multiplyScalar(0.5)\n this.pointerObject.position.copy(position)\n this.pointerObject.quaternion.copy(this.controller.quaternion)\n\n this.pinched = distance <= PINCH_THRESHOLD\n\n const pinchScale = (distance - PINCH_MIN) / (PINCH_MAX - PINCH_MIN)\n const focusScale = (distance - PINCH_MIN) / (PINCH_THRESHOLD - PINCH_MIN)\n if (pinchScale > 1) {\n this._updatePointerVertices(POINTER_REAR_RADIUS)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n } else if (pinchScale > 0) {\n const rearRadius = (POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN) * pinchScale + POINTER_REAR_RADIUS_MIN\n this._updatePointerVertices(rearRadius)\n if (focusScale < 1) {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius - (1 - focusScale) * POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity =\n POINTER_OPACITY_MIN + (1 - focusScale) * (POINTER_OPACITY_MAX - POINTER_OPACITY_MIN)\n } else {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN\n }\n } else {\n this._updatePointerVertices(POINTER_REAR_RADIUS_MIN)\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX)\n this.pointerMesh.material.opacity = POINTER_OPACITY_MAX\n }\n\n this.cursorObject.material.opacity = this.pointerMesh.material.opacity\n }\n\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force)\n if (this.pointerGeometry) {\n this._updatePointer()\n this._updateRaycaster()\n }\n }\n\n isPinched() {\n return this.pinched\n }\n\n setAttached(attached) {\n this.attached = attached\n }\n\n isAttached() {\n return this.attached\n }\n\n intersectObject(object, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObject(object, recursive)\n }\n }\n\n intersectObjects(objects, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObjects(objects, recursive)\n }\n }\n\n checkIntersections(objects, recursive = false) {\n if (this.raycaster && !this.attached) {\n const intersections = this.raycaster.intersectObjects(objects, recursive)\n const direction = new THREE.Vector3(0, 0, -1)\n if (intersections.length > 0) {\n const intersection = intersections[0]\n const distance = intersection.distance\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n } else {\n this.cursorObject.position.copy(direction.multiplyScalar(CURSOR_MAX_DISTANCE))\n }\n }\n }\n\n setCursor(distance) {\n const direction = new THREE.Vector3(0, 0, -1)\n if (this.raycaster && !this.attached) {\n this.cursorObject.position.copy(direction.multiplyScalar(distance))\n }\n }\n\n dispose() {\n this._onDisconnected()\n this.hand.removeEventListener('connected', this._onConnected)\n this.hand.removeEventListener('disconnected', this._onDisconnected)\n }\n}\n\nexport { OculusHandPointerModel }\n"],"names":[],"mappings":"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"}