@plastic-software/three 0.174.0 → 0.175.1
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.
- package/build/three.cjs +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -4,18 +4,77 @@ import { XRHandMeshModel } from './XRHandMeshModel.js';
|
|
|
4
4
|
const TOUCH_RADIUS = 0.01;
|
|
5
5
|
const POINTING_JOINT = 'index-finger-tip';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Represents an Oculus hand model.
|
|
9
|
+
*
|
|
10
|
+
* @augments Object3D
|
|
11
|
+
*/
|
|
7
12
|
class OculusHandModel extends Object3D {
|
|
8
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new Oculus hand model.
|
|
16
|
+
*
|
|
17
|
+
* @param {Group} controller - The hand controller.
|
|
18
|
+
* @param {?Loader} [loader=null] - A loader that is used to load hand models.
|
|
19
|
+
* @param {?Function} [onLoad=null] - A callback that is executed when a hand model has been loaded.
|
|
20
|
+
*/
|
|
9
21
|
constructor( controller, loader = null, onLoad = null ) {
|
|
10
22
|
|
|
11
23
|
super();
|
|
12
24
|
|
|
25
|
+
/**
|
|
26
|
+
* The hand controller.
|
|
27
|
+
*
|
|
28
|
+
* @type {Group}
|
|
29
|
+
*/
|
|
13
30
|
this.controller = controller;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The motion controller.
|
|
34
|
+
*
|
|
35
|
+
* @type {?MotionController}
|
|
36
|
+
* @default null
|
|
37
|
+
*/
|
|
14
38
|
this.motionController = null;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The model's environment map.
|
|
42
|
+
*
|
|
43
|
+
* @type {?Texture}
|
|
44
|
+
* @default null
|
|
45
|
+
*/
|
|
15
46
|
this.envMap = null;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* A loader that is used to load hand models.
|
|
50
|
+
*
|
|
51
|
+
* @type {?Loader}
|
|
52
|
+
* @default null
|
|
53
|
+
*/
|
|
16
54
|
this.loader = loader;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A callback that is executed when a hand model has been loaded.
|
|
58
|
+
*
|
|
59
|
+
* @type {?Function}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
17
62
|
this.onLoad = onLoad;
|
|
18
63
|
|
|
64
|
+
/**
|
|
65
|
+
* The path to the model repository.
|
|
66
|
+
*
|
|
67
|
+
* @type {?string}
|
|
68
|
+
* @default null
|
|
69
|
+
*/
|
|
70
|
+
this.path = null;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The model mesh.
|
|
74
|
+
*
|
|
75
|
+
* @type {Mesh}
|
|
76
|
+
* @default null
|
|
77
|
+
*/
|
|
19
78
|
this.mesh = null;
|
|
20
79
|
|
|
21
80
|
controller.addEventListener( 'connected', ( event ) => {
|
|
@@ -41,6 +100,12 @@ class OculusHandModel extends Object3D {
|
|
|
41
100
|
|
|
42
101
|
}
|
|
43
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Overwritten with a custom implementation. Makes sure the motion controller updates the mesh.
|
|
105
|
+
*
|
|
106
|
+
* @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
|
|
107
|
+
* when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
|
|
108
|
+
*/
|
|
44
109
|
updateMatrixWorld( force ) {
|
|
45
110
|
|
|
46
111
|
super.updateMatrixWorld( force );
|
|
@@ -53,6 +118,11 @@ class OculusHandModel extends Object3D {
|
|
|
53
118
|
|
|
54
119
|
}
|
|
55
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Returns the pointer position which is the position of the index finger tip.
|
|
123
|
+
*
|
|
124
|
+
* @return {Vector3|null} The pointer position. Returns `null` if not index finger tip joint was found.
|
|
125
|
+
*/
|
|
56
126
|
getPointerPosition() {
|
|
57
127
|
|
|
58
128
|
const indexFingerTip = this.controller.joints[ POINTING_JOINT ];
|
|
@@ -68,6 +138,13 @@ class OculusHandModel extends Object3D {
|
|
|
68
138
|
|
|
69
139
|
}
|
|
70
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Returns `true` if the current pointer position (the index finger tip) intersections
|
|
143
|
+
* with the given box object.
|
|
144
|
+
*
|
|
145
|
+
* @param {Mesh} boxObject - The box object.
|
|
146
|
+
* @return {boolean} Whether an intersection was found or not.
|
|
147
|
+
*/
|
|
71
148
|
intersectBoxObject( boxObject ) {
|
|
72
149
|
|
|
73
150
|
const pointerPosition = this.getPointerPosition();
|
|
@@ -85,6 +162,12 @@ class OculusHandModel extends Object3D {
|
|
|
85
162
|
|
|
86
163
|
}
|
|
87
164
|
|
|
165
|
+
/**
|
|
166
|
+
* Executed actions depending on the interaction state with
|
|
167
|
+
* the given button.
|
|
168
|
+
*
|
|
169
|
+
* @param {Object} button - The button.
|
|
170
|
+
*/
|
|
88
171
|
checkButton( button ) {
|
|
89
172
|
|
|
90
173
|
if ( this.intersectBoxObject( button ) ) {
|
|
@@ -19,13 +19,35 @@ const ZAXIS = /* @__PURE__ */ new Vector3( 0, 0, 1 );
|
|
|
19
19
|
const CURSOR_RADIUS = 0.02;
|
|
20
20
|
const CURSOR_MAX_DISTANCE = 1.5;
|
|
21
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Represents an Oculus hand pointer model.
|
|
24
|
+
*
|
|
25
|
+
* @augments Object3D
|
|
26
|
+
*/
|
|
22
27
|
class OculusHandPointerModel extends Object3D {
|
|
23
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new Oculus hand model.
|
|
31
|
+
*
|
|
32
|
+
* @param {Group} hand - The hand controller.
|
|
33
|
+
* @param {Group} controller - The WebXR controller in target ray space.
|
|
34
|
+
*/
|
|
24
35
|
constructor( hand, controller ) {
|
|
25
36
|
|
|
26
37
|
super();
|
|
27
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The hand controller.
|
|
41
|
+
*
|
|
42
|
+
* @type {Group}
|
|
43
|
+
*/
|
|
28
44
|
this.hand = hand;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The WebXR controller in target ray space.
|
|
48
|
+
*
|
|
49
|
+
* @type {Group}
|
|
50
|
+
*/
|
|
29
51
|
this.controller = controller;
|
|
30
52
|
|
|
31
53
|
// Unused
|
|
@@ -33,15 +55,61 @@ class OculusHandPointerModel extends Object3D {
|
|
|
33
55
|
this.envMap = null;
|
|
34
56
|
this.mesh = null;
|
|
35
57
|
|
|
58
|
+
/**
|
|
59
|
+
* The pointer geometry.
|
|
60
|
+
*
|
|
61
|
+
* @type {?BufferGeometry}
|
|
62
|
+
* @default null
|
|
63
|
+
*/
|
|
36
64
|
this.pointerGeometry = null;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The pointer mesh.
|
|
68
|
+
*
|
|
69
|
+
* @type {?Mesh}
|
|
70
|
+
* @default null
|
|
71
|
+
*/
|
|
37
72
|
this.pointerMesh = null;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The pointer object that holds the pointer mesh.
|
|
76
|
+
*
|
|
77
|
+
* @type {?Object3D}
|
|
78
|
+
* @default null
|
|
79
|
+
*/
|
|
38
80
|
this.pointerObject = null;
|
|
39
81
|
|
|
82
|
+
/**
|
|
83
|
+
* Whether the model is pinched or not.
|
|
84
|
+
*
|
|
85
|
+
* @type {?boolean}
|
|
86
|
+
* @default false
|
|
87
|
+
*/
|
|
40
88
|
this.pinched = false;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Whether the model is attached or not.
|
|
92
|
+
*
|
|
93
|
+
* @type {boolean}
|
|
94
|
+
* @default false
|
|
95
|
+
*/
|
|
41
96
|
this.attached = false;
|
|
42
97
|
|
|
98
|
+
/**
|
|
99
|
+
* The cursor object.
|
|
100
|
+
*
|
|
101
|
+
* @type {?Mesh}
|
|
102
|
+
* @default null
|
|
103
|
+
*/
|
|
43
104
|
this.cursorObject = null;
|
|
44
105
|
|
|
106
|
+
/**
|
|
107
|
+
* The internal raycaster used for detecting
|
|
108
|
+
* intersections.
|
|
109
|
+
*
|
|
110
|
+
* @type {?Raycaster}
|
|
111
|
+
* @default null
|
|
112
|
+
*/
|
|
45
113
|
this.raycaster = null;
|
|
46
114
|
|
|
47
115
|
this._onConnected = this._onConnected.bind( this );
|
|
@@ -143,6 +211,9 @@ class OculusHandPointerModel extends Object3D {
|
|
|
143
211
|
|
|
144
212
|
}
|
|
145
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Creates a pointer mesh and adds it to this model.
|
|
216
|
+
*/
|
|
146
217
|
createPointer() {
|
|
147
218
|
|
|
148
219
|
let i, j;
|
|
@@ -317,6 +388,12 @@ class OculusHandPointerModel extends Object3D {
|
|
|
317
388
|
|
|
318
389
|
}
|
|
319
390
|
|
|
391
|
+
/**
|
|
392
|
+
* Overwritten with a custom implementation. Makes sure the internal pointer and raycaster are updated.
|
|
393
|
+
*
|
|
394
|
+
* @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
|
|
395
|
+
* when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
|
|
396
|
+
*/
|
|
320
397
|
updateMatrixWorld( force ) {
|
|
321
398
|
|
|
322
399
|
super.updateMatrixWorld( force );
|
|
@@ -329,24 +406,47 @@ class OculusHandPointerModel extends Object3D {
|
|
|
329
406
|
|
|
330
407
|
}
|
|
331
408
|
|
|
409
|
+
/**
|
|
410
|
+
* Returns `true` is the model is pinched.
|
|
411
|
+
*
|
|
412
|
+
* @return {boolean} Whether the model is pinched or not.
|
|
413
|
+
*/
|
|
332
414
|
isPinched() {
|
|
333
415
|
|
|
334
416
|
return this.pinched;
|
|
335
417
|
|
|
336
418
|
}
|
|
337
419
|
|
|
420
|
+
/**
|
|
421
|
+
* Sets the attached state.
|
|
422
|
+
*
|
|
423
|
+
* @param {boolean} attached - Whether the model is attached or not.
|
|
424
|
+
*/
|
|
338
425
|
setAttached( attached ) {
|
|
339
426
|
|
|
340
427
|
this.attached = attached;
|
|
341
428
|
|
|
342
429
|
}
|
|
343
430
|
|
|
431
|
+
/**
|
|
432
|
+
* Returns `true` is the model is attached.
|
|
433
|
+
*
|
|
434
|
+
* @return {boolean} Whether the model is attached or not.
|
|
435
|
+
*/
|
|
344
436
|
isAttached() {
|
|
345
437
|
|
|
346
438
|
return this.attached;
|
|
347
439
|
|
|
348
440
|
}
|
|
349
441
|
|
|
442
|
+
/**
|
|
443
|
+
* Performs an intersection test with the model's raycaster and the given object.
|
|
444
|
+
*
|
|
445
|
+
* @param {Object3D} object - The 3D object to check for intersection with the ray.
|
|
446
|
+
* @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
|
|
447
|
+
* Otherwise it only checks intersection with the object.
|
|
448
|
+
* @return {Array<Raycaster~Intersection>} An array holding the intersection points.
|
|
449
|
+
*/
|
|
350
450
|
intersectObject( object, recursive = true ) {
|
|
351
451
|
|
|
352
452
|
if ( this.raycaster ) {
|
|
@@ -357,6 +457,14 @@ class OculusHandPointerModel extends Object3D {
|
|
|
357
457
|
|
|
358
458
|
}
|
|
359
459
|
|
|
460
|
+
/**
|
|
461
|
+
* Performs an intersection test with the model's raycaster and the given objects.
|
|
462
|
+
*
|
|
463
|
+
* @param {Array<Object3D>} objects - The 3D objects to check for intersection with the ray.
|
|
464
|
+
* @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
|
|
465
|
+
* Otherwise it only checks intersection with the object.
|
|
466
|
+
* @return {Array<Raycaster~Intersection>} An array holding the intersection points.
|
|
467
|
+
*/
|
|
360
468
|
intersectObjects( objects, recursive = true ) {
|
|
361
469
|
|
|
362
470
|
if ( this.raycaster ) {
|
|
@@ -367,6 +475,14 @@ class OculusHandPointerModel extends Object3D {
|
|
|
367
475
|
|
|
368
476
|
}
|
|
369
477
|
|
|
478
|
+
/**
|
|
479
|
+
* Checks for intersections between the model's raycaster and the given objects. The method
|
|
480
|
+
* updates the cursor object to the intersection point.
|
|
481
|
+
*
|
|
482
|
+
* @param {Array<Object3D>} objects - The 3D objects to check for intersection with the ray.
|
|
483
|
+
* @param {boolean} [recursive=false] - If set to `true`, it also checks all descendants.
|
|
484
|
+
* Otherwise it only checks intersection with the object.
|
|
485
|
+
*/
|
|
370
486
|
checkIntersections( objects, recursive = false ) {
|
|
371
487
|
|
|
372
488
|
if ( this.raycaster && ! this.attached ) {
|
|
@@ -389,6 +505,11 @@ class OculusHandPointerModel extends Object3D {
|
|
|
389
505
|
|
|
390
506
|
}
|
|
391
507
|
|
|
508
|
+
/**
|
|
509
|
+
* Sets the cursor to the given distance.
|
|
510
|
+
*
|
|
511
|
+
* @param {number} distance - The distance to set the cursor to.
|
|
512
|
+
*/
|
|
392
513
|
setCursor( distance ) {
|
|
393
514
|
|
|
394
515
|
const direction = new Vector3( 0, 0, - 1 );
|
|
@@ -400,6 +521,10 @@ class OculusHandPointerModel extends Object3D {
|
|
|
400
521
|
|
|
401
522
|
}
|
|
402
523
|
|
|
524
|
+
/**
|
|
525
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
526
|
+
* method whenever this instance is no longer used in your app.
|
|
527
|
+
*/
|
|
403
528
|
dispose() {
|
|
404
529
|
|
|
405
530
|
this._onDisconnected();
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { DoubleSide, Mesh, MeshBasicMaterial, PlaneGeometry, Texture } from 'three';
|
|
2
2
|
|
|
3
|
+
/** @module Text2D */
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A helper function for creating a simple plane mesh
|
|
7
|
+
* that can be used as a text label. The mesh's material
|
|
8
|
+
* holds a canvas texture that displays the given message.
|
|
9
|
+
*
|
|
10
|
+
* @param {string} message - The message to display.
|
|
11
|
+
* @param {number} height - The labels height.
|
|
12
|
+
* @return {Mesh} The plane mesh representing a text label.
|
|
13
|
+
*/
|
|
3
14
|
function createText( message, height ) {
|
|
4
15
|
|
|
5
16
|
const canvas = document.createElement( 'canvas' );
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A utility class for creating a button that allows to initiate
|
|
3
|
+
* immersive VR sessions based on WebXR. The button can be created
|
|
4
|
+
* with a factory method and then appended ot the website's DOM.
|
|
5
|
+
*
|
|
6
|
+
* ```js
|
|
7
|
+
* document.body.appendChild( VRButton.createButton( renderer ) );
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* @hideconstructor
|
|
11
|
+
*/
|
|
1
12
|
class VRButton {
|
|
2
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new VR button.
|
|
16
|
+
*
|
|
17
|
+
* @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
|
|
18
|
+
* @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
|
|
19
|
+
* @return {HTMLElement} The button or an error message if `immersive-ar` isn't supported.
|
|
20
|
+
*/
|
|
3
21
|
static createButton( renderer, sessionInit = {} ) {
|
|
4
22
|
|
|
5
23
|
const button = document.createElement( 'button' );
|
|
@@ -207,6 +225,11 @@ class VRButton {
|
|
|
207
225
|
|
|
208
226
|
}
|
|
209
227
|
|
|
228
|
+
/**
|
|
229
|
+
* Registers a `sessiongranted` event listener. When a session is granted, the {@link VRButton#xrSessionIsGranted}
|
|
230
|
+
* flag will evaluate to `true`. This method is automatically called by the module itself so there
|
|
231
|
+
* should be no need to use it on app level.
|
|
232
|
+
*/
|
|
210
233
|
static registerSessionGrantedListener() {
|
|
211
234
|
|
|
212
235
|
if ( typeof navigator !== 'undefined' && 'xr' in navigator ) {
|
|
@@ -227,6 +250,13 @@ class VRButton {
|
|
|
227
250
|
|
|
228
251
|
}
|
|
229
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Whether a XR session has been granted or not.
|
|
255
|
+
*
|
|
256
|
+
* @static
|
|
257
|
+
* @type {boolean}
|
|
258
|
+
* @default false
|
|
259
|
+
*/
|
|
230
260
|
VRButton.xrSessionIsGranted = false;
|
|
231
261
|
VRButton.registerSessionGrantedListener();
|
|
232
262
|
|
|
@@ -1,5 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A utility class for creating a button that allows to initiate
|
|
3
|
+
* immersive XR sessions based on WebXR. The button can be created
|
|
4
|
+
* with a factory method and then appended ot the website's DOM.
|
|
5
|
+
*
|
|
6
|
+
* ```js
|
|
7
|
+
* document.body.appendChild( XRButton.createButton( renderer ) );
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* Compared to {@link ARButton} and {@link VRButton}, this class will
|
|
11
|
+
* try to offer an immersive AR session first. If the device does not
|
|
12
|
+
* support this type of session, it uses an immersive VR session.
|
|
13
|
+
*
|
|
14
|
+
* @hideconstructor
|
|
15
|
+
*/
|
|
1
16
|
class XRButton {
|
|
2
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new XR button.
|
|
20
|
+
*
|
|
21
|
+
* @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
|
|
22
|
+
* @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
|
|
23
|
+
* @return {HTMLElement} The button or an error message if WebXR isn't supported.
|
|
24
|
+
*/
|
|
3
25
|
static createButton( renderer, sessionInit = {} ) {
|
|
4
26
|
|
|
5
27
|
const button = document.createElement( 'button' );
|
|
@@ -16,17 +16,44 @@ import {
|
|
|
16
16
|
const DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';
|
|
17
17
|
const DEFAULT_PROFILE = 'generic-trigger';
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Represents a XR controller model.
|
|
21
|
+
*
|
|
22
|
+
* @augments Object3D
|
|
23
|
+
*/
|
|
19
24
|
class XRControllerModel extends Object3D {
|
|
20
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new XR controller model.
|
|
28
|
+
*/
|
|
21
29
|
constructor() {
|
|
22
30
|
|
|
23
31
|
super();
|
|
24
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The motion controller.
|
|
35
|
+
*
|
|
36
|
+
* @type {?MotionController}
|
|
37
|
+
* @default null
|
|
38
|
+
*/
|
|
25
39
|
this.motionController = null;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The controller's environment map.
|
|
43
|
+
*
|
|
44
|
+
* @type {?Texture}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
26
47
|
this.envMap = null;
|
|
27
48
|
|
|
28
49
|
}
|
|
29
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Sets an environment map that is applied to the controller model.
|
|
53
|
+
*
|
|
54
|
+
* @param {?Texture} envMap - The environment map to apply.
|
|
55
|
+
* @return {XRControllerModel} A reference to this instance.
|
|
56
|
+
*/
|
|
30
57
|
setEnvironmentMap( envMap ) {
|
|
31
58
|
|
|
32
59
|
if ( this.envMap == envMap ) {
|
|
@@ -52,10 +79,11 @@ class XRControllerModel extends Object3D {
|
|
|
52
79
|
}
|
|
53
80
|
|
|
54
81
|
/**
|
|
55
|
-
* Polls data from the XRInputSource and updates the
|
|
56
|
-
* the real world data
|
|
82
|
+
* Overwritten with a custom implementation. Polls data from the XRInputSource and updates the
|
|
83
|
+
* model's components to match the real world data.
|
|
57
84
|
*
|
|
58
|
-
* @param {boolean} force
|
|
85
|
+
* @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
|
|
86
|
+
* when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
|
|
59
87
|
*/
|
|
60
88
|
updateMatrixWorld( force ) {
|
|
61
89
|
|
|
@@ -112,6 +140,7 @@ class XRControllerModel extends Object3D {
|
|
|
112
140
|
* saves them to the motionController components for use in the frame loop. When
|
|
113
141
|
* touchpads are found, attaches a touch dot to them.
|
|
114
142
|
*
|
|
143
|
+
* @private
|
|
115
144
|
* @param {MotionController} motionController
|
|
116
145
|
* @param {Object3D} scene
|
|
117
146
|
*/
|
|
@@ -209,13 +238,56 @@ function addAssetSceneToControllerModel( controllerModel, scene ) {
|
|
|
209
238
|
|
|
210
239
|
}
|
|
211
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Allows to create controller models for WebXR controllers that can be added as a visual
|
|
243
|
+
* representation to your scene. `XRControllerModelFactory` will automatically fetch controller
|
|
244
|
+
* models that match what the user is holding as closely as possible. The models should be
|
|
245
|
+
* attached to the object returned from getControllerGrip in order to match the orientation of
|
|
246
|
+
* the held device.
|
|
247
|
+
*
|
|
248
|
+
* This module depends on the [motion-controllers]{@link https://github.com/immersive-web/webxr-input-profiles/blob/main/packages/motion-controllers/README.md}
|
|
249
|
+
* third-part library.
|
|
250
|
+
*
|
|
251
|
+
* ```js
|
|
252
|
+
* const controllerModelFactory = new XRControllerModelFactory();
|
|
253
|
+
*
|
|
254
|
+
* const controllerGrip = renderer.xr.getControllerGrip( 0 );
|
|
255
|
+
* controllerGrip.add( controllerModelFactory.createControllerModel( controllerGrip ) );
|
|
256
|
+
* scene.add( controllerGrip );
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
212
259
|
class XRControllerModelFactory {
|
|
213
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Constructs a new XR controller model factory.
|
|
263
|
+
*
|
|
264
|
+
* @param {?GLTFLoader} [gltfLoader=null] - A glTF loader that is used to load controller models.
|
|
265
|
+
* @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
|
|
266
|
+
*/
|
|
214
267
|
constructor( gltfLoader = null, onLoad = null ) {
|
|
215
268
|
|
|
269
|
+
/**
|
|
270
|
+
* A glTF loader that is used to load controller models.
|
|
271
|
+
*
|
|
272
|
+
* @type {?GLTFLoader}
|
|
273
|
+
* @default null
|
|
274
|
+
*/
|
|
216
275
|
this.gltfLoader = gltfLoader;
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* The path to the model repository.
|
|
279
|
+
*
|
|
280
|
+
* @type {string}
|
|
281
|
+
*/
|
|
217
282
|
this.path = DEFAULT_PROFILES_PATH;
|
|
218
283
|
this._assetCache = {};
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* A callback that is executed when a controller model has been loaded.
|
|
287
|
+
*
|
|
288
|
+
* @type {?Function}
|
|
289
|
+
* @default null
|
|
290
|
+
*/
|
|
219
291
|
this.onLoad = onLoad;
|
|
220
292
|
|
|
221
293
|
// If a GLTFLoader wasn't supplied to the constructor create a new one.
|
|
@@ -227,6 +299,12 @@ class XRControllerModelFactory {
|
|
|
227
299
|
|
|
228
300
|
}
|
|
229
301
|
|
|
302
|
+
/**
|
|
303
|
+
* Sets the path to the model repository.
|
|
304
|
+
*
|
|
305
|
+
* @param {string} path - The path to set.
|
|
306
|
+
* @return {XRControllerModelFactory} A reference to this instance.
|
|
307
|
+
*/
|
|
230
308
|
setPath( path ) {
|
|
231
309
|
|
|
232
310
|
this.path = path;
|
|
@@ -235,6 +313,12 @@ class XRControllerModelFactory {
|
|
|
235
313
|
|
|
236
314
|
}
|
|
237
315
|
|
|
316
|
+
/**
|
|
317
|
+
* Creates a controller model for the given WebXR controller.
|
|
318
|
+
*
|
|
319
|
+
* @param {Group} controller - The controller.
|
|
320
|
+
* @return {XRControllerModel} The XR controller model.
|
|
321
|
+
*/
|
|
238
322
|
createControllerModel( controller ) {
|
|
239
323
|
|
|
240
324
|
const controllerModel = new XRControllerModel();
|
|
@@ -133,22 +133,49 @@ class SessionLightProbe {
|
|
|
133
133
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
/**
|
|
137
|
+
* This class can be used to represent the environmental light of
|
|
138
|
+
* a XR session. It relies on the WebXR Lighting Estimation API.
|
|
139
|
+
*
|
|
140
|
+
* @augments Group
|
|
141
|
+
*/
|
|
136
142
|
export class XREstimatedLight extends Group {
|
|
137
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Constructs a new light.
|
|
146
|
+
*
|
|
147
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
148
|
+
* @param {boolean} [environmentEstimation=true] - Whether to use environment estimation or not.
|
|
149
|
+
*/
|
|
138
150
|
constructor( renderer, environmentEstimation = true ) {
|
|
139
151
|
|
|
140
152
|
super();
|
|
141
153
|
|
|
154
|
+
/**
|
|
155
|
+
* The light probe that represents the estimated light.
|
|
156
|
+
*
|
|
157
|
+
* @type {LightProbe}
|
|
158
|
+
*/
|
|
142
159
|
this.lightProbe = new LightProbe();
|
|
143
160
|
this.lightProbe.intensity = 0;
|
|
144
161
|
this.add( this.lightProbe );
|
|
145
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Represents the primary light from the XR environment.
|
|
165
|
+
*
|
|
166
|
+
* @type {DirectionalLight}
|
|
167
|
+
*/
|
|
146
168
|
this.directionalLight = new DirectionalLight();
|
|
147
169
|
this.directionalLight.intensity = 0;
|
|
148
170
|
this.add( this.directionalLight );
|
|
149
171
|
|
|
150
|
-
|
|
151
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Will be set to a cube map in the SessionLightProbe if environment estimation is
|
|
174
|
+
* available and requested.
|
|
175
|
+
*
|
|
176
|
+
* @type {?Texture}
|
|
177
|
+
* @default null
|
|
178
|
+
*/
|
|
152
179
|
this.environment = null;
|
|
153
180
|
|
|
154
181
|
let sessionLightProbe = null;
|
|
@@ -198,7 +225,10 @@ export class XREstimatedLight extends Group {
|
|
|
198
225
|
|
|
199
226
|
} );
|
|
200
227
|
|
|
201
|
-
|
|
228
|
+
/**
|
|
229
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
230
|
+
* method whenever this instance is no longer used in your app.
|
|
231
|
+
*/
|
|
202
232
|
this.dispose = () => {
|
|
203
233
|
|
|
204
234
|
if ( sessionLightProbe ) {
|
|
@@ -2,13 +2,45 @@ import { GLTFLoader } from '../loaders/GLTFLoader.js';
|
|
|
2
2
|
|
|
3
3
|
const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Represents one of the hand model types {@link XRHandModelFactory} might produce
|
|
7
|
+
* depending on the selected profile. `XRHandMeshModel` represents a hand with a
|
|
8
|
+
* custom asset.
|
|
9
|
+
*/
|
|
5
10
|
class XRHandMeshModel {
|
|
6
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new XR hand mesh model.
|
|
14
|
+
*
|
|
15
|
+
* @param {XRHandModel} handModel - The hand model.
|
|
16
|
+
* @param {Group} controller - The WebXR controller.
|
|
17
|
+
* @param {?string} path - The model path.
|
|
18
|
+
* @param {XRHandedness} handedness - The handedness of the XR input source.
|
|
19
|
+
* @param {?Loader} [loader=null] - The loader. If not provided, an instance of `GLTFLoader` will be used to load models.
|
|
20
|
+
* @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
|
|
21
|
+
*/
|
|
7
22
|
constructor( handModel, controller, path, handedness, loader = null, onLoad = null ) {
|
|
8
23
|
|
|
24
|
+
/**
|
|
25
|
+
* The WebXR controller.
|
|
26
|
+
*
|
|
27
|
+
* @type {Group}
|
|
28
|
+
*/
|
|
9
29
|
this.controller = controller;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The hand model.
|
|
33
|
+
*
|
|
34
|
+
* @type {XRHandModel}
|
|
35
|
+
*/
|
|
10
36
|
this.handModel = handModel;
|
|
11
37
|
|
|
38
|
+
/**
|
|
39
|
+
* An array of bones representing the bones
|
|
40
|
+
* of the hand skeleton.
|
|
41
|
+
*
|
|
42
|
+
* @type {Array<Bone>}
|
|
43
|
+
*/
|
|
12
44
|
this.bones = [];
|
|
13
45
|
|
|
14
46
|
if ( loader === null ) {
|
|
@@ -80,6 +112,9 @@ class XRHandMeshModel {
|
|
|
80
112
|
|
|
81
113
|
}
|
|
82
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Updates the mesh based on the tracked XR joints data.
|
|
117
|
+
*/
|
|
83
118
|
updateMesh() {
|
|
84
119
|
|
|
85
120
|
// XR Joints
|