@ohos-ports/react-three-drei 10.7.7-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +852 -0
- package/core/AccumulativeShadows.cjs.js +1 -0
- package/core/AccumulativeShadows.d.ts +59 -0
- package/core/AccumulativeShadows.js +310 -0
- package/core/AdaptiveDpr.cjs.js +1 -0
- package/core/AdaptiveDpr.d.ts +3 -0
- package/core/AdaptiveDpr.js +28 -0
- package/core/AdaptiveEvents.cjs.js +1 -0
- package/core/AdaptiveEvents.d.ts +1 -0
- package/core/AdaptiveEvents.js +20 -0
- package/core/ArcballControls.cjs.js +1 -0
- package/core/ArcballControls.d.ts +15 -0
- package/core/ArcballControls.js +67 -0
- package/core/AsciiRenderer.cjs.js +1 -0
- package/core/AsciiRenderer.d.ts +11 -0
- package/core/AsciiRenderer.js +66 -0
- package/core/BBAnchor.cjs.js +1 -0
- package/core/BBAnchor.d.ts +7 -0
- package/core/BBAnchor.js +37 -0
- package/core/Backdrop.cjs.js +1 -0
- package/core/Backdrop.d.ts +15 -0
- package/core/Backdrop.js +33 -0
- package/core/BakeShadows.cjs.js +1 -0
- package/core/BakeShadows.d.ts +1 -0
- package/core/BakeShadows.js +16 -0
- package/core/Billboard.cjs.js +1 -0
- package/core/Billboard.d.ts +10 -0
- package/core/Billboard.js +53 -0
- package/core/Bounds.cjs.js +1 -0
- package/core/Bounds.d.ts +36 -0
- package/core/Bounds.js +254 -0
- package/core/Bvh.cjs.js +1 -0
- package/core/Bvh.d.ts +19 -0
- package/core/Bvh.js +92 -0
- package/core/CameraControls.cjs.js +1 -0
- package/core/CameraControls.d.ts +48 -0
- package/core/CameraControls.js +151 -0
- package/core/CameraShake.cjs.js +1 -0
- package/core/CameraShake.d.ts +17 -0
- package/core/CameraShake.js +57 -0
- package/core/CatmullRomLine.cjs.js +1 -0
- package/core/CatmullRomLine.d.ts +10 -0
- package/core/CatmullRomLine.js +42 -0
- package/core/Caustics.cjs.js +1 -0
- package/core/Caustics.d.ts +32 -0
- package/core/Caustics.js +388 -0
- package/core/Center.cjs.js +1 -0
- package/core/Center.d.ts +33 -0
- package/core/Center.js +67 -0
- package/core/Clone.cjs.js +1 -0
- package/core/Clone.d.ts +15 -0
- package/core/Clone.js +100 -0
- package/core/Cloud.cjs.js +1 -0
- package/core/Cloud.d.ts +97 -0
- package/core/Cloud.js +231 -0
- package/core/ComputedAttribute.cjs.js +1 -0
- package/core/ComputedAttribute.d.ts +8 -0
- package/core/ComputedAttribute.js +33 -0
- package/core/ContactShadows.cjs.js +1 -0
- package/core/ContactShadows.d.ts +18 -0
- package/core/ContactShadows.js +114 -0
- package/core/CubeCamera.cjs.js +1 -0
- package/core/CubeCamera.d.ts +21 -0
- package/core/CubeCamera.js +86 -0
- package/core/CubeTexture.cjs.js +1 -0
- package/core/CubeTexture.d.ts +14 -0
- package/core/CubeTexture.js +25 -0
- package/core/CubicBezierLine.cjs.js +1 -0
- package/core/CubicBezierLine.d.ts +12 -0
- package/core/CubicBezierLine.js +28 -0
- package/core/CurveModifier.cjs.js +1 -0
- package/core/CurveModifier.d.ts +11 -0
- package/core/CurveModifier.js +27 -0
- package/core/Decal.cjs.js +1 -0
- package/core/Decal.d.ts +16 -0
- package/core/Decal.js +128 -0
- package/core/Detailed.cjs.js +1 -0
- package/core/Detailed.d.ts +10 -0
- package/core/Detailed.js +33 -0
- package/core/DetectGPU.cjs.js +1 -0
- package/core/DetectGPU.d.ts +7 -0
- package/core/DetectGPU.js +14 -0
- package/core/DeviceOrientationControls.cjs.js +1 -0
- package/core/DeviceOrientationControls.d.ts +10 -0
- package/core/DeviceOrientationControls.js +51 -0
- package/core/Edges.cjs.js +1 -0
- package/core/Edges.d.ts +13 -0
- package/core/Edges.js +38 -0
- package/core/Effects.cjs.js +1 -0
- package/core/Effects.d.ts +25 -0
- package/core/Effects.js +91 -0
- package/core/Environment.cjs.js +1 -0
- package/core/Environment.d.ts +37 -0
- package/core/Environment.js +189 -0
- package/core/Example.cjs.js +1 -0
- package/core/Example.d.ts +13 -0
- package/core/Example.js +46 -0
- package/core/Fbo.cjs.js +1 -0
- package/core/Fbo.d.ts +22 -0
- package/core/Fbo.js +63 -0
- package/core/Fbx.cjs.js +1 -0
- package/core/Fbx.d.ts +11 -0
- package/core/Fbx.js +23 -0
- package/core/FirstPersonControls.cjs.js +1 -0
- package/core/FirstPersonControls.d.ts +8 -0
- package/core/FirstPersonControls.js +38 -0
- package/core/Fisheye.cjs.js +1 -0
- package/core/Fisheye.d.ts +10 -0
- package/core/Fisheye.js +95 -0
- package/core/Float.cjs.js +1 -0
- package/core/Float.d.ts +14 -0
- package/core/Float.js +37 -0
- package/core/FlyControls.cjs.js +1 -0
- package/core/FlyControls.d.ts +10 -0
- package/core/FlyControls.js +55 -0
- package/core/GizmoHelper.cjs.js +1 -0
- package/core/GizmoHelper.d.ts +16 -0
- package/core/GizmoHelper.js +116 -0
- package/core/GizmoViewcube.cjs.js +1 -0
- package/core/GizmoViewcube.d.ts +14 -0
- package/core/GizmoViewcube.js +133 -0
- package/core/GizmoViewport.cjs.js +1 -0
- package/core/GizmoViewport.d.ts +16 -0
- package/core/GizmoViewport.js +140 -0
- package/core/Gltf.cjs.js +1 -0
- package/core/Gltf.d.ts +27 -0
- package/core/Gltf.js +52 -0
- package/core/GradientTexture.cjs.js +1 -0
- package/core/GradientTexture.d.ts +18 -0
- package/core/GradientTexture.js +54 -0
- package/core/Grid.cjs.js +1 -0
- package/core/Grid.d.ts +26 -0
- package/core/Grid.js +142 -0
- package/core/Helper.cjs.js +1 -0
- package/core/Helper.d.ts +16 -0
- package/core/Helper.js +47 -0
- package/core/Hud.cjs.js +1 -0
- package/core/Hud.d.ts +6 -0
- package/core/Hud.js +55 -0
- package/core/Image.cjs.js +1 -0
- package/core/Image.d.ts +38 -0
- package/core/Image.js +160 -0
- package/core/Instances.cjs.js +1 -0
- package/core/Instances.d.ts +64 -0
- package/core/Instances.js +313 -0
- package/core/Ktx2.cjs.js +1 -0
- package/core/Ktx2.d.ts +14 -0
- package/core/Ktx2.js +48 -0
- package/core/Lightformer.cjs.js +1 -0
- package/core/Lightformer.d.ts +15 -0
- package/core/Lightformer.js +63 -0
- package/core/Line.cjs.js +1 -0
- package/core/Line.d.ts +13 -0
- package/core/Line.js +73 -0
- package/core/MapControls.cjs.js +1 -0
- package/core/MapControls.d.ts +14 -0
- package/core/MapControls.js +63 -0
- package/core/MarchingCubes.cjs.js +1 -0
- package/core/MarchingCubes.d.ts +24 -0
- package/core/MarchingCubes.js +78 -0
- package/core/Mask.cjs.js +1 -0
- package/core/Mask.d.ts +17 -0
- package/core/Mask.js +42 -0
- package/core/MatcapTexture.cjs.js +1 -0
- package/core/MatcapTexture.d.ts +9 -0
- package/core/MatcapTexture.js +51 -0
- package/core/MeshDiscardMaterial.cjs.js +1 -0
- package/core/MeshDiscardMaterial.d.ts +10 -0
- package/core/MeshDiscardMaterial.js +15 -0
- package/core/MeshDistortMaterial.cjs.js +1 -0
- package/core/MeshDistortMaterial.d.ts +39 -0
- package/core/MeshDistortMaterial.js +72 -0
- package/core/MeshPortalMaterial.cjs.js +1 -0
- package/core/MeshPortalMaterial.d.ts +25 -0
- package/core/MeshPortalMaterial.js +467 -0
- package/core/MeshReflectorMaterial.cjs.js +1 -0
- package/core/MeshReflectorMaterial.d.ts +14 -0
- package/core/MeshReflectorMaterial.js +180 -0
- package/core/MeshRefractionMaterial.cjs.js +1 -0
- package/core/MeshRefractionMaterial.d.ts +19 -0
- package/core/MeshRefractionMaterial.js +73 -0
- package/core/MeshTransmissionMaterial.cjs.js +1 -0
- package/core/MeshTransmissionMaterial.d.ts +34 -0
- package/core/MeshTransmissionMaterial.js +402 -0
- package/core/MeshWobbleMaterial.cjs.js +1 -0
- package/core/MeshWobbleMaterial.d.ts +36 -0
- package/core/MeshWobbleMaterial.js +60 -0
- package/core/MotionPathControls.cjs.js +1 -0
- package/core/MotionPathControls.d.ts +33 -0
- package/core/MotionPathControls.js +121 -0
- package/core/MultiMaterial.cjs.js +1 -0
- package/core/MultiMaterial.d.ts +4 -0
- package/core/MultiMaterial.js +29 -0
- package/core/NormalTexture.cjs.js +1 -0
- package/core/NormalTexture.d.ts +14 -0
- package/core/NormalTexture.js +42 -0
- package/core/OrbitControls.cjs.js +1 -0
- package/core/OrbitControls.d.ts +22 -0
- package/core/OrbitControls.js +79 -0
- package/core/OrthographicCamera.cjs.js +1 -0
- package/core/OrthographicCamera.d.ts +14 -0
- package/core/OrthographicCamera.js +76 -0
- package/core/Outlines.cjs.js +1 -0
- package/core/Outlines.d.ts +17 -0
- package/core/Outlines.js +166 -0
- package/core/PerformanceMonitor.cjs.js +1 -0
- package/core/PerformanceMonitor.d.ts +36 -0
- package/core/PerformanceMonitor.js +116 -0
- package/core/PerspectiveCamera.cjs.js +1 -0
- package/core/PerspectiveCamera.d.ts +14 -0
- package/core/PerspectiveCamera.js +72 -0
- package/core/PointMaterial.cjs.js +1 -0
- package/core/PointMaterial.d.ts +8 -0
- package/core/PointMaterial.js +36 -0
- package/core/PointerLockControls.cjs.js +1 -0
- package/core/PointerLockControls.d.ts +15 -0
- package/core/PointerLockControls.js +89 -0
- package/core/Points.cjs.js +1 -0
- package/core/Points.d.ts +31 -0
- package/core/Points.js +202 -0
- package/core/PositionalAudio.cjs.js +1 -0
- package/core/PositionalAudio.d.ts +9 -0
- package/core/PositionalAudio.js +46 -0
- package/core/Preload.cjs.js +1 -0
- package/core/Preload.d.ts +7 -0
- package/core/Preload.js +44 -0
- package/core/Progress.cjs.js +1 -0
- package/core/Progress.d.ts +14 -0
- package/core/Progress.js +55 -0
- package/core/QuadraticBezierLine.cjs.js +1 -0
- package/core/QuadraticBezierLine.d.ts +14 -0
- package/core/QuadraticBezierLine.js +42 -0
- package/core/RenderCubeTexture.cjs.js +1 -0
- package/core/RenderCubeTexture.d.ts +30 -0
- package/core/RenderCubeTexture.js +96 -0
- package/core/RenderTexture.cjs.js +1 -0
- package/core/RenderTexture.d.ts +18 -0
- package/core/RenderTexture.js +105 -0
- package/core/Resize.cjs.js +1 -0
- package/core/Resize.d.ts +17 -0
- package/core/Resize.js +39 -0
- package/core/RoundedBox.cjs.js +1 -0
- package/core/RoundedBox.d.ts +14 -0
- package/core/RoundedBox.js +70 -0
- package/core/Sampler.cjs.js +1 -0
- package/core/Sampler.d.ts +28 -0
- package/core/Sampler.js +75 -0
- package/core/ScreenQuad.cjs.js +1 -0
- package/core/ScreenQuad.d.ts +5 -0
- package/core/ScreenQuad.js +25 -0
- package/core/ScreenSizer.cjs.js +1 -0
- package/core/ScreenSizer.d.ts +7 -0
- package/core/ScreenSizer.js +39 -0
- package/core/ScreenSpace.cjs.js +1 -0
- package/core/ScreenSpace.d.ts +7 -0
- package/core/ScreenSpace.js +25 -0
- package/core/Segments.cjs.js +1 -0
- package/core/Segments.d.ts +29 -0
- package/core/Segments.js +96 -0
- package/core/Shadow.cjs.js +1 -0
- package/core/Shadow.d.ts +12 -0
- package/core/Shadow.js +42 -0
- package/core/ShadowAlpha.cjs.js +1 -0
- package/core/ShadowAlpha.d.ts +7 -0
- package/core/ShadowAlpha.js +108 -0
- package/core/Sky.cjs.js +1 -0
- package/core/Sky.d.ts +16 -0
- package/core/Sky.js +39 -0
- package/core/Sparkles.cjs.js +1 -0
- package/core/Sparkles.d.ts +26 -0
- package/core/Sparkles.js +161 -0
- package/core/Splat.cjs.js +1 -0
- package/core/Splat.d.ts +56 -0
- package/core/Splat.js +506 -0
- package/core/SpotLight.cjs.js +1 -0
- package/core/SpotLight.d.ts +27 -0
- package/core/SpotLight.js +223 -0
- package/core/SpriteAnimator.cjs.js +1 -0
- package/core/SpriteAnimator.d.ts +88 -0
- package/core/SpriteAnimator.js +413 -0
- package/core/Stage.cjs.js +1 -0
- package/core/Stage.d.ts +27 -0
- package/core/Stage.js +133 -0
- package/core/Stars.cjs.js +1 -0
- package/core/Stars.d.ts +22 -0
- package/core/Stars.js +100 -0
- package/core/Stats.cjs.js +1 -0
- package/core/Stats.d.ts +7 -0
- package/core/Stats.js +32 -0
- package/core/StatsGl.cjs.js +1 -0
- package/core/StatsGl.d.ts +14 -0
- package/core/StatsGl.js +44 -0
- package/core/Svg.cjs.js +1 -0
- package/core/Svg.d.ts +13 -0
- package/core/Svg.js +62 -0
- package/core/Text.cjs.js +1 -0
- package/core/Text.d.ts +38 -0
- package/core/Text.js +57 -0
- package/core/Text3D.cjs.js +1 -0
- package/core/Text3D.d.ts +20 -0
- package/core/Text3D.js +74 -0
- package/core/Texture.cjs.js +1 -0
- package/core/Texture.d.ts +20 -0
- package/core/Texture.js +60 -0
- package/core/TrackballControls.cjs.js +1 -0
- package/core/TrackballControls.d.ts +15 -0
- package/core/TrackballControls.js +72 -0
- package/core/Trail.cjs.js +1 -0
- package/core/Trail.d.ts +21 -0
- package/core/Trail.js +150 -0
- package/core/TrailTexture.cjs.js +1 -0
- package/core/TrailTexture.d.ts +19 -0
- package/core/TrailTexture.js +159 -0
- package/core/TransformControls.cjs.js +1 -0
- package/core/TransformControls.d.ts +28 -0
- package/core/TransformControls.js +114 -0
- package/core/VideoTexture.cjs.js +1 -0
- package/core/VideoTexture.d.ts +26 -0
- package/core/VideoTexture.js +111 -0
- package/core/Wireframe.cjs.js +1 -0
- package/core/Wireframe.d.ts +15 -0
- package/core/Wireframe.js +157 -0
- package/core/calculateScaleFactor.cjs.js +1 -0
- package/core/calculateScaleFactor.d.ts +3 -0
- package/core/calculateScaleFactor.js +31 -0
- package/core/index.cjs.js +1 -0
- package/core/index.d.ts +122 -0
- package/core/index.js +150 -0
- package/core/meshBounds.cjs.js +1 -0
- package/core/meshBounds.d.ts +2 -0
- package/core/meshBounds.js +28 -0
- package/core/shaderMaterial.cjs.js +1 -0
- package/core/shaderMaterial.d.ts +9 -0
- package/core/shaderMaterial.js +29 -0
- package/core/shapes.cjs.js +1 -0
- package/core/shapes.d.ts +26 -0
- package/core/shapes.js +65 -0
- package/core/softShadows.cjs.js +1 -0
- package/core/softShadows.d.ts +6 -0
- package/core/softShadows.js +158 -0
- package/core/useAnimations.cjs.js +1 -0
- package/core/useAnimations.d.ts +13 -0
- package/core/useAnimations.js +52 -0
- package/core/useAspect.cjs.js +1 -0
- package/core/useAspect.d.ts +1 -0
- package/core/useAspect.js +10 -0
- package/core/useBoxProjectedEnv.cjs.js +1 -0
- package/core/useBoxProjectedEnv.d.ts +19 -0
- package/core/useBoxProjectedEnv.js +95 -0
- package/core/useCamera.cjs.js +1 -0
- package/core/useCamera.d.ts +3 -0
- package/core/useCamera.js +19 -0
- package/core/useContextBridge.cjs.js +1 -0
- package/core/useContextBridge.d.ts +4 -0
- package/core/useContextBridge.js +20 -0
- package/core/useDepthBuffer.cjs.js +1 -0
- package/core/useDepthBuffer.d.ts +6 -0
- package/core/useDepthBuffer.js +38 -0
- package/core/useEnvironment.cjs.js +1 -0
- package/core/useEnvironment.d.ts +17 -0
- package/core/useEnvironment.js +150 -0
- package/core/useFont.cjs.js +1 -0
- package/core/useFont.d.ts +24 -0
- package/core/useFont.js +24 -0
- package/core/useIntersect.cjs.js +1 -0
- package/core/useIntersect.d.ts +3 -0
- package/core/useIntersect.js +36 -0
- package/core/useSpriteLoader.cjs.js +1 -0
- package/core/useSpriteLoader.d.ts +57 -0
- package/core/useSpriteLoader.js +402 -0
- package/helpers/constants.cjs.js +1 -0
- package/helpers/constants.d.ts +1 -0
- package/helpers/constants.js +6 -0
- package/helpers/deprecated.cjs.js +1 -0
- package/helpers/deprecated.d.ts +5 -0
- package/helpers/deprecated.js +8 -0
- package/helpers/environment-assets.cjs.js +1 -0
- package/helpers/environment-assets.d.ts +13 -0
- package/helpers/environment-assets.js +14 -0
- package/helpers/glsl/DefaultSpotlightShadowShadows.glsl.js +3 -0
- package/helpers/glsl/distort.vert.glsl.js +3 -0
- package/helpers/ts-utils.cjs.js +1 -0
- package/helpers/ts-utils.d.ts +7 -0
- package/helpers/ts-utils.js +1 -0
- package/helpers/useEffectfulState.cjs.js +1 -0
- package/helpers/useEffectfulState.d.ts +4 -0
- package/helpers/useEffectfulState.js +17 -0
- package/index.cjs.js +1 -0
- package/index.d.ts +1 -0
- package/index.js +139 -0
- package/materials/BlurPass.cjs.js +1 -0
- package/materials/BlurPass.d.ts +23 -0
- package/materials/BlurPass.js +72 -0
- package/materials/ConvolutionMaterial.cjs.js +1 -0
- package/materials/ConvolutionMaterial.d.ts +7 -0
- package/materials/ConvolutionMaterial.js +97 -0
- package/materials/DiscardMaterial.cjs.js +1 -0
- package/materials/DiscardMaterial.d.ts +3 -0
- package/materials/DiscardMaterial.js +5 -0
- package/materials/MeshReflectorMaterial.cjs.js +1 -0
- package/materials/MeshReflectorMaterial.d.ts +50 -0
- package/materials/MeshReflectorMaterial.js +256 -0
- package/materials/MeshRefractionMaterial.cjs.js +1 -0
- package/materials/MeshRefractionMaterial.d.ts +18 -0
- package/materials/MeshRefractionMaterial.js +163 -0
- package/materials/SpotLightMaterial.cjs.js +1 -0
- package/materials/SpotLightMaterial.d.ts +4 -0
- package/materials/SpotLightMaterial.js +115 -0
- package/materials/WireframeMaterial.cjs.js +1 -0
- package/materials/WireframeMaterial.d.ts +64 -0
- package/materials/WireframeMaterial.js +217 -0
- package/native/index.cjs.js +1 -0
- package/native/index.d.ts +1 -0
- package/native/index.js +150 -0
- package/native/package.json +5 -0
- package/package.json +83 -0
- package/web/CycleRaycast.cjs.js +1 -0
- package/web/CycleRaycast.d.ts +10 -0
- package/web/CycleRaycast.js +93 -0
- package/web/DragControls.cjs.js +1 -0
- package/web/DragControls.d.ts +17 -0
- package/web/DragControls.js +127 -0
- package/web/FaceControls.cjs.js +1 -0
- package/web/FaceControls.d.ts +29 -0
- package/web/FaceControls.js +236 -0
- package/web/FaceLandmarker.cjs.js +1 -0
- package/web/FaceLandmarker.d.ts +14 -0
- package/web/FaceLandmarker.js +49 -0
- package/web/Facemesh.cjs.js +1 -0
- package/web/Facemesh.d.ts +118 -0
- package/web/Facemesh.js +4538 -0
- package/web/Html.cjs.js +1 -0
- package/web/Html.d.ts +34 -0
- package/web/Html.js +375 -0
- package/web/KeyboardControls.cjs.js +1 -0
- package/web/KeyboardControls.d.ts +37 -0
- package/web/KeyboardControls.js +104 -0
- package/web/Loader.cjs.js +1 -0
- package/web/Loader.d.ts +12 -0
- package/web/Loader.js +101 -0
- package/web/PresentationControls.cjs.js +1 -0
- package/web/PresentationControls.d.ts +16 -0
- package/web/PresentationControls.js +79 -0
- package/web/ScreenVideoTexture.cjs.js +1 -0
- package/web/ScreenVideoTexture.d.ts +17 -0
- package/web/ScreenVideoTexture.js +30 -0
- package/web/ScrollControls.cjs.js +1 -0
- package/web/ScrollControls.d.ts +45 -0
- package/web/ScrollControls.js +237 -0
- package/web/Select.cjs.js +1 -0
- package/web/Select.d.ts +14 -0
- package/web/Select.js +171 -0
- package/web/View.cjs.js +1 -0
- package/web/View.d.ts +34 -0
- package/web/View.js +259 -0
- package/web/WebcamVideoTexture.cjs.js +1 -0
- package/web/WebcamVideoTexture.d.ts +17 -0
- package/web/WebcamVideoTexture.js +33 -0
- package/web/index.cjs.js +1 -0
- package/web/index.d.ts +17 -0
- package/web/index.js +176 -0
- package/web/pivotControls/AxisArrow.cjs.js +1 -0
- package/web/pivotControls/AxisArrow.d.ts +7 -0
- package/web/pivotControls/AxisArrow.js +193 -0
- package/web/pivotControls/AxisRotator.cjs.js +1 -0
- package/web/pivotControls/AxisRotator.d.ts +7 -0
- package/web/pivotControls/AxisRotator.js +220 -0
- package/web/pivotControls/PlaneSlider.cjs.js +1 -0
- package/web/pivotControls/PlaneSlider.d.ts +7 -0
- package/web/pivotControls/PlaneSlider.js +202 -0
- package/web/pivotControls/ScalingSphere.cjs.js +1 -0
- package/web/pivotControls/ScalingSphere.d.ts +7 -0
- package/web/pivotControls/ScalingSphere.js +192 -0
- package/web/pivotControls/context.cjs.js +1 -0
- package/web/pivotControls/context.d.ts +33 -0
- package/web/pivotControls/context.js +5 -0
- package/web/pivotControls/index.cjs.js +1 -0
- package/web/pivotControls/index.d.ts +39 -0
- package/web/pivotControls/index.js +213 -0
- package/web/useCursor.cjs.js +1 -0
- package/web/useCursor.d.ts +1 -0
- package/web/useCursor.js +12 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useThree } from '@react-three/fiber';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
|
|
6
|
+
let GradientType = /*#__PURE__*/function (GradientType) {
|
|
7
|
+
GradientType["Linear"] = "linear";
|
|
8
|
+
GradientType["Radial"] = "radial";
|
|
9
|
+
return GradientType;
|
|
10
|
+
}({});
|
|
11
|
+
function GradientTexture({
|
|
12
|
+
stops,
|
|
13
|
+
colors,
|
|
14
|
+
size = 1024,
|
|
15
|
+
width = 16,
|
|
16
|
+
type = GradientType.Linear,
|
|
17
|
+
innerCircleRadius = 0,
|
|
18
|
+
outerCircleRadius = 'auto',
|
|
19
|
+
...props
|
|
20
|
+
}) {
|
|
21
|
+
const gl = useThree(state => state.gl);
|
|
22
|
+
const canvas = React.useMemo(() => {
|
|
23
|
+
const canvas = document.createElement('canvas');
|
|
24
|
+
const context = canvas.getContext('2d');
|
|
25
|
+
canvas.width = width;
|
|
26
|
+
canvas.height = size;
|
|
27
|
+
let gradient;
|
|
28
|
+
if (type === GradientType.Linear) {
|
|
29
|
+
gradient = context.createLinearGradient(0, 0, 0, size);
|
|
30
|
+
} else {
|
|
31
|
+
const canvasCenterX = canvas.width / 2;
|
|
32
|
+
const canvasCenterY = canvas.height / 2;
|
|
33
|
+
const radius = outerCircleRadius !== 'auto' ? Math.abs(Number(outerCircleRadius)) : Math.sqrt(canvasCenterX ** 2 + canvasCenterY ** 2);
|
|
34
|
+
gradient = context.createRadialGradient(canvasCenterX, canvasCenterY, Math.abs(innerCircleRadius), canvasCenterX, canvasCenterY, radius);
|
|
35
|
+
}
|
|
36
|
+
const tempColor = new THREE.Color(); // reuse instance for performance
|
|
37
|
+
let i = stops.length;
|
|
38
|
+
while (i--) {
|
|
39
|
+
gradient.addColorStop(stops[i], tempColor.set(colors[i]).getStyle());
|
|
40
|
+
}
|
|
41
|
+
context.save();
|
|
42
|
+
context.fillStyle = gradient;
|
|
43
|
+
context.fillRect(0, 0, width, size);
|
|
44
|
+
context.restore();
|
|
45
|
+
return canvas;
|
|
46
|
+
}, [stops]);
|
|
47
|
+
return /*#__PURE__*/React.createElement("canvasTexture", _extends({
|
|
48
|
+
colorSpace: gl.outputColorSpace,
|
|
49
|
+
args: [canvas],
|
|
50
|
+
attach: "map"
|
|
51
|
+
}, props));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { GradientTexture, GradientType };
|
package/core/Grid.cjs.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("react"),o=require("three"),i=require("@react-three/fiber"),r=require("./shaderMaterial.cjs.js"),t=require("../helpers/constants.cjs.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(o){if("default"!==o){var i=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(n,o,i.get?i:{enumerable:!0,get:function(){return e[o]}})}})),n.default=e,Object.freeze(n)}var s=l(e),c=a(n),f=a(o);const d=r.shaderMaterial({cellSize:.5,sectionSize:1,fadeDistance:100,fadeStrength:1,fadeFrom:1,cellThickness:.5,sectionThickness:1,cellColor:new f.Color,sectionColor:new f.Color,infiniteGrid:!1,followCamera:!1,worldCamProjPosition:new f.Vector3,worldPlanePosition:new f.Vector3},"\n varying vec3 localPosition;\n varying vec4 worldPosition;\n\n uniform vec3 worldCamProjPosition;\n uniform vec3 worldPlanePosition;\n uniform float fadeDistance;\n uniform bool infiniteGrid;\n uniform bool followCamera;\n\n void main() {\n localPosition = position.xzy;\n if (infiniteGrid) localPosition *= 1.0 + fadeDistance;\n \n worldPosition = modelMatrix * vec4(localPosition, 1.0);\n if (followCamera) {\n worldPosition.xyz += (worldCamProjPosition - worldPlanePosition);\n localPosition = (inverse(modelMatrix) * worldPosition).xyz;\n }\n\n gl_Position = projectionMatrix * viewMatrix * worldPosition;\n }\n ",`\n varying vec3 localPosition;\n varying vec4 worldPosition;\n\n uniform vec3 worldCamProjPosition;\n uniform float cellSize;\n uniform float sectionSize;\n uniform vec3 cellColor;\n uniform vec3 sectionColor;\n uniform float fadeDistance;\n uniform float fadeStrength;\n uniform float fadeFrom;\n uniform float cellThickness;\n uniform float sectionThickness;\n\n float getGrid(float size, float thickness) {\n vec2 r = localPosition.xz / size;\n vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);\n float line = min(grid.x, grid.y) + 1.0 - thickness;\n return 1.0 - min(line, 1.0);\n }\n\n void main() {\n float g1 = getGrid(cellSize, cellThickness);\n float g2 = getGrid(sectionSize, sectionThickness);\n\n vec3 from = worldCamProjPosition*vec3(fadeFrom);\n float dist = distance(from, worldPosition.xyz);\n float d = 1.0 - min(dist / fadeDistance, 1.0);\n vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * g2));\n\n gl_FragColor = vec4(color, (g1 + g2) * pow(d, fadeStrength));\n gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);\n if (gl_FragColor.a <= 0.0) discard;\n\n #include <tonemapping_fragment>\n #include <${t.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }\n `),m=c.forwardRef((({args:e,cellColor:n="#000000",sectionColor:o="#2080ff",cellSize:r=.5,sectionSize:t=1,followCamera:l=!1,infiniteGrid:a=!1,fadeDistance:m=100,fadeStrength:u=1,fadeFrom:g=1,cellThickness:P=.5,sectionThickness:v=1,side:w=f.BackSide,...C},h)=>{i.extend({GridMaterial:d});const p=c.useRef(null);c.useImperativeHandle(h,(()=>p.current),[]);const x=new f.Plane,j=new f.Vector3(0,1,0),z=new f.Vector3(0,0,0);i.useFrame((e=>{x.setFromNormalAndCoplanarPoint(j,z).applyMatrix4(p.current.matrixWorld);const n=p.current.material,o=n.uniforms.worldCamProjPosition,i=n.uniforms.worldPlanePosition;x.projectPoint(e.camera.position,o.value),i.value.set(0,0,0).applyMatrix4(p.current.matrixWorld)}));const y={cellSize:r,sectionSize:t,cellColor:n,sectionColor:o,cellThickness:P,sectionThickness:v},S={fadeDistance:m,fadeStrength:u,fadeFrom:g,infiniteGrid:a,followCamera:l};return c.createElement("mesh",s.default({ref:p,frustumCulled:!1},C),c.createElement("gridMaterial",s.default({transparent:!0,"extensions-derivatives":!0,side:w},y,S)),c.createElement("planeGeometry",{args:e}))}));exports.Grid=m;
|
package/core/Grid.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { ThreeElements } from '@react-three/fiber';
|
|
3
|
+
import { ForwardRefComponent } from '../helpers/ts-utils';
|
|
4
|
+
export type GridMaterialType = {
|
|
5
|
+
cellSize?: number;
|
|
6
|
+
cellThickness?: number;
|
|
7
|
+
cellColor?: THREE.ColorRepresentation;
|
|
8
|
+
sectionSize?: number;
|
|
9
|
+
sectionThickness?: number;
|
|
10
|
+
sectionColor?: THREE.ColorRepresentation;
|
|
11
|
+
followCamera?: boolean;
|
|
12
|
+
infiniteGrid?: boolean;
|
|
13
|
+
fadeDistance?: number;
|
|
14
|
+
fadeStrength?: number;
|
|
15
|
+
fadeFrom?: number;
|
|
16
|
+
side?: THREE.Side;
|
|
17
|
+
};
|
|
18
|
+
export type GridProps = Omit<ThreeElements['mesh'], 'ref' | 'args'> & GridMaterialType & {
|
|
19
|
+
args?: ConstructorParameters<typeof THREE.PlaneGeometry>;
|
|
20
|
+
};
|
|
21
|
+
declare module '@react-three/fiber' {
|
|
22
|
+
interface ThreeElements {
|
|
23
|
+
gridMaterial: ThreeElements['shaderMaterial'] & GridMaterialType;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export declare const Grid: ForwardRefComponent<GridProps, THREE.Mesh>;
|
package/core/Grid.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { extend, useFrame } from '@react-three/fiber';
|
|
5
|
+
import { shaderMaterial } from './shaderMaterial.js';
|
|
6
|
+
import { version } from '../helpers/constants.js';
|
|
7
|
+
|
|
8
|
+
const GridMaterial = /* @__PURE__ */shaderMaterial({
|
|
9
|
+
cellSize: 0.5,
|
|
10
|
+
sectionSize: 1,
|
|
11
|
+
fadeDistance: 100,
|
|
12
|
+
fadeStrength: 1,
|
|
13
|
+
fadeFrom: 1,
|
|
14
|
+
cellThickness: 0.5,
|
|
15
|
+
sectionThickness: 1,
|
|
16
|
+
cellColor: /* @__PURE__ */new THREE.Color(),
|
|
17
|
+
sectionColor: /* @__PURE__ */new THREE.Color(),
|
|
18
|
+
infiniteGrid: false,
|
|
19
|
+
followCamera: false,
|
|
20
|
+
worldCamProjPosition: /* @__PURE__ */new THREE.Vector3(),
|
|
21
|
+
worldPlanePosition: /* @__PURE__ */new THREE.Vector3()
|
|
22
|
+
}, /* glsl */`
|
|
23
|
+
varying vec3 localPosition;
|
|
24
|
+
varying vec4 worldPosition;
|
|
25
|
+
|
|
26
|
+
uniform vec3 worldCamProjPosition;
|
|
27
|
+
uniform vec3 worldPlanePosition;
|
|
28
|
+
uniform float fadeDistance;
|
|
29
|
+
uniform bool infiniteGrid;
|
|
30
|
+
uniform bool followCamera;
|
|
31
|
+
|
|
32
|
+
void main() {
|
|
33
|
+
localPosition = position.xzy;
|
|
34
|
+
if (infiniteGrid) localPosition *= 1.0 + fadeDistance;
|
|
35
|
+
|
|
36
|
+
worldPosition = modelMatrix * vec4(localPosition, 1.0);
|
|
37
|
+
if (followCamera) {
|
|
38
|
+
worldPosition.xyz += (worldCamProjPosition - worldPlanePosition);
|
|
39
|
+
localPosition = (inverse(modelMatrix) * worldPosition).xyz;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
gl_Position = projectionMatrix * viewMatrix * worldPosition;
|
|
43
|
+
}
|
|
44
|
+
`, /* glsl */`
|
|
45
|
+
varying vec3 localPosition;
|
|
46
|
+
varying vec4 worldPosition;
|
|
47
|
+
|
|
48
|
+
uniform vec3 worldCamProjPosition;
|
|
49
|
+
uniform float cellSize;
|
|
50
|
+
uniform float sectionSize;
|
|
51
|
+
uniform vec3 cellColor;
|
|
52
|
+
uniform vec3 sectionColor;
|
|
53
|
+
uniform float fadeDistance;
|
|
54
|
+
uniform float fadeStrength;
|
|
55
|
+
uniform float fadeFrom;
|
|
56
|
+
uniform float cellThickness;
|
|
57
|
+
uniform float sectionThickness;
|
|
58
|
+
|
|
59
|
+
float getGrid(float size, float thickness) {
|
|
60
|
+
vec2 r = localPosition.xz / size;
|
|
61
|
+
vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
|
|
62
|
+
float line = min(grid.x, grid.y) + 1.0 - thickness;
|
|
63
|
+
return 1.0 - min(line, 1.0);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void main() {
|
|
67
|
+
float g1 = getGrid(cellSize, cellThickness);
|
|
68
|
+
float g2 = getGrid(sectionSize, sectionThickness);
|
|
69
|
+
|
|
70
|
+
vec3 from = worldCamProjPosition*vec3(fadeFrom);
|
|
71
|
+
float dist = distance(from, worldPosition.xyz);
|
|
72
|
+
float d = 1.0 - min(dist / fadeDistance, 1.0);
|
|
73
|
+
vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * g2));
|
|
74
|
+
|
|
75
|
+
gl_FragColor = vec4(color, (g1 + g2) * pow(d, fadeStrength));
|
|
76
|
+
gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);
|
|
77
|
+
if (gl_FragColor.a <= 0.0) discard;
|
|
78
|
+
|
|
79
|
+
#include <tonemapping_fragment>
|
|
80
|
+
#include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
|
|
81
|
+
}
|
|
82
|
+
`);
|
|
83
|
+
const Grid = /* @__PURE__ */React.forwardRef(({
|
|
84
|
+
args,
|
|
85
|
+
cellColor = '#000000',
|
|
86
|
+
sectionColor = '#2080ff',
|
|
87
|
+
cellSize = 0.5,
|
|
88
|
+
sectionSize = 1,
|
|
89
|
+
followCamera = false,
|
|
90
|
+
infiniteGrid = false,
|
|
91
|
+
fadeDistance = 100,
|
|
92
|
+
fadeStrength = 1,
|
|
93
|
+
fadeFrom = 1,
|
|
94
|
+
cellThickness = 0.5,
|
|
95
|
+
sectionThickness = 1,
|
|
96
|
+
side = THREE.BackSide,
|
|
97
|
+
...props
|
|
98
|
+
}, fRef) => {
|
|
99
|
+
extend({
|
|
100
|
+
GridMaterial
|
|
101
|
+
});
|
|
102
|
+
const ref = React.useRef(null);
|
|
103
|
+
React.useImperativeHandle(fRef, () => ref.current, []);
|
|
104
|
+
const plane = new THREE.Plane();
|
|
105
|
+
const upVector = new THREE.Vector3(0, 1, 0);
|
|
106
|
+
const zeroVector = new THREE.Vector3(0, 0, 0);
|
|
107
|
+
useFrame(state => {
|
|
108
|
+
plane.setFromNormalAndCoplanarPoint(upVector, zeroVector).applyMatrix4(ref.current.matrixWorld);
|
|
109
|
+
const gridMaterial = ref.current.material;
|
|
110
|
+
const worldCamProjPosition = gridMaterial.uniforms.worldCamProjPosition;
|
|
111
|
+
const worldPlanePosition = gridMaterial.uniforms.worldPlanePosition;
|
|
112
|
+
plane.projectPoint(state.camera.position, worldCamProjPosition.value);
|
|
113
|
+
worldPlanePosition.value.set(0, 0, 0).applyMatrix4(ref.current.matrixWorld);
|
|
114
|
+
});
|
|
115
|
+
const uniforms1 = {
|
|
116
|
+
cellSize,
|
|
117
|
+
sectionSize,
|
|
118
|
+
cellColor,
|
|
119
|
+
sectionColor,
|
|
120
|
+
cellThickness,
|
|
121
|
+
sectionThickness
|
|
122
|
+
};
|
|
123
|
+
const uniforms2 = {
|
|
124
|
+
fadeDistance,
|
|
125
|
+
fadeStrength,
|
|
126
|
+
fadeFrom,
|
|
127
|
+
infiniteGrid,
|
|
128
|
+
followCamera
|
|
129
|
+
};
|
|
130
|
+
return /*#__PURE__*/React.createElement("mesh", _extends({
|
|
131
|
+
ref: ref,
|
|
132
|
+
frustumCulled: false
|
|
133
|
+
}, props), /*#__PURE__*/React.createElement("gridMaterial", _extends({
|
|
134
|
+
transparent: true,
|
|
135
|
+
"extensions-derivatives": true,
|
|
136
|
+
side: side
|
|
137
|
+
}, uniforms1, uniforms2)), /*#__PURE__*/React.createElement("planeGeometry", {
|
|
138
|
+
args: args
|
|
139
|
+
}));
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
export { Grid };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber");function t(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var u=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,u.get?u:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var u=t(e);function n(e,t,...n){const c=u.useRef(null),l=r.useThree((e=>e.scene));return u.useLayoutEffect((()=>{let r;if(e&&null!=e&&e.current&&t&&(c.current=r=new t(e.current,...n)),r)return r.traverse((e=>e.raycast=()=>null)),l.add(r),()=>{c.current=void 0,l.remove(r),null==r.dispose||r.dispose()}}),[l,t,e,...n]),r.useFrame((()=>{var e;null==(e=c.current)||null==e.update||e.update()})),c}exports.Helper=({type:e,args:r=[]})=>{const t=u.useRef(null),c=u.useRef(null);return u.useLayoutEffect((()=>{c.current=t.current.parent})),n(c,e,...r),u.createElement("object3D",{ref:t})},exports.useHelper=n;
|
package/core/Helper.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Object3D } from 'three';
|
|
3
|
+
import { Falsey } from 'utility-types';
|
|
4
|
+
type HelperType = Object3D & {
|
|
5
|
+
update: () => void;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
};
|
|
8
|
+
type HelperConstructor = new (...args: any[]) => any;
|
|
9
|
+
type HelperArgs<T> = T extends [infer _, ...infer R] ? R : never;
|
|
10
|
+
export declare function useHelper<T extends HelperConstructor>(object3D: React.RefObject<Object3D> | Falsey, helperConstructor: T, ...args: HelperArgs<ConstructorParameters<T>>): React.RefObject<HelperType | null>;
|
|
11
|
+
export type HelperProps<T extends HelperConstructor> = {
|
|
12
|
+
type: T;
|
|
13
|
+
args?: HelperArgs<ConstructorParameters<T>>;
|
|
14
|
+
};
|
|
15
|
+
export declare const Helper: <T extends HelperConstructor>({ type: helperConstructor, args, }: HelperProps<T>) => React.JSX.Element;
|
|
16
|
+
export {};
|
package/core/Helper.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useThree, useFrame } from '@react-three/fiber';
|
|
3
|
+
|
|
4
|
+
function useHelper(object3D, helperConstructor, ...args) {
|
|
5
|
+
const helper = React.useRef(null);
|
|
6
|
+
const scene = useThree(state => state.scene);
|
|
7
|
+
React.useLayoutEffect(() => {
|
|
8
|
+
let currentHelper = undefined;
|
|
9
|
+
if (object3D && object3D != null && object3D.current && helperConstructor) {
|
|
10
|
+
helper.current = currentHelper = new helperConstructor(object3D.current, ...args);
|
|
11
|
+
}
|
|
12
|
+
if (currentHelper) {
|
|
13
|
+
// Prevent the helpers from blocking rays
|
|
14
|
+
currentHelper.traverse(child => child.raycast = () => null);
|
|
15
|
+
scene.add(currentHelper);
|
|
16
|
+
return () => {
|
|
17
|
+
helper.current = undefined;
|
|
18
|
+
scene.remove(currentHelper);
|
|
19
|
+
currentHelper.dispose == null || currentHelper.dispose();
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}, [scene, helperConstructor, object3D, ...args]);
|
|
23
|
+
useFrame(() => {
|
|
24
|
+
var _helper$current;
|
|
25
|
+
return void ((_helper$current = helper.current) == null || _helper$current.update == null ? void 0 : _helper$current.update());
|
|
26
|
+
});
|
|
27
|
+
return helper;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//
|
|
31
|
+
|
|
32
|
+
const Helper = ({
|
|
33
|
+
type: helperConstructor,
|
|
34
|
+
args = []
|
|
35
|
+
}) => {
|
|
36
|
+
const thisRef = React.useRef(null);
|
|
37
|
+
const parentRef = React.useRef(null);
|
|
38
|
+
React.useLayoutEffect(() => {
|
|
39
|
+
parentRef.current = thisRef.current.parent;
|
|
40
|
+
});
|
|
41
|
+
useHelper(parentRef, helperConstructor, ...args);
|
|
42
|
+
return /*#__PURE__*/React.createElement("object3D", {
|
|
43
|
+
ref: thisRef
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { Helper, useHelper };
|
package/core/Hud.cjs.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),t=require("@react-three/fiber");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var a=n(e),u=n(r);function c({defaultScene:e,defaultCamera:r,renderPriority:n=1}){const{gl:a,scene:c,camera:l}=t.useThree();let o;return t.useFrame((()=>{o=a.autoClear,1===n&&(a.autoClear=!0,a.render(e,r)),a.autoClear=!1,a.clearDepth(),a.render(c,l),a.autoClear=o}),n),u.createElement("group",{onPointerOver:()=>null})}exports.Hud=function({children:e,renderPriority:r=1}){const{scene:n,camera:l}=t.useThree(),[o]=u.useState((()=>new a.Scene));return u.createElement(u.Fragment,null,t.createPortal(u.createElement(u.Fragment,null,e,u.createElement(c,{defaultScene:n,defaultCamera:l,renderPriority:r})),o,{events:{priority:r+1}}))};
|
package/core/Hud.d.ts
ADDED
package/core/Hud.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useThree, createPortal, useFrame } from '@react-three/fiber';
|
|
4
|
+
|
|
5
|
+
function RenderHud({
|
|
6
|
+
defaultScene,
|
|
7
|
+
defaultCamera,
|
|
8
|
+
renderPriority = 1
|
|
9
|
+
}) {
|
|
10
|
+
const {
|
|
11
|
+
gl,
|
|
12
|
+
scene,
|
|
13
|
+
camera
|
|
14
|
+
} = useThree();
|
|
15
|
+
let oldCLear;
|
|
16
|
+
useFrame(() => {
|
|
17
|
+
oldCLear = gl.autoClear;
|
|
18
|
+
if (renderPriority === 1) {
|
|
19
|
+
// Clear scene and render the default scene
|
|
20
|
+
gl.autoClear = true;
|
|
21
|
+
gl.render(defaultScene, defaultCamera);
|
|
22
|
+
}
|
|
23
|
+
// Disable cleaning and render the portal with its own camera
|
|
24
|
+
gl.autoClear = false;
|
|
25
|
+
gl.clearDepth();
|
|
26
|
+
gl.render(scene, camera);
|
|
27
|
+
// Restore default
|
|
28
|
+
gl.autoClear = oldCLear;
|
|
29
|
+
}, renderPriority);
|
|
30
|
+
// Without an element that receives pointer events state.pointer will always be 0/0
|
|
31
|
+
return /*#__PURE__*/React.createElement("group", {
|
|
32
|
+
onPointerOver: () => null
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function Hud({
|
|
36
|
+
children,
|
|
37
|
+
renderPriority = 1
|
|
38
|
+
}) {
|
|
39
|
+
const {
|
|
40
|
+
scene: defaultScene,
|
|
41
|
+
camera: defaultCamera
|
|
42
|
+
} = useThree();
|
|
43
|
+
const [hudScene] = React.useState(() => new THREE.Scene());
|
|
44
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(RenderHud, {
|
|
45
|
+
defaultScene: defaultScene,
|
|
46
|
+
defaultCamera: defaultCamera,
|
|
47
|
+
renderPriority: renderPriority
|
|
48
|
+
})), hudScene, {
|
|
49
|
+
events: {
|
|
50
|
+
priority: renderPriority + 1
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { Hud };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),n=require("@react-three/fiber"),a=require("./shaderMaterial.cjs.js"),o=require("./Texture.cjs.js"),s=require("../helpers/constants.cjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var l=i(e),u=c(r),f=c(t);const v=a.shaderMaterial({color:new f.Color("white"),scale:new f.Vector2(1,1),imageBounds:new f.Vector2(1,1),resolution:1024,map:null,zoom:1,radius:0,grayscale:0,opacity:1},"\n varying vec2 vUv;\n varying vec2 vPos;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n vPos = position.xy;\n }\n",`\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n varying vec2 vPos;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform float resolution;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float radius;\n uniform float zoom;\n uniform float grayscale;\n uniform float opacity;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n \n const float PI = 3.14159265;\n \n // from https://iquilezles.org/articles/distfunctions\n float udRoundBox( vec2 p, vec2 b, float r ) {\n return length(max(abs(p)-b+r,0.0))-r;\n }\n\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n\n vec2 res = vec2(scale * resolution);\n vec2 halfRes = 0.5 * res;\n float b = udRoundBox(vUv.xy * res - halfRes, halfRes, resolution * radius); \n\t vec3 a = mix(vec3(1.0,0.0,0.0), vec3(0.0,0.0,0.0), smoothstep(0.0, 1.0, b));\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity * a), grayscale);\n \n #include <tonemapping_fragment>\n #include <${s.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }\n`),m=u.forwardRef((({children:e,color:r,segments:t=1,scale:a=1,zoom:o=1,grayscale:s=0,opacity:i=1,radius:c=0,texture:f,toneMapped:m,transparent:d,side:y,...g},p)=>{n.extend({ImageMaterial:v});const x=u.useRef(null),h=n.useThree((e=>e.size)),b=Array.isArray(a)?[a[0],a[1]]:[a,a],w=[f.image.width,f.image.height],j=Math.max(h.width,h.height);return u.useImperativeHandle(p,(()=>x.current),[]),u.useLayoutEffect((()=>{x.current.geometry.parameters&&x.current.material.scale.set(b[0]*x.current.geometry.parameters.width,b[1]*x.current.geometry.parameters.height)}),[b[0],b[1]]),u.createElement("mesh",l.default({ref:x,scale:Array.isArray(a)?[...a,1]:a},g),u.createElement("planeGeometry",{args:[1,1,t,t]}),u.createElement("imageMaterial",{color:r,map:f,zoom:o,grayscale:s,opacity:i,scale:b,imageBounds:w,resolution:j,radius:c,toneMapped:m,transparent:d,side:y,key:v.key}),e)})),d=u.forwardRef((({url:e,...r},t)=>{const n=o.useTexture(e);return u.createElement(m,l.default({},r,{texture:n,ref:t}))})),y=u.forwardRef((({url:e,...r},t)=>u.createElement(m,l.default({},r,{ref:t})))),g=u.forwardRef(((e,r)=>{if(e.url)return u.createElement(d,l.default({},e,{ref:r}));if(e.texture)return u.createElement(y,l.default({},e,{ref:r}));throw new Error("<Image /> requires a url or texture")}));exports.Image=g;
|
package/core/Image.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { Color, ThreeElements } from '@react-three/fiber';
|
|
3
|
+
import { ForwardRefComponent } from '../helpers/ts-utils';
|
|
4
|
+
export type ImageProps = Omit<ThreeElements['mesh'], 'scale'> & {
|
|
5
|
+
segments?: number;
|
|
6
|
+
scale?: number | [number, number];
|
|
7
|
+
color?: Color;
|
|
8
|
+
zoom?: number;
|
|
9
|
+
radius?: number;
|
|
10
|
+
grayscale?: number;
|
|
11
|
+
toneMapped?: boolean;
|
|
12
|
+
transparent?: boolean;
|
|
13
|
+
opacity?: number;
|
|
14
|
+
side?: THREE.Side;
|
|
15
|
+
} & ({
|
|
16
|
+
texture: THREE.Texture;
|
|
17
|
+
url?: never;
|
|
18
|
+
} | {
|
|
19
|
+
texture?: never;
|
|
20
|
+
url: string;
|
|
21
|
+
});
|
|
22
|
+
type ImageMaterialType = ThreeElements['shaderMaterial'] & {
|
|
23
|
+
scale?: number[];
|
|
24
|
+
imageBounds?: number[];
|
|
25
|
+
radius?: number;
|
|
26
|
+
resolution?: number;
|
|
27
|
+
color?: Color;
|
|
28
|
+
map: THREE.Texture;
|
|
29
|
+
zoom?: number;
|
|
30
|
+
grayscale?: number;
|
|
31
|
+
};
|
|
32
|
+
declare module '@react-three/fiber' {
|
|
33
|
+
interface ThreeElements {
|
|
34
|
+
imageMaterial: ImageMaterialType;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export declare const Image: ForwardRefComponent<ImageProps, THREE.Mesh>;
|
|
38
|
+
export {};
|
package/core/Image.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { extend, useThree } from '@react-three/fiber';
|
|
5
|
+
import { shaderMaterial } from './shaderMaterial.js';
|
|
6
|
+
import { useTexture } from './Texture.js';
|
|
7
|
+
import { version } from '../helpers/constants.js';
|
|
8
|
+
|
|
9
|
+
// {texture: THREE.Texture} XOR {url: string}
|
|
10
|
+
|
|
11
|
+
const ImageMaterialImpl = /* @__PURE__ */shaderMaterial({
|
|
12
|
+
color: /* @__PURE__ */new THREE.Color('white'),
|
|
13
|
+
scale: /* @__PURE__ */new THREE.Vector2(1, 1),
|
|
14
|
+
imageBounds: /* @__PURE__ */new THREE.Vector2(1, 1),
|
|
15
|
+
resolution: 1024,
|
|
16
|
+
map: null,
|
|
17
|
+
zoom: 1,
|
|
18
|
+
radius: 0,
|
|
19
|
+
grayscale: 0,
|
|
20
|
+
opacity: 1
|
|
21
|
+
}, /* glsl */`
|
|
22
|
+
varying vec2 vUv;
|
|
23
|
+
varying vec2 vPos;
|
|
24
|
+
void main() {
|
|
25
|
+
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
|
|
26
|
+
vUv = uv;
|
|
27
|
+
vPos = position.xy;
|
|
28
|
+
}
|
|
29
|
+
`, /* glsl */`
|
|
30
|
+
// mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44
|
|
31
|
+
varying vec2 vUv;
|
|
32
|
+
varying vec2 vPos;
|
|
33
|
+
uniform vec2 scale;
|
|
34
|
+
uniform vec2 imageBounds;
|
|
35
|
+
uniform float resolution;
|
|
36
|
+
uniform vec3 color;
|
|
37
|
+
uniform sampler2D map;
|
|
38
|
+
uniform float radius;
|
|
39
|
+
uniform float zoom;
|
|
40
|
+
uniform float grayscale;
|
|
41
|
+
uniform float opacity;
|
|
42
|
+
const vec3 luma = vec3(.299, 0.587, 0.114);
|
|
43
|
+
vec4 toGrayscale(vec4 color, float intensity) {
|
|
44
|
+
return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);
|
|
45
|
+
}
|
|
46
|
+
vec2 aspect(vec2 size) {
|
|
47
|
+
return size / min(size.x, size.y);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const float PI = 3.14159265;
|
|
51
|
+
|
|
52
|
+
// from https://iquilezles.org/articles/distfunctions
|
|
53
|
+
float udRoundBox( vec2 p, vec2 b, float r ) {
|
|
54
|
+
return length(max(abs(p)-b+r,0.0))-r;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void main() {
|
|
58
|
+
vec2 s = aspect(scale);
|
|
59
|
+
vec2 i = aspect(imageBounds);
|
|
60
|
+
float rs = s.x / s.y;
|
|
61
|
+
float ri = i.x / i.y;
|
|
62
|
+
vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);
|
|
63
|
+
vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;
|
|
64
|
+
vec2 uv = vUv * s / new + offset;
|
|
65
|
+
vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);
|
|
66
|
+
|
|
67
|
+
vec2 res = vec2(scale * resolution);
|
|
68
|
+
vec2 halfRes = 0.5 * res;
|
|
69
|
+
float b = udRoundBox(vUv.xy * res - halfRes, halfRes, resolution * radius);
|
|
70
|
+
vec3 a = mix(vec3(1.0,0.0,0.0), vec3(0.0,0.0,0.0), smoothstep(0.0, 1.0, b));
|
|
71
|
+
gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity * a), grayscale);
|
|
72
|
+
|
|
73
|
+
#include <tonemapping_fragment>
|
|
74
|
+
#include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
|
|
75
|
+
}
|
|
76
|
+
`);
|
|
77
|
+
const ImageBase = /* @__PURE__ */React.forwardRef(({
|
|
78
|
+
children,
|
|
79
|
+
color,
|
|
80
|
+
segments = 1,
|
|
81
|
+
scale = 1,
|
|
82
|
+
zoom = 1,
|
|
83
|
+
grayscale = 0,
|
|
84
|
+
opacity = 1,
|
|
85
|
+
radius = 0,
|
|
86
|
+
texture,
|
|
87
|
+
toneMapped,
|
|
88
|
+
transparent,
|
|
89
|
+
side,
|
|
90
|
+
...props
|
|
91
|
+
}, fref) => {
|
|
92
|
+
extend({
|
|
93
|
+
ImageMaterial: ImageMaterialImpl
|
|
94
|
+
});
|
|
95
|
+
const ref = React.useRef(null);
|
|
96
|
+
const size = useThree(state => state.size);
|
|
97
|
+
const planeBounds = Array.isArray(scale) ? [scale[0], scale[1]] : [scale, scale];
|
|
98
|
+
const imageBounds = [texture.image.width, texture.image.height];
|
|
99
|
+
const resolution = Math.max(size.width, size.height);
|
|
100
|
+
React.useImperativeHandle(fref, () => ref.current, []);
|
|
101
|
+
React.useLayoutEffect(() => {
|
|
102
|
+
// Support arbitrary plane geometries (for instance with rounded corners)
|
|
103
|
+
// @ts-ignore
|
|
104
|
+
if (ref.current.geometry.parameters) {
|
|
105
|
+
// @ts-ignore
|
|
106
|
+
ref.current.material.scale.set(
|
|
107
|
+
// @ts-ignore
|
|
108
|
+
planeBounds[0] * ref.current.geometry.parameters.width,
|
|
109
|
+
// @ts-ignore
|
|
110
|
+
planeBounds[1] * ref.current.geometry.parameters.height);
|
|
111
|
+
}
|
|
112
|
+
}, [planeBounds[0], planeBounds[1]]);
|
|
113
|
+
return /*#__PURE__*/React.createElement("mesh", _extends({
|
|
114
|
+
ref: ref,
|
|
115
|
+
scale: Array.isArray(scale) ? [...scale, 1] : scale
|
|
116
|
+
}, props), /*#__PURE__*/React.createElement("planeGeometry", {
|
|
117
|
+
args: [1, 1, segments, segments]
|
|
118
|
+
}), /*#__PURE__*/React.createElement("imageMaterial", {
|
|
119
|
+
color: color,
|
|
120
|
+
map: texture,
|
|
121
|
+
zoom: zoom,
|
|
122
|
+
grayscale: grayscale,
|
|
123
|
+
opacity: opacity,
|
|
124
|
+
scale: planeBounds,
|
|
125
|
+
imageBounds: imageBounds,
|
|
126
|
+
resolution: resolution,
|
|
127
|
+
radius: radius,
|
|
128
|
+
toneMapped: toneMapped,
|
|
129
|
+
transparent: transparent,
|
|
130
|
+
side: side,
|
|
131
|
+
key: ImageMaterialImpl.key
|
|
132
|
+
}), children);
|
|
133
|
+
});
|
|
134
|
+
const ImageWithUrl = /* @__PURE__ */React.forwardRef(({
|
|
135
|
+
url,
|
|
136
|
+
...props
|
|
137
|
+
}, ref) => {
|
|
138
|
+
const texture = useTexture(url);
|
|
139
|
+
return /*#__PURE__*/React.createElement(ImageBase, _extends({}, props, {
|
|
140
|
+
texture: texture,
|
|
141
|
+
ref: ref
|
|
142
|
+
}));
|
|
143
|
+
});
|
|
144
|
+
const ImageWithTexture = /* @__PURE__ */React.forwardRef(({
|
|
145
|
+
url: _url,
|
|
146
|
+
...props
|
|
147
|
+
}, ref) => {
|
|
148
|
+
return /*#__PURE__*/React.createElement(ImageBase, _extends({}, props, {
|
|
149
|
+
ref: ref
|
|
150
|
+
}));
|
|
151
|
+
});
|
|
152
|
+
const Image = /* @__PURE__ */React.forwardRef((props, ref) => {
|
|
153
|
+
if (props.url) return /*#__PURE__*/React.createElement(ImageWithUrl, _extends({}, props, {
|
|
154
|
+
ref: ref
|
|
155
|
+
}));else if (props.texture) return /*#__PURE__*/React.createElement(ImageWithTexture, _extends({}, props, {
|
|
156
|
+
ref: ref
|
|
157
|
+
}));else throw new Error('<Image /> requires a url or texture');
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
export { Image };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("../helpers/deprecated.cjs.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=c(e),i=s(t),o=s(r);const l=new i.Matrix4,f=new i.Matrix4,d=[],m=new i.Mesh;class y extends i.Group{constructor(){super(),this.color=new i.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;m.geometry=r.geometry;const n=r.matrixWorld,a=r.userData.instances.indexOf(this.instanceKey);if(!(-1===a||a>r.count)){r.getMatrixAt(a,l),f.multiplyMatrices(n,l),m.matrixWorld=f,r.material instanceof i.Material?m.material.side=r.material.side:m.material.side=r.material[0].side,m.raycast(e,d);for(let e=0,r=d.length;e<r;e++){const r=d[e];r.instanceId=a,r.object=this,t.push(r)}d.length=0}}}const p=o.createContext(null),g=new i.Matrix4,x=new i.Matrix4,h=new i.Matrix4,b=new i.Vector3,M=new i.Quaternion,w=new i.Vector3,A=o.forwardRef((({context:e,children:t,...r},a)=>{o.useMemo((()=>n.extend({PositionMesh:y})),[]);const c=o.useRef(null);o.useImperativeHandle(a,(()=>c.current),[]);const{subscribe:s,getParent:i}=o.useContext(e||p);return o.useLayoutEffect((()=>s(c)),[]),o.createElement("positionMesh",u.default({instance:i(),instanceKey:c,ref:c},r),t)})),v=o.forwardRef((({context:e,children:t,range:r,limit:c=1e3,frames:s=1/0,...l},f)=>{const[{localContext:d,instance:m}]=o.useState((()=>{const e=o.createContext(null);return{localContext:e,instance:o.forwardRef(((t,r)=>o.createElement(A,u.default({context:e},t,{ref:r}))))}})),y=o.useRef(null);o.useImperativeHandle(f,(()=>y.current),[]);const[v,E]=o.useState([]),[[j,D]]=o.useState((()=>{const e=new Float32Array(16*c);for(let t=0;t<c;t++)h.identity().toArray(e,16*t);return[e,new Float32Array([...new Array(3*c)].map((()=>1)))]}));o.useEffect((()=>{y.current.instanceMatrix.needsUpdate=!0}));let R=0,O=0;const C=o.useRef([]);o.useLayoutEffect((()=>{C.current=Object.entries(y.current.geometry.attributes).filter((([e,t])=>t.isInstancedBufferAttribute))})),n.useFrame((()=>{if(s===1/0||R<s){y.current.updateMatrix(),y.current.updateMatrixWorld(),g.copy(y.current.matrixWorld).invert(),O=Math.min(c,void 0!==r?r:c,v.length),y.current.count=O,a.setUpdateRange(y.current.instanceMatrix,{start:0,count:16*O}),a.setUpdateRange(y.current.instanceColor,{start:0,count:3*O});for(let e=0;e<v.length;e++){const t=v[e].current;t.matrixWorld.decompose(b,M,w),x.compose(b,M,w).premultiply(g),x.toArray(j,16*e),y.current.instanceMatrix.needsUpdate=!0,t.color.toArray(D,3*e),y.current.instanceColor.needsUpdate=!0}R++}}));const P=o.useMemo((()=>({getParent:()=>y,subscribe:e=>(E((t=>[...t,e])),()=>E((t=>t.filter((t=>t.current!==e.current)))))})),[]);return o.createElement("instancedMesh",u.default({userData:{instances:v,limit:c,frames:s},matrixAutoUpdate:!1,ref:y,args:[null,null,0],raycast:()=>null},l),o.createElement("instancedBufferAttribute",{attach:"instanceMatrix",args:[j,16],usage:i.DynamicDrawUsage}),o.createElement("instancedBufferAttribute",{attach:"instanceColor",args:[D,3],usage:i.DynamicDrawUsage}),"function"==typeof t?o.createElement(d.Provider,{value:P},t(m)):e?o.createElement(e.Provider,{value:P},t):o.createElement(p.Provider,{value:P},t))})),E=o.forwardRef((function({meshes:e,children:t,...r},n){const a=Array.isArray(e);if(!a)for(const t of Object.keys(e))e[t].isMesh||delete e[t];const c=(a?e:Object.values(e)).map((({geometry:e,material:t})=>o.createElement(v,u.default({key:e.uuid,geometry:e,material:t},r))));return o.createElement("group",{ref:n},j((r=>a?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))),c))}));function j(e,t,r=[]){if(!t[0])return e(r);function n(n){return j(e,t.slice(1),r.concat([n]))}return"function"==typeof t[0]?t[0]({results:r,render:n}):o.cloneElement(t[0],{children:n})}const D=o.forwardRef((({name:e,defaultValue:t,normalized:r,usage:a=i.DynamicDrawUsage},c)=>{const s=o.useRef(null);o.useImperativeHandle(c,(()=>s.current),[]),o.useLayoutEffect((()=>{const r=s.current.__r3f.parent.object;r.geometry.attributes[e]=s.current;const n=Array.isArray(t)?t:[t],a=Array.from({length:r.userData.limit},(()=>n)).flat();return s.current.array=new Float32Array(a),s.current.itemSize=n.length,s.current.count=a.length/s.current.itemSize,()=>{delete r.geometry.attributes[e]}}),[e]);let u=0;return n.useFrame((()=>{const t=s.current.__r3f.parent.object;if(t.userData.frames===1/0||u<t.userData.frames){for(let r=0;r<t.userData.instances.length;r++){const n=t.userData.instances[r].current[e];void 0!==n&&(s.current.set(Array.isArray(n)?n:"function"==typeof n.toArray?n.toArray():[n],r*s.current.itemSize),s.current.needsUpdate=!0)}u++}})),o.createElement("instancedBufferAttribute",{ref:s,usage:a,normalized:r})}));exports.Instance=A,exports.InstancedAttribute=D,exports.Instances=v,exports.Merged=E,exports.PositionMesh=y,exports.createInstances=function(){const e=o.createContext(null);return[o.forwardRef(((t,r)=>o.createElement(v,u.default({ref:r,context:e},t)))),o.forwardRef(((t,r)=>o.createElement(A,u.default({ref:r,context:e},t))))]};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { ThreeElement, ThreeElements } from '@react-three/fiber';
|
|
4
|
+
import { ForwardRefComponent } from '../helpers/ts-utils';
|
|
5
|
+
declare module '@react-three/fiber' {
|
|
6
|
+
interface ThreeElements {
|
|
7
|
+
positionMesh: ThreeElement<typeof PositionMesh>;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
type Api = {
|
|
11
|
+
getParent: () => React.RefObject<InstancedMesh>;
|
|
12
|
+
subscribe: <T>(ref: React.RefObject<T>) => void;
|
|
13
|
+
};
|
|
14
|
+
export type InstancesProps = Omit<ThreeElements['instancedMesh'], 'ref' | 'args'> & {
|
|
15
|
+
context?: React.Context<Api>;
|
|
16
|
+
range?: number;
|
|
17
|
+
limit?: number;
|
|
18
|
+
frames?: number;
|
|
19
|
+
};
|
|
20
|
+
export type InstanceProps = Omit<ThreeElements['positionMesh'], 'ref'> & {
|
|
21
|
+
context?: React.Context<Api>;
|
|
22
|
+
};
|
|
23
|
+
export type InstancedAttributeProps = Omit<ThreeElements['instancedBufferAttribute'], 'ref' | 'args'> & {
|
|
24
|
+
name: string;
|
|
25
|
+
defaultValue: any;
|
|
26
|
+
normalized?: boolean;
|
|
27
|
+
usage?: number;
|
|
28
|
+
};
|
|
29
|
+
type InstancedMesh = Omit<THREE.InstancedMesh, 'instanceMatrix' | 'instanceColor'> & {
|
|
30
|
+
instanceMatrix: THREE.InstancedBufferAttribute;
|
|
31
|
+
instanceColor: THREE.InstancedBufferAttribute;
|
|
32
|
+
};
|
|
33
|
+
export declare class PositionMesh extends THREE.Group {
|
|
34
|
+
color: THREE.Color;
|
|
35
|
+
instance: React.RefObject<THREE.InstancedMesh | undefined>;
|
|
36
|
+
instanceKey: React.RefObject<PositionMesh | undefined>;
|
|
37
|
+
constructor();
|
|
38
|
+
get geometry(): THREE.BufferGeometry<THREE.NormalBufferAttributes> | undefined;
|
|
39
|
+
raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void;
|
|
40
|
+
}
|
|
41
|
+
export declare const Instance: React.ForwardRefExoticComponent<Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<PositionMesh, import("@react-three/fiber").MathProps<PositionMesh> & import("@react-three/fiber").ReactProps<PositionMesh> & Partial<import("@react-three/fiber").EventHandlers>>>, Omit<import("@react-three/fiber").InstanceProps<PositionMesh, typeof PositionMesh>, "object">>>, "ref"> & {
|
|
42
|
+
context?: React.Context<Api>;
|
|
43
|
+
} & React.RefAttributes<unknown>>;
|
|
44
|
+
export declare const Instances: ForwardRefComponent<InstancesProps, THREE.InstancedMesh>;
|
|
45
|
+
export interface MergedProps extends Omit<InstancesProps, 'children'> {
|
|
46
|
+
meshes: THREE.Mesh[] | Record<string, THREE.Object3D>;
|
|
47
|
+
children: (...instances: [React.FC<InstanceProps> & Record<string, React.FC<InstanceProps>>, ...React.FC<InstanceProps>[]]) => React.ReactNode;
|
|
48
|
+
}
|
|
49
|
+
export declare const Merged: ForwardRefComponent<MergedProps, THREE.Group>;
|
|
50
|
+
export declare function createInstances<T = InstanceProps>(): readonly [React.ForwardRefExoticComponent<Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>, import("@react-three/fiber").MathProps<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>> & import("@react-three/fiber").ReactProps<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>> & Partial<import("@react-three/fiber").EventHandlers>>>, Omit<import("@react-three/fiber").InstanceProps<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>, typeof THREE.InstancedMesh>, "object">>>, "ref" | "args"> & {
|
|
51
|
+
context?: React.Context<Api>;
|
|
52
|
+
range?: number;
|
|
53
|
+
limit?: number;
|
|
54
|
+
frames?: number;
|
|
55
|
+
} & React.RefAttributes<THREE.InstancedMesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>>>, React.ForwardRefExoticComponent<React.PropsWithoutRef<T & Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<PositionMesh, import("@react-three/fiber").MathProps<PositionMesh> & import("@react-three/fiber").ReactProps<PositionMesh> & Partial<import("@react-three/fiber").EventHandlers>>>, Omit<import("@react-three/fiber").InstanceProps<PositionMesh, typeof PositionMesh>, "object">>>, "ref"> & {
|
|
56
|
+
context?: React.Context<Api>;
|
|
57
|
+
}> & React.RefAttributes<PositionMesh & T>>];
|
|
58
|
+
export declare const InstancedAttribute: React.ForwardRefExoticComponent<Omit<import("@react-three/fiber/dist/declarations/src/core/utils").Mutable<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<Partial<import("@react-three/fiber/dist/declarations/src/core/utils").Overwrite<THREE.InstancedBufferAttribute, import("@react-three/fiber").MathProps<THREE.InstancedBufferAttribute> & import("@react-three/fiber").ReactProps<THREE.InstancedBufferAttribute>>>, Omit<import("@react-three/fiber").InstanceProps<THREE.InstancedBufferAttribute, typeof THREE.InstancedBufferAttribute>, "object">>>, "ref" | "args"> & {
|
|
59
|
+
name: string;
|
|
60
|
+
defaultValue: any;
|
|
61
|
+
normalized?: boolean;
|
|
62
|
+
usage?: number;
|
|
63
|
+
} & React.RefAttributes<unknown>>;
|
|
64
|
+
export {};
|