three-stdlib 2.35.5 → 2.35.7

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 (514) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +20 -17
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +20 -17
  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 +722 -715
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +723 -716
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +2 -1
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +3 -2
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +2 -1
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +3 -2
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +2 -1
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +3 -2
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +133 -122
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +34 -21
  68. package/exporters/DRACOExporter.js +133 -122
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +170 -167
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +170 -167
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +524 -515
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +524 -515
  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 +2 -1
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +3 -2
  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 +441 -435
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +441 -435
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +2 -1
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +3 -2
  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 +377 -374
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +377 -374
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +5 -4
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +6 -5
  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 +46 -43
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +46 -43
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1694 -1688
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1694 -1688
  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 +53 -50
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +53 -50
  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 +271 -268
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +272 -269
  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 +2 -1
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +3 -2
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +211 -206
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +212 -207
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +154 -146
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +154 -146
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +183 -180
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +183 -180
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +164 -161
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +164 -161
  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 +35 -32
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +17 -42
  258. package/objects/Sky.js +35 -32
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +2 -1
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +3 -2
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +143 -140
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +143 -140
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/SAOPass.cjs +267 -264
  270. package/postprocessing/SAOPass.cjs.map +1 -1
  271. package/postprocessing/SAOPass.js +267 -264
  272. package/postprocessing/SAOPass.js.map +1 -1
  273. package/postprocessing/SSAOPass.cjs +253 -250
  274. package/postprocessing/SSAOPass.cjs.map +1 -1
  275. package/postprocessing/SSAOPass.js +253 -250
  276. package/postprocessing/SSAOPass.js.map +1 -1
  277. package/postprocessing/SSRPass.cjs +379 -376
  278. package/postprocessing/SSRPass.cjs.map +1 -1
  279. package/postprocessing/SSRPass.js +379 -376
  280. package/postprocessing/SSRPass.js.map +1 -1
  281. package/postprocessing/UnrealBloomPass.cjs +205 -202
  282. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  283. package/postprocessing/UnrealBloomPass.js +205 -202
  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 +71 -46
  294. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  295. package/shaders/ACESFilmicToneMappingShader.js +71 -46
  296. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  297. package/shaders/AfterimageShader.cjs +41 -22
  298. package/shaders/AfterimageShader.cjs.map +1 -1
  299. package/shaders/AfterimageShader.js +41 -22
  300. package/shaders/AfterimageShader.js.map +1 -1
  301. package/shaders/BasicShader.cjs +20 -6
  302. package/shaders/BasicShader.cjs.map +1 -1
  303. package/shaders/BasicShader.js +20 -6
  304. package/shaders/BasicShader.js.map +1 -1
  305. package/shaders/BleachBypassShader.cjs +46 -26
  306. package/shaders/BleachBypassShader.cjs.map +1 -1
  307. package/shaders/BleachBypassShader.js +46 -26
  308. package/shaders/BleachBypassShader.js.map +1 -1
  309. package/shaders/BlendShader.cjs +33 -19
  310. package/shaders/BlendShader.cjs.map +1 -1
  311. package/shaders/BlendShader.js +33 -19
  312. package/shaders/BlendShader.js.map +1 -1
  313. package/shaders/BokehShader.cjs +117 -90
  314. package/shaders/BokehShader.cjs.map +1 -1
  315. package/shaders/BokehShader.js +117 -90
  316. package/shaders/BokehShader.js.map +1 -1
  317. package/shaders/BokehShader2.cjs +333 -232
  318. package/shaders/BokehShader2.cjs.map +1 -1
  319. package/shaders/BokehShader2.js +333 -232
  320. package/shaders/BokehShader2.js.map +1 -1
  321. package/shaders/BrightnessContrastShader.cjs +38 -22
  322. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  323. package/shaders/BrightnessContrastShader.js +38 -22
  324. package/shaders/BrightnessContrastShader.js.map +1 -1
  325. package/shaders/ColorCorrectionShader.cjs +35 -21
  326. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  327. package/shaders/ColorCorrectionShader.js +35 -21
  328. package/shaders/ColorCorrectionShader.js.map +1 -1
  329. package/shaders/ColorifyShader.cjs +34 -19
  330. package/shaders/ColorifyShader.cjs.map +1 -1
  331. package/shaders/ColorifyShader.js +34 -19
  332. package/shaders/ColorifyShader.js.map +1 -1
  333. package/shaders/ConvolutionShader.cjs +43 -24
  334. package/shaders/ConvolutionShader.cjs.map +1 -1
  335. package/shaders/ConvolutionShader.js +43 -24
  336. package/shaders/ConvolutionShader.js.map +1 -1
  337. package/shaders/CopyShader.cjs +30 -16
  338. package/shaders/CopyShader.cjs.map +1 -1
  339. package/shaders/CopyShader.js +30 -16
  340. package/shaders/CopyShader.js.map +1 -1
  341. package/shaders/DOFMipMapShader.cjs +38 -21
  342. package/shaders/DOFMipMapShader.cjs.map +1 -1
  343. package/shaders/DOFMipMapShader.js +38 -21
  344. package/shaders/DOFMipMapShader.js.map +1 -1
  345. package/shaders/DepthLimitedBlurShader.cjs +98 -69
  346. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  347. package/shaders/DepthLimitedBlurShader.js +98 -69
  348. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  349. package/shaders/DigitalGlitch.cjs +70 -59
  350. package/shaders/DigitalGlitch.cjs.map +1 -1
  351. package/shaders/DigitalGlitch.js +70 -59
  352. package/shaders/DigitalGlitch.js.map +1 -1
  353. package/shaders/DotScreenShader.cjs +49 -28
  354. package/shaders/DotScreenShader.cjs.map +1 -1
  355. package/shaders/DotScreenShader.js +49 -28
  356. package/shaders/DotScreenShader.js.map +1 -1
  357. package/shaders/FXAAShader.cjs +1098 -1089
  358. package/shaders/FXAAShader.cjs.map +1 -1
  359. package/shaders/FXAAShader.js +1098 -1089
  360. package/shaders/FXAAShader.js.map +1 -1
  361. package/shaders/FilmShader.cjs +57 -29
  362. package/shaders/FilmShader.cjs.map +1 -1
  363. package/shaders/FilmShader.js +57 -29
  364. package/shaders/FilmShader.js.map +1 -1
  365. package/shaders/FocusShader.cjs +70 -43
  366. package/shaders/FocusShader.cjs.map +1 -1
  367. package/shaders/FocusShader.js +70 -43
  368. package/shaders/FocusShader.js.map +1 -1
  369. package/shaders/FreiChenShader.cjs +74 -53
  370. package/shaders/FreiChenShader.cjs.map +1 -1
  371. package/shaders/FreiChenShader.js +74 -53
  372. package/shaders/FreiChenShader.js.map +1 -1
  373. package/shaders/FresnelShader.cjs +55 -35
  374. package/shaders/FresnelShader.cjs.map +1 -1
  375. package/shaders/FresnelShader.js +55 -35
  376. package/shaders/FresnelShader.js.map +1 -1
  377. package/shaders/GammaCorrectionShader.cjs +33 -19
  378. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  379. package/shaders/GammaCorrectionShader.js +33 -19
  380. package/shaders/GammaCorrectionShader.js.map +1 -1
  381. package/shaders/GodRaysShader.cjs +193 -116
  382. package/shaders/GodRaysShader.cjs.map +1 -1
  383. package/shaders/GodRaysShader.js +193 -116
  384. package/shaders/GodRaysShader.js.map +1 -1
  385. package/shaders/HalftoneShader.cjs +270 -192
  386. package/shaders/HalftoneShader.cjs.map +1 -1
  387. package/shaders/HalftoneShader.js +270 -192
  388. package/shaders/HalftoneShader.js.map +1 -1
  389. package/shaders/HorizontalTiltShiftShader.cjs +43 -27
  390. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  391. package/shaders/HorizontalTiltShiftShader.js +43 -27
  392. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  393. package/shaders/HueSaturationShader.cjs +47 -31
  394. package/shaders/HueSaturationShader.cjs.map +1 -1
  395. package/shaders/HueSaturationShader.js +47 -31
  396. package/shaders/HueSaturationShader.js.map +1 -1
  397. package/shaders/KaleidoShader.cjs +37 -24
  398. package/shaders/KaleidoShader.cjs.map +1 -1
  399. package/shaders/KaleidoShader.js +37 -24
  400. package/shaders/KaleidoShader.js.map +1 -1
  401. package/shaders/LuminosityHighPassShader.cjs +43 -24
  402. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  403. package/shaders/LuminosityHighPassShader.js +43 -24
  404. package/shaders/LuminosityHighPassShader.js.map +1 -1
  405. package/shaders/LuminosityShader.cjs +34 -17
  406. package/shaders/LuminosityShader.cjs.map +1 -1
  407. package/shaders/LuminosityShader.js +34 -17
  408. package/shaders/LuminosityShader.js.map +1 -1
  409. package/shaders/MirrorShader.cjs +39 -26
  410. package/shaders/MirrorShader.cjs.map +1 -1
  411. package/shaders/MirrorShader.js +39 -26
  412. package/shaders/MirrorShader.js.map +1 -1
  413. package/shaders/NormalMapShader.cjs +36 -21
  414. package/shaders/NormalMapShader.cjs.map +1 -1
  415. package/shaders/NormalMapShader.js +36 -21
  416. package/shaders/NormalMapShader.js.map +1 -1
  417. package/shaders/ParallaxShader.cjs +147 -97
  418. package/shaders/ParallaxShader.cjs.map +1 -1
  419. package/shaders/ParallaxShader.js +147 -97
  420. package/shaders/ParallaxShader.js.map +1 -1
  421. package/shaders/PixelShader.cjs +31 -18
  422. package/shaders/PixelShader.cjs.map +1 -1
  423. package/shaders/PixelShader.js +31 -18
  424. package/shaders/PixelShader.js.map +1 -1
  425. package/shaders/RGBShiftShader.cjs +33 -20
  426. package/shaders/RGBShiftShader.cjs.map +1 -1
  427. package/shaders/RGBShiftShader.js +33 -20
  428. package/shaders/RGBShiftShader.js.map +1 -1
  429. package/shaders/SAOShader.cjs +154 -117
  430. package/shaders/SAOShader.cjs.map +1 -1
  431. package/shaders/SAOShader.js +154 -117
  432. package/shaders/SAOShader.js.map +1 -1
  433. package/shaders/SMAAShader.cjs +358 -270
  434. package/shaders/SMAAShader.cjs.map +1 -1
  435. package/shaders/SMAAShader.js +358 -270
  436. package/shaders/SMAAShader.js.map +1 -1
  437. package/shaders/SSAOShader.cjs +236 -142
  438. package/shaders/SSAOShader.cjs.map +1 -1
  439. package/shaders/SSAOShader.js +236 -142
  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 +36 -20
  446. package/shaders/SepiaShader.cjs.map +1 -1
  447. package/shaders/SepiaShader.js +36 -20
  448. package/shaders/SepiaShader.js.map +1 -1
  449. package/shaders/SobelOperatorShader.cjs +64 -37
  450. package/shaders/SobelOperatorShader.cjs.map +1 -1
  451. package/shaders/SobelOperatorShader.js +64 -37
  452. package/shaders/SobelOperatorShader.js.map +1 -1
  453. package/shaders/TechnicolorShader.cjs +29 -16
  454. package/shaders/TechnicolorShader.cjs.map +1 -1
  455. package/shaders/TechnicolorShader.js +29 -16
  456. package/shaders/TechnicolorShader.js.map +1 -1
  457. package/shaders/ToneMapShader.cjs +55 -35
  458. package/shaders/ToneMapShader.cjs.map +1 -1
  459. package/shaders/ToneMapShader.js +55 -35
  460. package/shaders/ToneMapShader.js.map +1 -1
  461. package/shaders/ToonShader.cjs +275 -165
  462. package/shaders/ToonShader.cjs.map +1 -1
  463. package/shaders/ToonShader.js +275 -165
  464. package/shaders/ToonShader.js.map +1 -1
  465. package/shaders/TriangleBlurShader.cjs +50 -27
  466. package/shaders/TriangleBlurShader.cjs.map +1 -1
  467. package/shaders/TriangleBlurShader.js +50 -27
  468. package/shaders/TriangleBlurShader.js.map +1 -1
  469. package/shaders/UnpackDepthRGBAShader.cjs +32 -17
  470. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  471. package/shaders/UnpackDepthRGBAShader.js +32 -17
  472. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  473. package/shaders/VerticalTiltShiftShader.cjs +43 -27
  474. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  475. package/shaders/VerticalTiltShiftShader.js +43 -27
  476. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  477. package/shaders/VignetteShader.cjs +43 -27
  478. package/shaders/VignetteShader.cjs.map +1 -1
  479. package/shaders/VignetteShader.js +43 -27
  480. package/shaders/VignetteShader.js.map +1 -1
  481. package/shaders/VolumeShader.cjs +264 -213
  482. package/shaders/VolumeShader.cjs.map +1 -1
  483. package/shaders/VolumeShader.js +264 -213
  484. package/shaders/VolumeShader.js.map +1 -1
  485. package/shaders/WaterRefractionShader.cjs +63 -35
  486. package/shaders/WaterRefractionShader.cjs.map +1 -1
  487. package/shaders/WaterRefractionShader.js +63 -35
  488. package/shaders/WaterRefractionShader.js.map +1 -1
  489. package/utils/GeometryCompressionUtils.cjs +2 -1
  490. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  491. package/utils/GeometryCompressionUtils.js +3 -2
  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 +3 -3
  498. package/webxr/ARButton.cjs.map +1 -1
  499. package/webxr/ARButton.d.ts +3 -3
  500. package/webxr/ARButton.js +3 -3
  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 +98 -95
  507. package/webxr/VRButton.cjs.map +1 -1
  508. package/webxr/VRButton.d.ts +9 -6
  509. package/webxr/VRButton.js +98 -95
  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
@@ -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 = 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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"}
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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"}
@@ -6,107 +6,110 @@ var __publicField = (obj, key, value) => {
6
6
  return value;
7
7
  };
8
8
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
- const _VRButton = class {
10
- static createButton(renderer, sessionInit = {}) {
11
- const button = document.createElement("button");
12
- function showEnterVR() {
13
- let currentSession = null;
14
- async function onSessionStarted(session) {
15
- session.addEventListener("end", onSessionEnded);
16
- await renderer.xr.setSession(session);
17
- button.textContent = "EXIT VR";
18
- currentSession = session;
19
- }
20
- function onSessionEnded() {
21
- currentSession.removeEventListener("end", onSessionEnded);
9
+ const VRButton = /* @__PURE__ */ (() => {
10
+ const _VRButton = class {
11
+ static createButton(renderer, sessionInit = {}) {
12
+ const button = document.createElement("button");
13
+ function showEnterVR() {
14
+ let currentSession = null;
15
+ async function onSessionStarted(session) {
16
+ session.addEventListener("end", onSessionEnded);
17
+ await renderer.xr.setSession(session);
18
+ button.textContent = "EXIT VR";
19
+ currentSession = session;
20
+ }
21
+ function onSessionEnded() {
22
+ currentSession.removeEventListener("end", onSessionEnded);
23
+ button.textContent = "ENTER VR";
24
+ currentSession = null;
25
+ }
26
+ button.style.display = "";
27
+ button.style.cursor = "pointer";
28
+ button.style.left = "calc(50% - 50px)";
29
+ button.style.width = "100px";
22
30
  button.textContent = "ENTER VR";
23
- currentSession = null;
31
+ button.onmouseenter = () => {
32
+ button.style.opacity = "1.0";
33
+ };
34
+ button.onmouseleave = () => {
35
+ button.style.opacity = "0.5";
36
+ };
37
+ button.onclick = () => {
38
+ var _a;
39
+ if (currentSession === null) {
40
+ const optionalFeatures = [sessionInit.optionalFeatures, "local-floor", "bounded-floor", "hand-tracking"].flat().filter(Boolean);
41
+ (_a = navigator.xr) == null ? void 0 : _a.requestSession("immersive-vr", { ...sessionInit, optionalFeatures }).then(onSessionStarted);
42
+ } else {
43
+ currentSession.end();
44
+ }
45
+ };
46
+ }
47
+ function disableButton() {
48
+ button.style.display = "";
49
+ button.style.cursor = "auto";
50
+ button.style.left = "calc(50% - 75px)";
51
+ button.style.width = "150px";
52
+ button.onmouseenter = null;
53
+ button.onmouseleave = null;
54
+ button.onclick = null;
24
55
  }
25
- button.style.display = "";
26
- button.style.cursor = "pointer";
27
- button.style.left = "calc(50% - 50px)";
28
- button.style.width = "100px";
29
- button.textContent = "ENTER VR";
30
- button.onmouseenter = () => {
31
- button.style.opacity = "1.0";
32
- };
33
- button.onmouseleave = () => {
34
- button.style.opacity = "0.5";
35
- };
36
- button.onclick = () => {
37
- var _a;
38
- if (currentSession === null) {
39
- const optionalFeatures = [sessionInit.optionalFeatures, "local-floor", "bounded-floor", "hand-tracking"].flat().filter(Boolean);
40
- (_a = navigator.xr) == null ? void 0 : _a.requestSession("immersive-vr", { ...sessionInit, optionalFeatures }).then(onSessionStarted);
56
+ function showWebXRNotFound() {
57
+ disableButton();
58
+ button.textContent = "VR NOT SUPPORTED";
59
+ }
60
+ function stylizeElement(element) {
61
+ element.style.position = "absolute";
62
+ element.style.bottom = "20px";
63
+ element.style.padding = "12px 6px";
64
+ element.style.border = "1px solid #fff";
65
+ element.style.borderRadius = "4px";
66
+ element.style.background = "rgba(0,0,0,0.1)";
67
+ element.style.color = "#fff";
68
+ element.style.font = "normal 13px sans-serif";
69
+ element.style.textAlign = "center";
70
+ element.style.opacity = "0.5";
71
+ element.style.outline = "none";
72
+ element.style.zIndex = "999";
73
+ }
74
+ if ("xr" in navigator) {
75
+ stylizeElement(button);
76
+ button.id = "VRButton";
77
+ button.style.display = "none";
78
+ navigator.xr.isSessionSupported("immersive-vr").then((supported) => {
79
+ supported ? showEnterVR() : showWebXRNotFound();
80
+ if (supported && _VRButton.xrSessionIsGranted) {
81
+ button.click();
82
+ }
83
+ });
84
+ return button;
85
+ } else {
86
+ const message = document.createElement("a");
87
+ if (window.isSecureContext === false) {
88
+ message.href = document.location.href.replace(/^http:/, "https:");
89
+ message.innerHTML = "WEBXR NEEDS HTTPS";
41
90
  } else {
42
- currentSession.end();
91
+ message.href = "https://immersiveweb.dev/";
92
+ message.innerHTML = "WEBXR NOT AVAILABLE";
43
93
  }
44
- };
45
- }
46
- function disableButton() {
47
- button.style.display = "";
48
- button.style.cursor = "auto";
49
- button.style.left = "calc(50% - 75px)";
50
- button.style.width = "150px";
51
- button.onmouseenter = null;
52
- button.onmouseleave = null;
53
- button.onclick = null;
54
- }
55
- function showWebXRNotFound() {
56
- disableButton();
57
- button.textContent = "VR NOT SUPPORTED";
58
- }
59
- function stylizeElement(element) {
60
- element.style.position = "absolute";
61
- element.style.bottom = "20px";
62
- element.style.padding = "12px 6px";
63
- element.style.border = "1px solid #fff";
64
- element.style.borderRadius = "4px";
65
- element.style.background = "rgba(0,0,0,0.1)";
66
- element.style.color = "#fff";
67
- element.style.font = "normal 13px sans-serif";
68
- element.style.textAlign = "center";
69
- element.style.opacity = "0.5";
70
- element.style.outline = "none";
71
- element.style.zIndex = "999";
72
- }
73
- if ("xr" in navigator) {
74
- stylizeElement(button);
75
- button.id = "VRButton";
76
- button.style.display = "none";
77
- navigator.xr.isSessionSupported("immersive-vr").then((supported) => {
78
- supported ? showEnterVR() : showWebXRNotFound();
79
- if (supported && _VRButton.xrSessionIsGranted) {
80
- button.click();
81
- }
82
- });
83
- return button;
84
- } else {
85
- const message = document.createElement("a");
86
- if (window.isSecureContext === false) {
87
- message.href = document.location.href.replace(/^http:/, "https:");
88
- message.innerHTML = "WEBXR NEEDS HTTPS";
89
- } else {
90
- message.href = "https://immersiveweb.dev/";
91
- message.innerHTML = "WEBXR NOT AVAILABLE";
94
+ message.style.left = "calc(50% - 90px)";
95
+ message.style.width = "180px";
96
+ message.style.textDecoration = "none";
97
+ stylizeElement(message);
98
+ return message;
92
99
  }
93
- message.style.left = "calc(50% - 90px)";
94
- message.style.width = "180px";
95
- message.style.textDecoration = "none";
96
- stylizeElement(message);
97
- return message;
98
100
  }
99
- }
100
- static registerSessionGrantedListener() {
101
- if (typeof navigator !== "undefined" && "xr" in navigator) {
102
- navigator.xr.addEventListener("sessiongranted", () => {
103
- _VRButton.xrSessionIsGranted = true;
104
- });
101
+ static registerSessionGrantedListener() {
102
+ if (typeof navigator !== "undefined" && "xr" in navigator) {
103
+ navigator.xr.addEventListener("sessiongranted", () => {
104
+ _VRButton.xrSessionIsGranted = true;
105
+ });
106
+ }
105
107
  }
106
- }
107
- };
108
- let VRButton = _VRButton;
109
- __publicField(VRButton, "xrSessionIsGranted", false);
110
- VRButton.registerSessionGrantedListener();
108
+ };
109
+ let VRButton2 = _VRButton;
110
+ __publicField(VRButton2, "xrSessionIsGranted", false);
111
+ VRButton2.registerSessionGrantedListener();
112
+ return VRButton2;
113
+ })();
111
114
  exports.VRButton = VRButton;
112
115
  //# sourceMappingURL=VRButton.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"VRButton.cjs","sources":["../../src/webxr/VRButton.ts"],"sourcesContent":["import { WebGLRenderer } from 'three'\n\nclass VRButton {\n static createButton(renderer: WebGLRenderer, sessionInit: XRSessionInit = {}): HTMLButtonElement | HTMLAnchorElement {\n const button = document.createElement('button')\n\n function showEnterVR(/*device*/): void {\n let currentSession: XRSession | null = null\n\n async function onSessionStarted(session: XRSession): Promise<void> {\n session.addEventListener('end', onSessionEnded)\n\n await renderer.xr.setSession(session as any)\n button.textContent = 'EXIT VR'\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/): void {\n currentSession!.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'ENTER VR'\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 = 'ENTER VR'\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 // WebXR's requestReferenceSpace only works if the corresponding feature\n // was requested at session creation time. For simplicity, just ask for\n // the interesting ones as optional features, but be aware that the\n // requestReferenceSpace call will fail if it turns out to be unavailable.\n // ('local' is always available for immersive sessions and doesn't need to\n // be requested separately.)\n\n const optionalFeatures = [sessionInit.optionalFeatures, 'local-floor', 'bounded-floor', 'hand-tracking']\n .flat()\n .filter(Boolean) as string[]\n\n ;(navigator as Navigator).xr\n ?.requestSession('immersive-vr', { ...sessionInit, optionalFeatures })\n .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 showWebXRNotFound(): void {\n disableButton()\n\n button.textContent = 'VR 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 stylizeElement(button)\n button.id = 'VRButton'\n button.style.display = 'none'\n\n // Query for session mode\n navigator.xr!.isSessionSupported('immersive-vr').then((supported) => {\n supported ? showEnterVR() : showWebXRNotFound()\n\n if (supported && VRButton.xrSessionIsGranted) {\n button.click()\n }\n })\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 static xrSessionIsGranted = false\n\n static registerSessionGrantedListener(): void {\n if (typeof navigator !== 'undefined' && 'xr' in navigator) {\n ;(navigator as Navigator).xr!.addEventListener('sessiongranted', () => {\n VRButton.xrSessionIsGranted = true\n })\n }\n }\n}\n\nVRButton.registerSessionGrantedListener()\n\nexport { VRButton }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VRButton.cjs","sources":["../../src/webxr/VRButton.js"],"sourcesContent":["const VRButton = /* @__PURE__ */ (() => {\n class VRButton {\n static createButton(renderer, sessionInit = {}) {\n const button = document.createElement('button')\n\n function showEnterVR(/*device*/) {\n let currentSession = null\n\n async function onSessionStarted(session) {\n session.addEventListener('end', onSessionEnded)\n\n await renderer.xr.setSession(session)\n button.textContent = 'EXIT VR'\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/) {\n currentSession.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'ENTER VR'\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 = 'ENTER VR'\n\n button.onmouseenter = () => {\n button.style.opacity = '1.0'\n }\n\n button.onmouseleave = () => {\n button.style.opacity = '0.5'\n }\n\n button.onclick = () => {\n if (currentSession === null) {\n // WebXR's requestReferenceSpace only works if the corresponding feature\n // was requested at session creation time. For simplicity, just ask for\n // the interesting ones as optional features, but be aware that the\n // requestReferenceSpace call will fail if it turns out to be unavailable.\n // ('local' is always available for immersive sessions and doesn't need to\n // be requested separately.)\n\n const optionalFeatures = [sessionInit.optionalFeatures, 'local-floor', 'bounded-floor', 'hand-tracking']\n .flat()\n .filter(Boolean)\n\n navigator.xr?.requestSession('immersive-vr', { ...sessionInit, optionalFeatures }).then(onSessionStarted)\n } else {\n currentSession.end()\n }\n }\n }\n\n function disableButton() {\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 showWebXRNotFound() {\n disableButton()\n\n button.textContent = 'VR NOT SUPPORTED'\n }\n\n function stylizeElement(element) {\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 stylizeElement(button)\n button.id = 'VRButton'\n button.style.display = 'none'\n\n // Query for session mode\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => {\n supported ? showEnterVR() : showWebXRNotFound()\n\n if (supported && VRButton.xrSessionIsGranted) {\n button.click()\n }\n })\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 static xrSessionIsGranted = false\n\n static registerSessionGrantedListener() {\n if (typeof navigator !== 'undefined' && 'xr' in navigator) {\n navigator.xr.addEventListener('sessiongranted', () => {\n VRButton.xrSessionIsGranted = true\n })\n }\n }\n }\n\n VRButton.registerSessionGrantedListener()\n\n return VRButton\n})()\n\nexport { VRButton }\n"],"names":["VRButton"],"mappings":";;;;;;;;AAAK,MAAC,WAA4B,uBAAM;AACtC,QAAM,YAAN,MAAe;AAAA,IACb,OAAO,aAAa,UAAU,cAAc,IAAI;AAC9C,YAAM,SAAS,SAAS,cAAc,QAAQ;AAE9C,eAAS,cAAwB;AAC/B,YAAI,iBAAiB;AAErB,uBAAe,iBAAiB,SAAS;AACvC,kBAAQ,iBAAiB,OAAO,cAAc;AAE9C,gBAAM,SAAS,GAAG,WAAW,OAAO;AACpC,iBAAO,cAAc;AAErB,2BAAiB;AAAA,QAClB;AAED,iBAAS,iBAA0B;AACjC,yBAAe,oBAAoB,OAAO,cAAc;AAExD,iBAAO,cAAc;AAErB,2BAAiB;AAAA,QAClB;AAID,eAAO,MAAM,UAAU;AAEvB,eAAO,MAAM,SAAS;AACtB,eAAO,MAAM,OAAO;AACpB,eAAO,MAAM,QAAQ;AAErB,eAAO,cAAc;AAErB,eAAO,eAAe,MAAM;AAC1B,iBAAO,MAAM,UAAU;AAAA,QACxB;AAED,eAAO,eAAe,MAAM;AAC1B,iBAAO,MAAM,UAAU;AAAA,QACxB;AAED,eAAO,UAAU,MAAM;;AACrB,cAAI,mBAAmB,MAAM;AAQ3B,kBAAM,mBAAmB,CAAC,YAAY,kBAAkB,eAAe,iBAAiB,eAAe,EACpG,KAAM,EACN,OAAO,OAAO;AAEjB,4BAAU,OAAV,mBAAc,eAAe,gBAAgB,EAAE,GAAG,aAAa,iBAAkB,GAAE,KAAK;AAAA,UACpG,OAAiB;AACL,2BAAe,IAAK;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAED,eAAS,gBAAgB;AACvB,eAAO,MAAM,UAAU;AAEvB,eAAO,MAAM,SAAS;AACtB,eAAO,MAAM,OAAO;AACpB,eAAO,MAAM,QAAQ;AAErB,eAAO,eAAe;AACtB,eAAO,eAAe;AAEtB,eAAO,UAAU;AAAA,MAClB;AAED,eAAS,oBAAoB;AAC3B,sBAAe;AAEf,eAAO,cAAc;AAAA,MACtB;AAED,eAAS,eAAe,SAAS;AAC/B,gBAAQ,MAAM,WAAW;AACzB,gBAAQ,MAAM,SAAS;AACvB,gBAAQ,MAAM,UAAU;AACxB,gBAAQ,MAAM,SAAS;AACvB,gBAAQ,MAAM,eAAe;AAC7B,gBAAQ,MAAM,aAAa;AAC3B,gBAAQ,MAAM,QAAQ;AACtB,gBAAQ,MAAM,OAAO;AACrB,gBAAQ,MAAM,YAAY;AAC1B,gBAAQ,MAAM,UAAU;AACxB,gBAAQ,MAAM,UAAU;AACxB,gBAAQ,MAAM,SAAS;AAAA,MACxB;AAED,UAAI,QAAQ,WAAW;AACrB,uBAAe,MAAM;AACrB,eAAO,KAAK;AACZ,eAAO,MAAM,UAAU;AAGvB,kBAAU,GAAG,mBAAmB,cAAc,EAAE,KAAK,CAAC,cAAc;AAClE,sBAAY,YAAa,IAAG,kBAAmB;AAE/C,cAAI,aAAa,UAAS,oBAAoB;AAC5C,mBAAO,MAAO;AAAA,UACf;AAAA,QACX,CAAS;AAED,eAAO;AAAA,MACf,OAAa;AACL,cAAM,UAAU,SAAS,cAAc,GAAG;AAE1C,YAAI,OAAO,oBAAoB,OAAO;AACpC,kBAAQ,OAAO,SAAS,SAAS,KAAK,QAAQ,UAAU,QAAQ;AAChE,kBAAQ,YAAY;AAAA,QAC9B,OAAe;AACL,kBAAQ,OAAO;AACf,kBAAQ,YAAY;AAAA,QACrB;AAED,gBAAQ,MAAM,OAAO;AACrB,gBAAQ,MAAM,QAAQ;AACtB,gBAAQ,MAAM,iBAAiB;AAE/B,uBAAe,OAAO;AAEtB,eAAO;AAAA,MACR;AAAA,IACF;AAAA,IAID,OAAO,iCAAiC;AACtC,UAAI,OAAO,cAAc,eAAe,QAAQ,WAAW;AACzD,kBAAU,GAAG,iBAAiB,kBAAkB,MAAM;AACpD,oBAAS,qBAAqB;AAAA,QACxC,CAAS;AAAA,MACF;AAAA,IACF;AAAA,EACF;AA7ID,MAAMA,YAAN;AAoIE,gBApIIA,WAoIG,sBAAqB;AAW9B,EAAAA,UAAS,+BAAgC;AAEzC,SAAOA;AACT,GAAC;;"}
@@ -1,8 +1,11 @@
1
- /// <reference types="webxr" />
2
- import { WebGLRenderer } from 'three';
1
+ import { WebGLRenderer } from 'three'
2
+
3
3
  declare class VRButton {
4
- static createButton(renderer: WebGLRenderer, sessionInit?: XRSessionInit): HTMLButtonElement | HTMLAnchorElement;
5
- static xrSessionIsGranted: boolean;
6
- static registerSessionGrantedListener(): void;
4
+ static createButton(renderer: WebGLRenderer, sessionInit?: XRSessionInit): HTMLButtonElement | HTMLAnchorElement
5
+
6
+ static xrSessionIsGranted: boolean
7
+
8
+ static registerSessionGrantedListener(): void
7
9
  }
8
- export { VRButton };
10
+
11
+ export { VRButton }
package/webxr/VRButton.js CHANGED
@@ -4,108 +4,111 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
- const _VRButton = class {
8
- static createButton(renderer, sessionInit = {}) {
9
- const button = document.createElement("button");
10
- function showEnterVR() {
11
- let currentSession = null;
12
- async function onSessionStarted(session) {
13
- session.addEventListener("end", onSessionEnded);
14
- await renderer.xr.setSession(session);
15
- button.textContent = "EXIT VR";
16
- currentSession = session;
17
- }
18
- function onSessionEnded() {
19
- currentSession.removeEventListener("end", onSessionEnded);
7
+ const VRButton = /* @__PURE__ */ (() => {
8
+ const _VRButton = class {
9
+ static createButton(renderer, sessionInit = {}) {
10
+ const button = document.createElement("button");
11
+ function showEnterVR() {
12
+ let currentSession = null;
13
+ async function onSessionStarted(session) {
14
+ session.addEventListener("end", onSessionEnded);
15
+ await renderer.xr.setSession(session);
16
+ button.textContent = "EXIT VR";
17
+ currentSession = session;
18
+ }
19
+ function onSessionEnded() {
20
+ currentSession.removeEventListener("end", onSessionEnded);
21
+ button.textContent = "ENTER VR";
22
+ currentSession = null;
23
+ }
24
+ button.style.display = "";
25
+ button.style.cursor = "pointer";
26
+ button.style.left = "calc(50% - 50px)";
27
+ button.style.width = "100px";
20
28
  button.textContent = "ENTER VR";
21
- currentSession = null;
29
+ button.onmouseenter = () => {
30
+ button.style.opacity = "1.0";
31
+ };
32
+ button.onmouseleave = () => {
33
+ button.style.opacity = "0.5";
34
+ };
35
+ button.onclick = () => {
36
+ var _a;
37
+ if (currentSession === null) {
38
+ const optionalFeatures = [sessionInit.optionalFeatures, "local-floor", "bounded-floor", "hand-tracking"].flat().filter(Boolean);
39
+ (_a = navigator.xr) == null ? void 0 : _a.requestSession("immersive-vr", { ...sessionInit, optionalFeatures }).then(onSessionStarted);
40
+ } else {
41
+ currentSession.end();
42
+ }
43
+ };
44
+ }
45
+ function disableButton() {
46
+ button.style.display = "";
47
+ button.style.cursor = "auto";
48
+ button.style.left = "calc(50% - 75px)";
49
+ button.style.width = "150px";
50
+ button.onmouseenter = null;
51
+ button.onmouseleave = null;
52
+ button.onclick = null;
22
53
  }
23
- button.style.display = "";
24
- button.style.cursor = "pointer";
25
- button.style.left = "calc(50% - 50px)";
26
- button.style.width = "100px";
27
- button.textContent = "ENTER VR";
28
- button.onmouseenter = () => {
29
- button.style.opacity = "1.0";
30
- };
31
- button.onmouseleave = () => {
32
- button.style.opacity = "0.5";
33
- };
34
- button.onclick = () => {
35
- var _a;
36
- if (currentSession === null) {
37
- const optionalFeatures = [sessionInit.optionalFeatures, "local-floor", "bounded-floor", "hand-tracking"].flat().filter(Boolean);
38
- (_a = navigator.xr) == null ? void 0 : _a.requestSession("immersive-vr", { ...sessionInit, optionalFeatures }).then(onSessionStarted);
54
+ function showWebXRNotFound() {
55
+ disableButton();
56
+ button.textContent = "VR NOT SUPPORTED";
57
+ }
58
+ function stylizeElement(element) {
59
+ element.style.position = "absolute";
60
+ element.style.bottom = "20px";
61
+ element.style.padding = "12px 6px";
62
+ element.style.border = "1px solid #fff";
63
+ element.style.borderRadius = "4px";
64
+ element.style.background = "rgba(0,0,0,0.1)";
65
+ element.style.color = "#fff";
66
+ element.style.font = "normal 13px sans-serif";
67
+ element.style.textAlign = "center";
68
+ element.style.opacity = "0.5";
69
+ element.style.outline = "none";
70
+ element.style.zIndex = "999";
71
+ }
72
+ if ("xr" in navigator) {
73
+ stylizeElement(button);
74
+ button.id = "VRButton";
75
+ button.style.display = "none";
76
+ navigator.xr.isSessionSupported("immersive-vr").then((supported) => {
77
+ supported ? showEnterVR() : showWebXRNotFound();
78
+ if (supported && _VRButton.xrSessionIsGranted) {
79
+ button.click();
80
+ }
81
+ });
82
+ return button;
83
+ } else {
84
+ const message = document.createElement("a");
85
+ if (window.isSecureContext === false) {
86
+ message.href = document.location.href.replace(/^http:/, "https:");
87
+ message.innerHTML = "WEBXR NEEDS HTTPS";
39
88
  } else {
40
- currentSession.end();
89
+ message.href = "https://immersiveweb.dev/";
90
+ message.innerHTML = "WEBXR NOT AVAILABLE";
41
91
  }
42
- };
43
- }
44
- function disableButton() {
45
- button.style.display = "";
46
- button.style.cursor = "auto";
47
- button.style.left = "calc(50% - 75px)";
48
- button.style.width = "150px";
49
- button.onmouseenter = null;
50
- button.onmouseleave = null;
51
- button.onclick = null;
52
- }
53
- function showWebXRNotFound() {
54
- disableButton();
55
- button.textContent = "VR NOT SUPPORTED";
56
- }
57
- function stylizeElement(element) {
58
- element.style.position = "absolute";
59
- element.style.bottom = "20px";
60
- element.style.padding = "12px 6px";
61
- element.style.border = "1px solid #fff";
62
- element.style.borderRadius = "4px";
63
- element.style.background = "rgba(0,0,0,0.1)";
64
- element.style.color = "#fff";
65
- element.style.font = "normal 13px sans-serif";
66
- element.style.textAlign = "center";
67
- element.style.opacity = "0.5";
68
- element.style.outline = "none";
69
- element.style.zIndex = "999";
70
- }
71
- if ("xr" in navigator) {
72
- stylizeElement(button);
73
- button.id = "VRButton";
74
- button.style.display = "none";
75
- navigator.xr.isSessionSupported("immersive-vr").then((supported) => {
76
- supported ? showEnterVR() : showWebXRNotFound();
77
- if (supported && _VRButton.xrSessionIsGranted) {
78
- button.click();
79
- }
80
- });
81
- return button;
82
- } else {
83
- const message = document.createElement("a");
84
- if (window.isSecureContext === false) {
85
- message.href = document.location.href.replace(/^http:/, "https:");
86
- message.innerHTML = "WEBXR NEEDS HTTPS";
87
- } else {
88
- message.href = "https://immersiveweb.dev/";
89
- message.innerHTML = "WEBXR NOT AVAILABLE";
92
+ message.style.left = "calc(50% - 90px)";
93
+ message.style.width = "180px";
94
+ message.style.textDecoration = "none";
95
+ stylizeElement(message);
96
+ return message;
90
97
  }
91
- message.style.left = "calc(50% - 90px)";
92
- message.style.width = "180px";
93
- message.style.textDecoration = "none";
94
- stylizeElement(message);
95
- return message;
96
98
  }
97
- }
98
- static registerSessionGrantedListener() {
99
- if (typeof navigator !== "undefined" && "xr" in navigator) {
100
- navigator.xr.addEventListener("sessiongranted", () => {
101
- _VRButton.xrSessionIsGranted = true;
102
- });
99
+ static registerSessionGrantedListener() {
100
+ if (typeof navigator !== "undefined" && "xr" in navigator) {
101
+ navigator.xr.addEventListener("sessiongranted", () => {
102
+ _VRButton.xrSessionIsGranted = true;
103
+ });
104
+ }
103
105
  }
104
- }
105
- };
106
- let VRButton = _VRButton;
107
- __publicField(VRButton, "xrSessionIsGranted", false);
108
- VRButton.registerSessionGrantedListener();
106
+ };
107
+ let VRButton2 = _VRButton;
108
+ __publicField(VRButton2, "xrSessionIsGranted", false);
109
+ VRButton2.registerSessionGrantedListener();
110
+ return VRButton2;
111
+ })();
109
112
  export {
110
113
  VRButton
111
114
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VRButton.js","sources":["../../src/webxr/VRButton.ts"],"sourcesContent":["import { WebGLRenderer } from 'three'\n\nclass VRButton {\n static createButton(renderer: WebGLRenderer, sessionInit: XRSessionInit = {}): HTMLButtonElement | HTMLAnchorElement {\n const button = document.createElement('button')\n\n function showEnterVR(/*device*/): void {\n let currentSession: XRSession | null = null\n\n async function onSessionStarted(session: XRSession): Promise<void> {\n session.addEventListener('end', onSessionEnded)\n\n await renderer.xr.setSession(session as any)\n button.textContent = 'EXIT VR'\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/): void {\n currentSession!.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'ENTER VR'\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 = 'ENTER VR'\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 // WebXR's requestReferenceSpace only works if the corresponding feature\n // was requested at session creation time. For simplicity, just ask for\n // the interesting ones as optional features, but be aware that the\n // requestReferenceSpace call will fail if it turns out to be unavailable.\n // ('local' is always available for immersive sessions and doesn't need to\n // be requested separately.)\n\n const optionalFeatures = [sessionInit.optionalFeatures, 'local-floor', 'bounded-floor', 'hand-tracking']\n .flat()\n .filter(Boolean) as string[]\n\n ;(navigator as Navigator).xr\n ?.requestSession('immersive-vr', { ...sessionInit, optionalFeatures })\n .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 showWebXRNotFound(): void {\n disableButton()\n\n button.textContent = 'VR 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 stylizeElement(button)\n button.id = 'VRButton'\n button.style.display = 'none'\n\n // Query for session mode\n navigator.xr!.isSessionSupported('immersive-vr').then((supported) => {\n supported ? showEnterVR() : showWebXRNotFound()\n\n if (supported && VRButton.xrSessionIsGranted) {\n button.click()\n }\n })\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 static xrSessionIsGranted = false\n\n static registerSessionGrantedListener(): void {\n if (typeof navigator !== 'undefined' && 'xr' in navigator) {\n ;(navigator as Navigator).xr!.addEventListener('sessiongranted', () => {\n VRButton.xrSessionIsGranted = true\n })\n }\n }\n}\n\nVRButton.registerSessionGrantedListener()\n\nexport { VRButton }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VRButton.js","sources":["../../src/webxr/VRButton.js"],"sourcesContent":["const VRButton = /* @__PURE__ */ (() => {\n class VRButton {\n static createButton(renderer, sessionInit = {}) {\n const button = document.createElement('button')\n\n function showEnterVR(/*device*/) {\n let currentSession = null\n\n async function onSessionStarted(session) {\n session.addEventListener('end', onSessionEnded)\n\n await renderer.xr.setSession(session)\n button.textContent = 'EXIT VR'\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/) {\n currentSession.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'ENTER VR'\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 = 'ENTER VR'\n\n button.onmouseenter = () => {\n button.style.opacity = '1.0'\n }\n\n button.onmouseleave = () => {\n button.style.opacity = '0.5'\n }\n\n button.onclick = () => {\n if (currentSession === null) {\n // WebXR's requestReferenceSpace only works if the corresponding feature\n // was requested at session creation time. For simplicity, just ask for\n // the interesting ones as optional features, but be aware that the\n // requestReferenceSpace call will fail if it turns out to be unavailable.\n // ('local' is always available for immersive sessions and doesn't need to\n // be requested separately.)\n\n const optionalFeatures = [sessionInit.optionalFeatures, 'local-floor', 'bounded-floor', 'hand-tracking']\n .flat()\n .filter(Boolean)\n\n navigator.xr?.requestSession('immersive-vr', { ...sessionInit, optionalFeatures }).then(onSessionStarted)\n } else {\n currentSession.end()\n }\n }\n }\n\n function disableButton() {\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 showWebXRNotFound() {\n disableButton()\n\n button.textContent = 'VR NOT SUPPORTED'\n }\n\n function stylizeElement(element) {\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 stylizeElement(button)\n button.id = 'VRButton'\n button.style.display = 'none'\n\n // Query for session mode\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => {\n supported ? showEnterVR() : showWebXRNotFound()\n\n if (supported && VRButton.xrSessionIsGranted) {\n button.click()\n }\n })\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 static xrSessionIsGranted = false\n\n static registerSessionGrantedListener() {\n if (typeof navigator !== 'undefined' && 'xr' in navigator) {\n navigator.xr.addEventListener('sessiongranted', () => {\n VRButton.xrSessionIsGranted = true\n })\n }\n }\n }\n\n VRButton.registerSessionGrantedListener()\n\n return VRButton\n})()\n\nexport { VRButton }\n"],"names":["VRButton"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const _matrix = new THREE.Matrix4();
5
- const _vector = new THREE.Vector3();
4
+ const _matrix = /* @__PURE__ */ new THREE.Matrix4();
5
+ const _vector = /* @__PURE__ */ new THREE.Vector3();
6
6
  class XRHandPrimitiveModel {
7
7
  constructor(handModel, controller, path, handedness, options) {
8
8
  this.controller = controller;