@react-three/drei 9.0.0-beta.3 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +293 -26
  2. package/core/AdaptiveEvents.cjs.js +1 -1
  3. package/core/AdaptiveEvents.js +8 -3
  4. package/core/ArcballControls.cjs.js +1 -1
  5. package/core/ArcballControls.js +13 -25
  6. package/core/Bounds.cjs.js +1 -1
  7. package/core/Bounds.d.ts +2 -1
  8. package/core/Bounds.js +25 -14
  9. package/core/Clone.cjs.js +1 -0
  10. package/core/Clone.d.ts +11 -0
  11. package/core/Clone.js +92 -0
  12. package/core/Cloud.cjs.js +1 -1
  13. package/core/Cloud.d.ts +3 -1
  14. package/core/Cloud.js +4 -1
  15. package/core/ComputedAttribute.cjs.js +1 -0
  16. package/core/ComputedAttribute.d.ts +9 -0
  17. package/core/ComputedAttribute.js +34 -0
  18. package/core/ContactShadows.cjs.js +1 -1
  19. package/core/ContactShadows.d.ts +3 -1
  20. package/core/ContactShadows.js +15 -2
  21. package/core/CubeCamera.cjs.js +1 -1
  22. package/core/CubeCamera.js +6 -6
  23. package/core/DeviceOrientationControls.cjs.js +1 -1
  24. package/core/DeviceOrientationControls.d.ts +1 -1
  25. package/core/DeviceOrientationControls.js +2 -6
  26. package/core/Effects.cjs.js +1 -1
  27. package/core/Effects.d.ts +3 -2
  28. package/core/Effects.js +2 -2
  29. package/core/Environment.cjs.js +1 -1
  30. package/core/Environment.d.ts +13 -3
  31. package/core/Environment.js +96 -33
  32. package/core/FirstPersonControls.cjs.js +1 -1
  33. package/core/FirstPersonControls.d.ts +4 -2
  34. package/core/FirstPersonControls.js +9 -8
  35. package/core/Float.cjs.js +1 -1
  36. package/core/Float.d.ts +1 -1
  37. package/core/Float.js +5 -4
  38. package/core/FlyControls.cjs.js +1 -1
  39. package/core/FlyControls.d.ts +1 -0
  40. package/core/FlyControls.js +10 -11
  41. package/core/GizmoHelper.cjs.js +1 -1
  42. package/core/GizmoHelper.d.ts +2 -1
  43. package/core/GizmoHelper.js +31 -41
  44. package/core/Image.cjs.js +1 -1
  45. package/core/Image.d.ts +5 -3
  46. package/core/Image.js +6 -1
  47. package/core/Instances.cjs.js +1 -1
  48. package/core/Instances.d.ts +1 -1
  49. package/core/Instances.js +5 -11
  50. package/core/Lightformer.cjs.js +1 -0
  51. package/core/Lightformer.d.ts +41 -0
  52. package/core/Lightformer.js +51 -0
  53. package/core/MapControls.cjs.js +1 -1
  54. package/core/MapControls.d.ts +2 -1
  55. package/core/MapControls.js +8 -11
  56. package/core/MeshReflectorMaterial.cjs.js +1 -1
  57. package/core/MeshReflectorMaterial.d.ts +1 -2
  58. package/core/MeshReflectorMaterial.js +4 -5
  59. package/core/OrbitControls.cjs.js +1 -1
  60. package/core/OrbitControls.js +18 -31
  61. package/core/PointMaterial.cjs.js +1 -1
  62. package/core/PointMaterial.d.ts +5 -8
  63. package/core/PointMaterial.js +16 -34
  64. package/core/PointerLockControls.cjs.js +1 -1
  65. package/core/PointerLockControls.d.ts +3 -1
  66. package/core/PointerLockControls.js +43 -25
  67. package/core/Points.cjs.js +1 -1
  68. package/core/Points.d.ts +3 -3
  69. package/core/Points.js +11 -30
  70. package/core/PositionalAudio.d.ts +1 -1
  71. package/core/Reflector.d.ts +1 -1
  72. package/core/Sampler.cjs.js +1 -0
  73. package/core/Sampler.d.ts +21 -0
  74. package/core/Sampler.js +65 -0
  75. package/core/SpotLight.d.ts +1 -1
  76. package/core/Stage.cjs.js +1 -1
  77. package/core/Stage.js +1 -2
  78. package/core/Stars.cjs.js +1 -1
  79. package/core/Stars.js +3 -0
  80. package/core/Stats.cjs.js +1 -1
  81. package/core/Stats.js +1 -1
  82. package/core/Text.cjs.js +1 -1
  83. package/core/Text.d.ts +2 -1
  84. package/core/Text.js +3 -2
  85. package/core/TrackballControls.cjs.js +1 -1
  86. package/core/TrackballControls.d.ts +1 -1
  87. package/core/TrackballControls.js +7 -5
  88. package/core/Trail.cjs.js +1 -0
  89. package/core/Trail.d.ts +21 -0
  90. package/core/Trail.js +160 -0
  91. package/core/TransformControls.cjs.js +1 -1
  92. package/core/TransformControls.d.ts +1 -1
  93. package/core/TransformControls.js +7 -13
  94. package/core/index.cjs.js +1 -1
  95. package/core/index.d.ts +6 -0
  96. package/core/index.js +9 -2
  97. package/core/useBoxProjectedEnv.cjs.js +1 -0
  98. package/core/useBoxProjectedEnv.d.ts +8 -0
  99. package/core/useBoxProjectedEnv.js +98 -0
  100. package/core/useFBO.cjs.js +1 -1
  101. package/core/useFBO.d.ts +1 -1
  102. package/core/useFBO.js +22 -24
  103. package/core/useGLTF.d.ts +1 -1
  104. package/core/useHelper.d.ts +3 -1
  105. package/core/useMatcapTexture.cjs.js +1 -1
  106. package/core/useProgress.d.ts +1 -1
  107. package/index.cjs.js +1 -1
  108. package/index.js +7 -1
  109. package/materials/ConvolutionMaterial.cjs.js +1 -1
  110. package/materials/ConvolutionMaterial.js +2 -0
  111. package/materials/MeshReflectorMaterial.cjs.js +1 -1
  112. package/materials/MeshReflectorMaterial.d.ts +0 -3
  113. package/materials/MeshReflectorMaterial.js +8 -34
  114. package/materials/SpotLightMaterial.cjs.js +1 -1
  115. package/materials/SpotLightMaterial.js +3 -0
  116. package/native/index.cjs.js +1 -1
  117. package/native/index.js +9 -2
  118. package/package.json +6 -5
  119. package/web/CycleRaycast.cjs.js +1 -1
  120. package/web/CycleRaycast.js +23 -20
  121. package/web/ScrollControls.cjs.js +1 -1
  122. package/web/ScrollControls.js +16 -12
  123. package/web/Select.cjs.js +1 -1
  124. package/web/Select.js +9 -8
  125. package/web/index.cjs.js +1 -1
  126. package/web/index.js +9 -2
@@ -0,0 +1,41 @@
1
+ import { ReactThreeFiber } from '@react-three/fiber';
2
+ import * as React from 'react';
3
+ import * as THREE from 'three';
4
+ export declare type LightProps = JSX.IntrinsicElements['mesh'] & {
5
+ args?: any[];
6
+ map?: THREE.Texture;
7
+ toneMapped?: boolean;
8
+ color?: ReactThreeFiber.Color;
9
+ form?: 'circle' | 'ring' | 'rect' | any;
10
+ scale?: number | [number, number, number] | [number, number];
11
+ intensity?: number;
12
+ target?: [number, number, number] | THREE.Vector3;
13
+ };
14
+ export declare const Lightformer: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>, ReactThreeFiber.NodeProps<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>, typeof THREE.Mesh>>>, ReactThreeFiber.NonFunctionKeys<{
15
+ position?: ReactThreeFiber.Vector3 | undefined;
16
+ up?: ReactThreeFiber.Vector3 | undefined;
17
+ scale?: ReactThreeFiber.Vector3 | undefined;
18
+ rotation?: ReactThreeFiber.Euler | undefined;
19
+ matrix?: ReactThreeFiber.Matrix4 | undefined;
20
+ quaternion?: ReactThreeFiber.Quaternion | undefined;
21
+ layers?: ReactThreeFiber.Layers | undefined;
22
+ dispose?: (() => void) | null | undefined;
23
+ }>> & {
24
+ position?: ReactThreeFiber.Vector3 | undefined;
25
+ up?: ReactThreeFiber.Vector3 | undefined;
26
+ scale?: ReactThreeFiber.Vector3 | undefined;
27
+ rotation?: ReactThreeFiber.Euler | undefined;
28
+ matrix?: ReactThreeFiber.Matrix4 | undefined;
29
+ quaternion?: ReactThreeFiber.Quaternion | undefined;
30
+ layers?: ReactThreeFiber.Layers | undefined;
31
+ dispose?: (() => void) | null | undefined;
32
+ } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
33
+ args?: any[] | undefined;
34
+ map?: THREE.Texture | undefined;
35
+ toneMapped?: boolean | undefined;
36
+ color?: ReactThreeFiber.Color | undefined;
37
+ form?: 'circle' | 'ring' | 'rect' | any;
38
+ scale?: number | [number, number] | [number, number, number] | undefined;
39
+ intensity?: number | undefined;
40
+ target?: THREE.Vector3 | [number, number, number] | undefined;
41
+ }, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "form" | "map" | "material" | "target" | "toneMapped" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "intensity"> & React.RefAttributes<unknown>>;
@@ -0,0 +1,51 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import { applyProps } from '@react-three/fiber';
3
+ import * as React from 'react';
4
+ import * as THREE from 'three';
5
+ import mergeRefs from 'react-merge-refs';
6
+
7
+ const Lightformer = /*#__PURE__*/React.forwardRef(({
8
+ args,
9
+ map,
10
+ toneMapped = false,
11
+ color = 'white',
12
+ form: Form = 'rect',
13
+ intensity = 1,
14
+ scale = 1,
15
+ target,
16
+ children,
17
+ ...props
18
+ }, forwardRef) => {
19
+ // Apply emissive power
20
+ const ref = React.useRef(null);
21
+ React.useLayoutEffect(() => {
22
+ if (!children && !props.material) {
23
+ applyProps(ref.current.material, {
24
+ color
25
+ });
26
+ ref.current.material.color.multiplyScalar(intensity);
27
+ }
28
+ }, [color, intensity, children, props.material]); // Target light
29
+
30
+ React.useLayoutEffect(() => {
31
+ if (target) ref.current.lookAt(Array.isArray(target) ? new THREE.Vector3(...target) : target);
32
+ }, [target]); // Fix 2-dimensional scale
33
+
34
+ scale = Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;
35
+ return /*#__PURE__*/React.createElement("mesh", _extends({
36
+ ref: mergeRefs([ref, forwardRef]),
37
+ scale: scale
38
+ }, props), Form === 'circle' ? /*#__PURE__*/React.createElement("ringGeometry", {
39
+ args: [0, 1, 64]
40
+ }) : Form === 'ring' ? /*#__PURE__*/React.createElement("ringGeometry", {
41
+ args: [0.5, 1, 64]
42
+ }) : Form === 'rect' ? /*#__PURE__*/React.createElement("planeGeometry", null) : /*#__PURE__*/React.createElement(Form, {
43
+ args: args
44
+ }), children ? children : !props.material ? /*#__PURE__*/React.createElement("meshBasicMaterial", {
45
+ toneMapped: toneMapped,
46
+ map: map,
47
+ side: THREE.DoubleSide
48
+ }) : null);
49
+ });
50
+
51
+ export { Lightformer };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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 i=a(e),s=o(r);const u=s.forwardRef(((e={enableDamping:!0},r)=>{const{camera:a,onChange:o,onStart:u,onEnd:c,...d}=e,f=t.useThree((({invalidate:e})=>e)),l=t.useThree((({camera:e})=>e)),v=t.useThree((({gl:e})=>e.domElement)),p=a||l,b=s.useMemo((()=>new n.MapControls(p)),[p]);return s.useEffect((()=>{b.connect(v);const e=e=>{f(),o&&o(e)};return b.addEventListener("change",e),u&&b.addEventListener("start",u),c&&b.addEventListener("end",c),()=>{b.dispose(),b.removeEventListener("change",e),u&&b.removeEventListener("start",u),c&&b.removeEventListener("end",c)}}),[o,u,c,b,f,v]),t.useFrame((()=>b.update())),s.createElement("primitive",i.default({ref:r,dispose:void 0,object:b,enableDamping:!0},d))}));exports.MapControls=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=a(e),i=o(r);const u=i.forwardRef(((e={enableDamping:!0},r)=>{const{domElement:a,camera:o,onChange:u,onStart:c,onEnd:d,...l}=e,f=t.useThree((e=>e.invalidate)),v=t.useThree((e=>e.camera)),m=t.useThree((e=>e.gl)),p=t.useThree((e=>e.events)),b=a||p.connected||m.domElement,E=o||v,h=i.useMemo((()=>new n.MapControls(E)),[E]);return i.useEffect((()=>{h.connect(b);const e=e=>{f(),u&&u(e)};return h.addEventListener("change",e),c&&h.addEventListener("start",c),d&&h.addEventListener("end",d),()=>{h.dispose(),h.removeEventListener("change",e),c&&h.removeEventListener("start",c),d&&h.removeEventListener("end",d)}}),[u,c,d,h,f,b]),t.useFrame((()=>h.update())),i.createElement("primitive",s.default({ref:r,dispose:void 0,object:h,enableDamping:!0},l))}));exports.MapControls=u;
@@ -8,5 +8,6 @@ export declare type MapControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber
8
8
  onChange?: (e?: THREE.Event) => void;
9
9
  onStart?: (e?: THREE.Event) => void;
10
10
  onEnd?: (e?: THREE.Event) => void;
11
+ domElement?: HTMLElement;
11
12
  }>;
12
- export declare const MapControls: React.ForwardRefExoticComponent<Pick<MapControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "reset" | "enabled" | "update" | "onStart" | "keys" | "target" | "touches" | "connect" | "domElement" | "minDistance" | "maxDistance" | "minZoom" | "maxZoom" | "minPolarAngle" | "maxPolarAngle" | "minAzimuthAngle" | "maxAzimuthAngle" | "enableDamping" | "dampingFactor" | "enableZoom" | "zoomSpeed" | "enableRotate" | "rotateSpeed" | "enablePan" | "panSpeed" | "screenSpacePanning" | "keyPanSpeed" | "autoRotate" | "autoRotateSpeed" | "reverseOrbit" | "mouseButtons" | "target0" | "position0" | "zoom0" | "_domElementKeyEvents" | "getPolarAngle" | "getAzimuthalAngle" | "setPolarAngle" | "setAzimuthalAngle" | "getDistance" | "listenToKeyEvents" | "saveState" | "onEnd"> & React.RefAttributes<MapControlsImpl>>;
13
+ export declare const MapControls: React.ForwardRefExoticComponent<Pick<MapControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "reset" | "enabled" | "connect" | "update" | "onStart" | "keys" | "target" | "touches" | "domElement" | "minDistance" | "maxDistance" | "minZoom" | "maxZoom" | "minPolarAngle" | "maxPolarAngle" | "minAzimuthAngle" | "maxAzimuthAngle" | "enableDamping" | "dampingFactor" | "enableZoom" | "zoomSpeed" | "enableRotate" | "rotateSpeed" | "enablePan" | "panSpeed" | "screenSpacePanning" | "keyPanSpeed" | "autoRotate" | "autoRotateSpeed" | "reverseOrbit" | "mouseButtons" | "target0" | "position0" | "zoom0" | "_domElementKeyEvents" | "getPolarAngle" | "getAzimuthalAngle" | "setPolarAngle" | "setAzimuthalAngle" | "getDistance" | "listenToKeyEvents" | "saveState" | "onEnd"> & React.RefAttributes<MapControlsImpl>>;
@@ -7,25 +7,22 @@ const MapControls = /*#__PURE__*/React.forwardRef((props = {
7
7
  enableDamping: true
8
8
  }, ref) => {
9
9
  const {
10
+ domElement,
10
11
  camera,
11
12
  onChange,
12
13
  onStart,
13
14
  onEnd,
14
15
  ...rest
15
16
  } = props;
16
- const invalidate = useThree(({
17
- invalidate
18
- }) => invalidate);
19
- const defaultCamera = useThree(({
20
- camera
21
- }) => camera);
22
- const domElement = useThree(({
23
- gl
24
- }) => gl.domElement);
17
+ const invalidate = useThree(state => state.invalidate);
18
+ const defaultCamera = useThree(state => state.camera);
19
+ const gl = useThree(state => state.gl);
20
+ const events = useThree(state => state.events);
21
+ const explDomElement = domElement || events.connected || gl.domElement;
25
22
  const explCamera = camera || defaultCamera;
26
23
  const controls = React.useMemo(() => new MapControls$1(explCamera), [explCamera]);
27
24
  React.useEffect(() => {
28
- controls.connect(domElement);
25
+ controls.connect(explDomElement);
29
26
 
30
27
  const callback = e => {
31
28
  invalidate();
@@ -41,7 +38,7 @@ const MapControls = /*#__PURE__*/React.forwardRef((props = {
41
38
  if (onStart) controls.removeEventListener('start', onStart);
42
39
  if (onEnd) controls.removeEventListener('end', onEnd);
43
40
  };
44
- }, [onChange, onStart, onEnd, controls, invalidate, domElement]);
41
+ }, [onChange, onStart, onEnd, controls, invalidate, explDomElement]);
45
42
  useFrame(() => controls.update());
46
43
  return /*#__PURE__*/React.createElement("primitive", _extends({
47
44
  ref: ref,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("react-merge-refs"),i=require("../materials/BlurPass.cjs.js"),o=require("../materials/MeshReflectorMaterial.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js");var u=s(e),d=l(t),c=s(n);a.extend({MeshReflectorMaterialImpl:o.MeshReflectorMaterial});const p=d.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:n=256,blur:o=[0,0],minDepthThreshold:s=.9,maxDepthThreshold:l=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,debug:f=0,distortion:x=1,mixContrast:M=1,distortionMap:S,reflectorOffset:T=0,...b},y)=>{const w=a.useThree((({gl:e})=>e)),g=a.useThree((({camera:e})=>e)),R=a.useThree((({scene:e})=>e)),v=(o=Array.isArray(o)?o:[o,o])[0]+o[1]>0,j=d.useRef(null),[D]=d.useState((()=>new r.Plane)),[B]=d.useState((()=>new r.Vector3)),[_]=d.useState((()=>new r.Vector3)),[O]=d.useState((()=>new r.Vector3)),[P]=d.useState((()=>new r.Matrix4)),[U]=d.useState((()=>new r.Vector3(0,0,-1))),[E]=d.useState((()=>new r.Vector4)),[V]=d.useState((()=>new r.Vector3)),[W]=d.useState((()=>new r.Vector3)),[F]=d.useState((()=>new r.Vector4)),[q]=d.useState((()=>new r.Matrix4)),[I]=d.useState((()=>new r.PerspectiveCamera)),C=d.useCallback((()=>{var e;const t=j.current.parent||(null==(e=j.current)?void 0:e.__r3f.parent);if(!t)return;if(_.setFromMatrixPosition(t.matrixWorld),O.setFromMatrixPosition(g.matrixWorld),P.extractRotation(t.matrixWorld),B.set(0,0,1),B.applyMatrix4(P),_.addScaledVector(B,T),V.subVectors(_,O),V.dot(B)>0)return;V.reflect(B).negate(),V.add(_),P.extractRotation(g.matrixWorld),U.set(0,0,-1),U.applyMatrix4(P),U.add(O),W.subVectors(_,U),W.reflect(B).negate(),W.add(_),I.position.copy(V),I.up.set(0,1,0),I.up.applyMatrix4(P),I.up.reflect(B),I.lookAt(W),I.far=g.far,I.updateMatrixWorld(),I.projectionMatrix.copy(g.projectionMatrix),q.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),q.multiply(I.projectionMatrix),q.multiply(I.matrixWorldInverse),q.multiply(t.matrixWorld),D.setFromNormalAndCoplanarPoint(B,_),D.applyMatrix4(I.matrixWorldInverse),E.set(D.normal.x,D.normal.y,D.normal.z,D.constant);const r=I.projectionMatrix;F.x=(Math.sign(E.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(E.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],E.multiplyScalar(2/E.dot(F)),r.elements[2]=E.x,r.elements[6]=E.y,r.elements[10]=E.z+1,r.elements[14]=E.w}),[g,T]),[k,L,z,A]=d.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,encoding:w.outputEncoding},u=new r.WebGLRenderTarget(n,n,a);u.depthBuffer=!0,u.depthTexture=new r.DepthTexture(n,n),u.depthTexture.format=r.DepthFormat,u.depthTexture.type=r.UnsignedShortType;const d=new r.WebGLRenderTarget(n,n,a);return[u,d,new i.BlurPass({gl:w,resolution:n,width:o[0],height:o[1],minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:q,mixBlur:e,tDiffuse:u.texture,tDepth:u.depthTexture,tDiffuseBlur:d.texture,hasBlur:v,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m,transparent:!0,debug:f,distortion:x,distortionMap:S,mixContrast:M,"defines-USE_BLUR":v?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":S?"":void 0}]}),[w,o,q,n,h,v,e,t,s,l,p,m,f,x,S,M]);return a.useFrame((()=>{var e;const t=j.current.parent||(null==(e=j.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=w.xr.enabled,a=w.shadowMap.autoUpdate;C(),w.xr.enabled=!1,w.shadowMap.autoUpdate=!1,w.setRenderTarget(k),w.state.buffers.depth.setMask(!0),w.autoClear||w.clear(),w.render(R,I),v&&z.render(w,k,L),w.xr.enabled=r,w.shadowMap.autoUpdate=a,t.visible=!0,w.setRenderTarget(null)})),d.createElement("meshReflectorMaterialImpl",u.default({attach:"material",key:"key"+A["defines-USE_BLUR"]+A["defines-USE_DEPTH"]+A["defines-USE_DISTORTION"],ref:c.default([j,y])},A,b))}));exports.MeshReflectorMaterial=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("react-merge-refs"),o=require("../materials/BlurPass.cjs.js"),i=require("../materials/MeshReflectorMaterial.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js");var u=s(e),d=l(t),c=s(n);a.extend({MeshReflectorMaterialImpl:i.MeshReflectorMaterial});const p=d.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:n=256,blur:i=[0,0],minDepthThreshold:s=.9,maxDepthThreshold:l=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,distortion:f=1,mixContrast:x=1,distortionMap:M,reflectorOffset:T=0,...S},y)=>{const w=a.useThree((({gl:e})=>e)),b=a.useThree((({camera:e})=>e)),g=a.useThree((({scene:e})=>e)),R=(i=Array.isArray(i)?i:[i,i])[0]+i[1]>0,v=d.useRef(null),[j]=d.useState((()=>new r.Plane)),[D]=d.useState((()=>new r.Vector3)),[B]=d.useState((()=>new r.Vector3)),[_]=d.useState((()=>new r.Vector3)),[O]=d.useState((()=>new r.Matrix4)),[P]=d.useState((()=>new r.Vector3(0,0,-1))),[U]=d.useState((()=>new r.Vector4)),[E]=d.useState((()=>new r.Vector3)),[V]=d.useState((()=>new r.Vector3)),[F]=d.useState((()=>new r.Vector4)),[W]=d.useState((()=>new r.Matrix4)),[q]=d.useState((()=>new r.PerspectiveCamera)),I=d.useCallback((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;if(B.setFromMatrixPosition(t.matrixWorld),_.setFromMatrixPosition(b.matrixWorld),O.extractRotation(t.matrixWorld),D.set(0,0,1),D.applyMatrix4(O),B.addScaledVector(D,T),E.subVectors(B,_),E.dot(D)>0)return;E.reflect(D).negate(),E.add(B),O.extractRotation(b.matrixWorld),P.set(0,0,-1),P.applyMatrix4(O),P.add(_),V.subVectors(B,P),V.reflect(D).negate(),V.add(B),q.position.copy(E),q.up.set(0,1,0),q.up.applyMatrix4(O),q.up.reflect(D),q.lookAt(V),q.far=b.far,q.updateMatrixWorld(),q.projectionMatrix.copy(b.projectionMatrix),W.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),W.multiply(q.projectionMatrix),W.multiply(q.matrixWorldInverse),W.multiply(t.matrixWorld),j.setFromNormalAndCoplanarPoint(D,B),j.applyMatrix4(q.matrixWorldInverse),U.set(j.normal.x,j.normal.y,j.normal.z,j.constant);const r=q.projectionMatrix;F.x=(Math.sign(U.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(U.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],U.multiplyScalar(2/U.dot(F)),r.elements[2]=U.x,r.elements[6]=U.y,r.elements[10]=U.z+1,r.elements[14]=U.w}),[b,T]),[C,k,L,z]=d.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,encoding:w.outputEncoding,type:r.HalfFloatType},u=new r.WebGLRenderTarget(n,n,a);u.depthBuffer=!0,u.depthTexture=new r.DepthTexture(n,n),u.depthTexture.format=r.DepthFormat,u.depthTexture.type=r.UnsignedShortType;const d=new r.WebGLRenderTarget(n,n,a);return[u,d,new o.BlurPass({gl:w,resolution:n,width:i[0],height:i[1],minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:W,mixBlur:e,tDiffuse:u.texture,tDepth:u.depthTexture,tDiffuseBlur:d.texture,hasBlur:R,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m,transparent:!0,distortion:f,distortionMap:M,mixContrast:x,"defines-USE_BLUR":R?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":M?"":void 0}]}),[w,i,W,n,h,R,e,t,s,l,p,m,f,M,x]);return a.useFrame((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=w.xr.enabled,a=w.shadowMap.autoUpdate;I(),w.xr.enabled=!1,w.shadowMap.autoUpdate=!1,w.setRenderTarget(C),w.state.buffers.depth.setMask(!0),w.autoClear||w.clear(),w.render(g,q),R&&L.render(w,C,k),w.xr.enabled=r,w.shadowMap.autoUpdate=a,t.visible=!0,w.setRenderTarget(null)})),d.createElement("meshReflectorMaterialImpl",u.default({attach:"material",key:"key"+z["defines-USE_BLUR"]+z["defines-USE_DEPTH"]+z["defines-USE_DISTORTION"],ref:c.default([v,y])},z,S))}));exports.MeshReflectorMaterial=p;
@@ -11,7 +11,6 @@ export declare type Props = JSX.IntrinsicElements['meshStandardMaterial'] & {
11
11
  maxDepthThreshold?: number;
12
12
  depthScale?: number;
13
13
  depthToBlurRatioBias?: number;
14
- debug?: number;
15
14
  distortionMap?: Texture;
16
15
  distortion?: number;
17
16
  mixContrast?: number;
@@ -24,4 +23,4 @@ declare global {
24
23
  }
25
24
  }
26
25
  }
27
- export declare const MeshReflectorMaterial: React.ForwardRefExoticComponent<Pick<Props, "attach" | "args" | "children" | "key" | "onUpdate" | "blur" | "resolution" | keyof import("three").MeshStandardMaterial | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "debug" | "distortion" | "mixContrast" | "distortionMap" | "reflectorOffset"> & React.RefAttributes<MeshReflectorMaterialImpl>>;
26
+ export declare const MeshReflectorMaterial: React.ForwardRefExoticComponent<Pick<Props, "attach" | "args" | "children" | "key" | "onUpdate" | "blur" | "resolution" | keyof import("three").MeshStandardMaterial | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "distortion" | "mixContrast" | "distortionMap" | "reflectorOffset"> & React.RefAttributes<MeshReflectorMaterialImpl>>;
@@ -1,6 +1,6 @@
1
1
  import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as React from 'react';
3
- import { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, LinearFilter, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType } from 'three';
3
+ import { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, LinearFilter, HalfFloatType, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType } from 'three';
4
4
  import { extend, useThree, useFrame } from '@react-three/fiber';
5
5
  import mergeRefs from 'react-merge-refs';
6
6
  import { BlurPass } from '../materials/BlurPass.js';
@@ -19,7 +19,6 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
19
19
  depthScale = 0,
20
20
  depthToBlurRatioBias = 0.25,
21
21
  mirror = 0,
22
- debug = 0,
23
22
  distortion = 1,
24
23
  mixContrast = 1,
25
24
  distortionMap,
@@ -110,7 +109,8 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
110
109
  const parameters = {
111
110
  minFilter: LinearFilter,
112
111
  magFilter: LinearFilter,
113
- encoding: gl.outputEncoding
112
+ encoding: gl.outputEncoding,
113
+ type: HalfFloatType
114
114
  };
115
115
  const fbo1 = new WebGLRenderTarget(resolution, resolution, parameters);
116
116
  fbo1.depthBuffer = true;
@@ -142,7 +142,6 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
142
142
  depthScale,
143
143
  depthToBlurRatioBias,
144
144
  transparent: true,
145
- debug,
146
145
  distortion,
147
146
  distortionMap,
148
147
  mixContrast,
@@ -151,7 +150,7 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
151
150
  'defines-USE_DISTORTION': distortionMap ? '' : undefined
152
151
  };
153
152
  return [fbo1, fbo2, blurpass, reflectorProps];
154
- }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, debug, distortion, distortionMap, mixContrast]);
153
+ }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);
155
154
  useFrame(() => {
156
155
  var _materialRef$current2;
157
156
 
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(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 a=o(e),u=s(r);const c=r.forwardRef((({makeDefault:e,camera:o,regress:s,domElement:c,enableDamping:i=!0,onChange:d,onStart:l,onEnd:f,...b},m)=>{const v=t.useThree((({invalidate:e})=>e)),p=t.useThree((({camera:e})=>e)),h=t.useThree((({gl:e})=>e)),E=t.useThree((({events:e})=>e)),g=t.useThree((({set:e})=>e)),O=t.useThree((({get:e})=>e)),j=t.useThree((({performance:e})=>e)),T=o||p,y=c||("boolean"!=typeof E.connected?E.connected:h.domElement),L=r.useMemo((()=>new n.OrbitControls(T)),[T]);return t.useFrame((()=>{L.enabled&&L.update()})),r.useEffect((()=>{const e=e=>{v(),s&&j.regress(),d&&d(e)};return L.connect(y),L.addEventListener("change",e),l&&L.addEventListener("start",l),f&&L.addEventListener("end",f),()=>{L.removeEventListener("change",e),l&&L.removeEventListener("start",l),f&&L.removeEventListener("end",f),L.dispose()}}),[y,d,l,f,s,L,v]),r.useEffect((()=>{if(e){const e=O().controls;return g({controls:L}),()=>g({controls:e})}}),[e,L]),u.createElement("primitive",a.default({ref:m,object:L,enableDamping:i},b))}));exports.OrbitControls=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(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 a=s(e),u=o(r);const c=u.forwardRef((({makeDefault:e,camera:r,regress:s,domElement:o,enableDamping:c=!0,onChange:i,onStart:f,onEnd:d,...l},m)=>{const b=t.useThree((e=>e.invalidate)),v=t.useThree((e=>e.camera)),h=t.useThree((e=>e.gl)),p=t.useThree((e=>e.events)),E=t.useThree((e=>e.set)),g=t.useThree((e=>e.get)),O=t.useThree((e=>e.performance)),j=r||v,T=o||p.connected||h.domElement,L=u.useMemo((()=>new n.OrbitControls(j)),[j]);return t.useFrame((()=>{L.enabled&&L.update()})),u.useEffect((()=>(L.connect(T),()=>{L.dispose()})),[T,s,L,b]),u.useEffect((()=>{const e=e=>{b(),s&&O.regress(),i&&i(e)};return L.addEventListener("change",e),f&&L.addEventListener("start",f),d&&L.addEventListener("end",d),()=>{f&&L.removeEventListener("start",f),d&&L.removeEventListener("end",d),L.removeEventListener("change",e)}}),[i,f,d]),u.useEffect((()=>{if(e){const e=g().controls;return E({controls:L}),()=>E({controls:e})}}),[e,L]),u.createElement("primitive",a.default({ref:m,object:L,enableDamping:c},l))}));exports.OrbitControls=c;
@@ -1,10 +1,9 @@
1
1
  import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import { useThree, useFrame } from '@react-three/fiber';
3
3
  import * as React from 'react';
4
- import { forwardRef, useMemo, useEffect } from 'react';
5
4
  import { OrbitControls as OrbitControls$1 } from 'three-stdlib';
6
5
 
7
- const OrbitControls = /*#__PURE__*/forwardRef(({
6
+ const OrbitControls = /*#__PURE__*/React.forwardRef(({
8
7
  makeDefault,
9
8
  camera,
10
9
  regress,
@@ -15,52 +14,40 @@ const OrbitControls = /*#__PURE__*/forwardRef(({
15
14
  onEnd,
16
15
  ...restProps
17
16
  }, ref) => {
18
- const invalidate = useThree(({
19
- invalidate
20
- }) => invalidate);
21
- const defaultCamera = useThree(({
22
- camera
23
- }) => camera);
24
- const gl = useThree(({
25
- gl
26
- }) => gl);
27
- const events = useThree(({
28
- events
29
- }) => events);
30
- const set = useThree(({
31
- set
32
- }) => set);
33
- const get = useThree(({
34
- get
35
- }) => get);
36
- const performance = useThree(({
37
- performance
38
- }) => performance);
17
+ const invalidate = useThree(state => state.invalidate);
18
+ const defaultCamera = useThree(state => state.camera);
19
+ const gl = useThree(state => state.gl);
20
+ const events = useThree(state => state.events);
21
+ const set = useThree(state => state.set);
22
+ const get = useThree(state => state.get);
23
+ const performance = useThree(state => state.performance);
39
24
  const explCamera = camera || defaultCamera;
40
- const explDomElement = domElement || (typeof events.connected !== 'boolean' ? events.connected : gl.domElement);
41
- const controls = useMemo(() => new OrbitControls$1(explCamera), [explCamera]);
25
+ const explDomElement = domElement || events.connected || gl.domElement;
26
+ const controls = React.useMemo(() => new OrbitControls$1(explCamera), [explCamera]);
42
27
  useFrame(() => {
43
28
  if (controls.enabled) controls.update();
44
29
  });
45
- useEffect(() => {
30
+ React.useEffect(() => {
31
+ controls.connect(explDomElement);
32
+ return () => void controls.dispose();
33
+ }, [explDomElement, regress, controls, invalidate]);
34
+ React.useEffect(() => {
46
35
  const callback = e => {
47
36
  invalidate();
48
37
  if (regress) performance.regress();
49
38
  if (onChange) onChange(e);
50
39
  };
51
40
 
52
- controls.connect(explDomElement);
53
41
  controls.addEventListener('change', callback);
54
42
  if (onStart) controls.addEventListener('start', onStart);
55
43
  if (onEnd) controls.addEventListener('end', onEnd);
56
44
  return () => {
57
- controls.removeEventListener('change', callback);
58
45
  if (onStart) controls.removeEventListener('start', onStart);
59
46
  if (onEnd) controls.removeEventListener('end', onEnd);
60
- controls.dispose();
47
+ controls.removeEventListener('change', callback);
61
48
  };
62
- }, [explDomElement, onChange, onStart, onEnd, regress, controls, invalidate]);
63
- useEffect(() => {
49
+ }, [onChange, onStart, onEnd]);
50
+ React.useEffect(() => {
64
51
  if (makeDefault) {
65
52
  const old = get().controls;
66
53
  set({
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var a=n(e),i=o(r),l=o(t);class c extends i.ShaderMaterial{constructor(){super({transparent:!0,uniforms:{size:{value:1}},vertexShader:i.ShaderLib.points.vertexShader,fragmentShader:"\n varying vec3 vColor;\n void main() {\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r);\n vec3 color = vColor;\n #ifdef TONE_MAPPING\n color = toneMapping(color);\n #endif\n gl_FragColor = linearToOutputTexel(vec4(color, 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r)));\n }",vertexColors:!0})}get scale(){return this.uniforms.size.value}set scale(e){this.uniforms.size.value=e}}const u=l.forwardRef(((e,r)=>{const[t]=l.useState((()=>new c));return l.createElement("primitive",a.default({object:t,ref:r,attach:"material"},e))}));exports.PointMaterial=u,exports.PointMaterialImpl=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=a(e),l=n(t),u=n(r);class c extends l.PointsMaterial{constructor(e){super(e),this.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace("#include <output_fragment>","\n #include <output_fragment>\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r); \n float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );\n ")}}}const i=u.forwardRef(((e,t)=>{const[r]=u.useState((()=>new c(null)));return u.createElement("primitive",o.default({},e,{object:r,ref:t,attach:"material"}))}));exports.PointMaterial=i,exports.PointMaterialImpl=c;
@@ -1,8 +1,7 @@
1
1
  import * as THREE from 'three';
2
2
  import * as React from 'react';
3
- declare type PointMaterialType = JSX.IntrinsicElements['shaderMaterial'] & {
4
- scale?: number;
5
- };
3
+ import { PrimitiveProps } from '@react-three/fiber';
4
+ declare type PointMaterialType = JSX.IntrinsicElements['pointsMaterial'];
6
5
  declare global {
7
6
  namespace JSX {
8
7
  interface IntrinsicElements {
@@ -10,10 +9,8 @@ declare global {
10
9
  }
11
10
  }
12
11
  }
13
- export declare class PointMaterialImpl extends THREE.ShaderMaterial {
14
- constructor();
15
- get scale(): any;
16
- set scale(v: any);
12
+ export declare class PointMaterialImpl extends THREE.PointsMaterial {
13
+ constructor(props: any);
17
14
  }
18
- export declare const PointMaterial: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>;
15
+ export declare const PointMaterial: React.ForwardRefExoticComponent<Pick<Omit<PrimitiveProps, "object" | "attach">, string | number> & React.RefAttributes<PointMaterialImpl>>;
19
16
  export {};
@@ -2,48 +2,30 @@ import _extends from '@babel/runtime/helpers/esm/extends';
2
2
  import * as THREE from 'three';
3
3
  import * as React from 'react';
4
4
 
5
- class PointMaterialImpl extends THREE.ShaderMaterial {
6
- constructor() {
7
- super({
8
- transparent: true,
9
- uniforms: {
10
- size: {
11
- value: 1
12
- }
13
- },
14
- vertexShader: THREE.ShaderLib.points.vertexShader,
15
- fragmentShader: `
16
- varying vec3 vColor;
17
- void main() {
18
- vec2 cxy = 2.0 * gl_PointCoord - 1.0;
19
- float r = dot(cxy, cxy);
20
- float delta = fwidth(r);
21
- vec3 color = vColor;
22
- #ifdef TONE_MAPPING
23
- color = toneMapping(color);
24
- #endif
25
- gl_FragColor = linearToOutputTexel(vec4(color, 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r)));
26
- }`,
27
- vertexColors: true
28
- });
29
- }
30
-
31
- get scale() {
32
- return this.uniforms.size.value;
33
- }
5
+ class PointMaterialImpl extends THREE.PointsMaterial {
6
+ constructor(props) {
7
+ super(props);
34
8
 
35
- set scale(v) {
36
- this.uniforms.size.value = v;
9
+ this.onBeforeCompile = shader => {
10
+ shader.fragmentShader = shader.fragmentShader.replace('#include <output_fragment>', `
11
+ #include <output_fragment>
12
+ vec2 cxy = 2.0 * gl_PointCoord - 1.0;
13
+ float r = dot(cxy, cxy);
14
+ float delta = fwidth(r);
15
+ float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);
16
+ gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );
17
+ `);
18
+ };
37
19
  }
38
20
 
39
21
  }
40
22
  const PointMaterial = /*#__PURE__*/React.forwardRef((props, ref) => {
41
- const [material] = React.useState(() => new PointMaterialImpl());
42
- return /*#__PURE__*/React.createElement("primitive", _extends({
23
+ const [material] = React.useState(() => new PointMaterialImpl(null));
24
+ return /*#__PURE__*/React.createElement("primitive", _extends({}, props, {
43
25
  object: material,
44
26
  ref: ref,
45
27
  attach: "material"
46
- }, props));
28
+ }));
47
29
  });
48
30
 
49
31
  export { PointMaterial, PointMaterialImpl };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),n=require("react"),r=require("three-stdlib");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var u=l(e),c=o(n);const i=c.forwardRef((({selector:e,onChange:n,onLock:l,onUnlock:o,...i},a)=>{const{camera:d,...s}=i,f=t.useThree((({gl:e})=>e)),v=t.useThree((({camera:e})=>e)),E=t.useThree((({invalidate:e})=>e)),L=d||v,[m]=c.useState((()=>new r.PointerLockControls(L,f.domElement)));return c.useEffect((()=>{const e=e=>{E(),n&&n(e)};return null==m||null==m.addEventListener||m.addEventListener("change",e),l&&(null==m||null==m.addEventListener||m.addEventListener("lock",l)),o&&(null==m||null==m.addEventListener||m.addEventListener("unlock",o)),()=>{null==m||null==m.removeEventListener||m.removeEventListener("change",e),l&&(null==m||null==m.addEventListener||m.addEventListener("lock",l)),o&&(null==m||null==m.addEventListener||m.addEventListener("unlock",o))}}),[n,l,o,m,E]),c.useEffect((()=>{const t=()=>null==m?void 0:m.lock(),n=e?Array.from(document.querySelectorAll(e)):[document];return n.forEach((e=>e&&e.addEventListener("click",t))),()=>{n.forEach((e=>e?e.removeEventListener("click",t):void 0))}}),[m,e]),m?c.createElement("primitive",u.default({ref:a,dispose:void 0,object:m},s)):null}));exports.PointerLockControls=i;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),i=c(r);const a=i.forwardRef((({domElement:e,selector:r,onChange:o,onLock:c,onUnlock:a,enabled:u=!0,...d},l)=>{const{camera:f,...h}=d,m=t.useThree((e=>e.get)),v=t.useThree((e=>e.setEvents)),E=t.useThree((e=>e.gl)),b=t.useThree((e=>e.camera)),p=t.useThree((e=>e.invalidate)),k=t.useThree((e=>e.events)),L=f||b,g=e||k.connected||E.domElement,[j]=i.useState((()=>new n.PointerLockControls(L)));return i.useEffect((()=>{if(u){j.connect(g);const e=m().events.compute;return v({compute(e,t){const r=t.size.width/2,n=t.size.height/2;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{j.disconnect(),v({compute:e})}}}),[u,j]),i.useEffect((()=>{const e=e=>{p(),o&&o(e)};j.addEventListener("change",e),c&&j.addEventListener("lock",c),a&&j.addEventListener("unlock",a);const t=()=>j.lock(),n=r?Array.from(document.querySelectorAll(r)):[document];return n.forEach((e=>e&&e.addEventListener("click",t))),()=>{j.removeEventListener("change",e),c&&j.addEventListener("lock",c),a&&j.addEventListener("unlock",a),n.forEach((e=>e?e.removeEventListener("click",t):void 0))}}),[o,c,a,r]),i.createElement("primitive",s.default({ref:l,object:j},h))}));exports.PointerLockControls=a;
@@ -3,10 +3,12 @@ import * as React from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { PointerLockControls as PointerLockControlsImpl } from 'three-stdlib';
5
5
  export declare type PointerLockControlsProps = ReactThreeFiber.Object3DNode<PointerLockControlsImpl, typeof PointerLockControlsImpl> & {
6
+ domElement?: HTMLElement;
6
7
  selector?: string;
8
+ enabled?: boolean;
7
9
  camera?: THREE.Camera;
8
10
  onChange?: (e?: THREE.Event) => void;
9
11
  onLock?: (e?: THREE.Event) => void;
10
12
  onUnlock?: (e?: THREE.Event) => void;
11
13
  };
12
- export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "connect" | "disconnect" | "domElement" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
14
+ export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "enabled" | "connect" | "disconnect" | "domElement" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
@@ -4,56 +4,74 @@ import * as React from 'react';
4
4
  import { PointerLockControls as PointerLockControls$1 } from 'three-stdlib';
5
5
 
6
6
  const PointerLockControls = /*#__PURE__*/React.forwardRef(({
7
+ domElement,
7
8
  selector,
8
9
  onChange,
9
10
  onLock,
10
11
  onUnlock,
12
+ enabled = true,
11
13
  ...props
12
14
  }, ref) => {
13
15
  const {
14
16
  camera,
15
17
  ...rest
16
18
  } = props;
17
- const gl = useThree(({
18
- gl
19
- }) => gl);
20
- const defaultCamera = useThree(({
21
- camera
22
- }) => camera);
23
- const invalidate = useThree(({
24
- invalidate
25
- }) => invalidate);
19
+ const get = useThree(state => state.get);
20
+ const setEvents = useThree(state => state.setEvents);
21
+ const gl = useThree(state => state.gl);
22
+ const defaultCamera = useThree(state => state.camera);
23
+ const invalidate = useThree(state => state.invalidate);
24
+ const events = useThree(state => state.events);
26
25
  const explCamera = camera || defaultCamera;
27
- const [controls] = React.useState(() => new PointerLockControls$1(explCamera, gl.domElement));
26
+ const explDomElement = domElement || events.connected || gl.domElement;
27
+ const [controls] = React.useState(() => new PointerLockControls$1(explCamera));
28
+ React.useEffect(() => {
29
+ if (enabled) {
30
+ controls.connect(explDomElement); // Force events to be centered while PLC is active
31
+
32
+ const oldComputeOffsets = get().events.compute;
33
+ setEvents({
34
+ compute(event, state) {
35
+ const offsetX = state.size.width / 2;
36
+ const offsetY = state.size.height / 2;
37
+ state.pointer.set(offsetX / state.size.width * 2 - 1, -(offsetY / state.size.height) * 2 + 1);
38
+ state.raycaster.setFromCamera(state.pointer, state.camera);
39
+ }
40
+
41
+ });
42
+ return () => {
43
+ controls.disconnect();
44
+ setEvents({
45
+ compute: oldComputeOffsets
46
+ });
47
+ };
48
+ }
49
+ }, [enabled, controls]);
28
50
  React.useEffect(() => {
29
51
  const callback = e => {
30
52
  invalidate();
31
53
  if (onChange) onChange(e);
32
54
  };
33
55
 
34
- controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('change', callback);
35
- if (onLock) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('lock', onLock);
36
- if (onUnlock) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('unlock', onUnlock);
37
- return () => {
38
- controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);
39
- if (onLock) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('lock', onLock);
40
- if (onUnlock) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('unlock', onUnlock);
41
- };
42
- }, [onChange, onLock, onUnlock, controls, invalidate]);
43
- React.useEffect(() => {
44
- const handler = () => controls == null ? void 0 : controls.lock();
56
+ controls.addEventListener('change', callback);
57
+ if (onLock) controls.addEventListener('lock', onLock);
58
+ if (onUnlock) controls.addEventListener('unlock', onUnlock); // Enforce previous interaction
59
+
60
+ const handler = () => controls.lock();
45
61
 
46
62
  const elements = selector ? Array.from(document.querySelectorAll(selector)) : [document];
47
63
  elements.forEach(element => element && element.addEventListener('click', handler));
48
64
  return () => {
65
+ controls.removeEventListener('change', callback);
66
+ if (onLock) controls.addEventListener('lock', onLock);
67
+ if (onUnlock) controls.addEventListener('unlock', onUnlock);
49
68
  elements.forEach(element => element ? element.removeEventListener('click', handler) : undefined);
50
69
  };
51
- }, [controls, selector]);
52
- return controls ? /*#__PURE__*/React.createElement("primitive", _extends({
70
+ }, [onChange, onLock, onUnlock, selector]);
71
+ return /*#__PURE__*/React.createElement("primitive", _extends({
53
72
  ref: ref,
54
- dispose: undefined,
55
73
  object: controls
56
- }, rest)) : null;
74
+ }, rest));
57
75
  });
58
76
 
59
77
  export { PointerLockControls };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),a=require("@react-three/fiber"),n=require("react-merge-refs"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),c=i(t),l=i(r),f=o(n);let d,m;const b=l.createContext(null),y=new c.Matrix4,g=new c.Vector3,p=new c.Color,h=l.forwardRef((({children:e,range:t,limit:r=1e3,...n},u)=>{const o=l.useRef(null),[i,h]=l.useState([]),[[x,E,w]]=l.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));l.useLayoutEffect((()=>{o.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,i.length)}),[i,t]),l.useEffect((()=>{o.current.geometry.attributes.position.needsUpdate=!0})),a.useFrame((()=>{for(o.current.updateMatrix(),o.current.updateMatrixWorld(),y.copy(o.current.matrixWorld).invert(),d=0;d<i.length;d++)m=i[d].current,m.getWorldPosition(g).applyMatrix4(y),g.x===x[3*d]&&g.y===x[3*d+1]&&g.z===x[3*d+2]||(g.toArray(x,3*d),o.current.geometry.attributes.position.needsUpdate=!0,m.matrixWorldNeedsUpdate=!0),m.color.equals(p.fromArray(E,3*d))||(m.color.toArray(E,3*d),o.current.geometry.attributes.color.needsUpdate=!0),m.size!==w[d]&&(w.set([m.size],d),o.current.geometry.attributes.size.needsUpdate=!0)}));const U=l.useMemo((()=>{const e={};for(d=0;d<i.length;d++){var t;Object.assign(e,null==(t=i[d].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,a,n;const u=null==(r=i[e.index])?void 0:r.current;return null==u||null==(a=u.__r3f)||null==(n=a.handlers)?void 0:n[t]({...e,object:u})}})),{})}),[e,i]),z=l.useMemo((()=>({subscribe:e=>(h((t=>[...t,e])),()=>h((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("points",s.default({matrixAutoUpdate:!1,ref:f.default([u,o])},U,n),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attach:"attributes-position",count:x.length/3,array:x,itemSize:3,usage:c.DynamicDrawUsage}),l.createElement("bufferAttribute",{attach:"attributes-color",count:E.length/3,array:E,itemSize:3,usage:c.DynamicDrawUsage}),l.createElement("bufferAttribute",{attach:"attributes-size",count:w.length,array:w,itemSize:1,usage:c.DynamicDrawUsage})),l.createElement(b.Provider,{value:z},e))})),x=l.forwardRef((({children:e,...t},r)=>{l.useMemo((()=>a.extend({Position:u.Position})),[]);const n=l.useRef(),{subscribe:o}=l.useContext(b);return l.useLayoutEffect((()=>o(n)),[]),l.createElement("position",s.default({ref:f.default([r,n])},t),e)})),E=l.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:u=3,...o},i)=>{const d=l.useRef(null);return a.useFrame((()=>{const e=d.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),l.createElement("points",s.default({matrixAutoUpdate:!1,ref:f.default([i,d])},o),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attach:"attributes-position",count:t.length/u,array:t,itemSize:u,usage:c.DynamicDrawUsage}),r&&l.createElement("bufferAttribute",{attach:"attributes-color",count:r.length/u,array:r,itemSize:3,usage:c.DynamicDrawUsage}),n&&l.createElement("bufferAttribute",{attach:"attributes-size",count:n.length/u,array:n,itemSize:1,usage:c.DynamicDrawUsage})),e)})),w=l.forwardRef(((e,t)=>e.positions instanceof Float32Array?l.createElement(E,s.default({},e,{ref:t})):l.createElement(h,s.default({},e,{ref:t}))));exports.Point=x,exports.Points=w,exports.PointsBuffer=E;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),a=require("@react-three/fiber"),n=require("react-merge-refs"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),c=i(t),l=i(r),f=o(n);let d,m;const b=l.createContext(null),g=new c.Matrix4,y=new c.Vector3;new c.Color;const p=l.forwardRef((({children:e,range:t,limit:r=1e3,...n},u)=>{const o=l.useRef(null),[i,p]=l.useState([]),[[h,E,w]]=l.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));l.useLayoutEffect((()=>{o.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,i.length)}),[i,t]),l.useEffect((()=>{o.current.geometry.attributes.position.needsUpdate=!0})),a.useFrame((()=>{for(o.current.updateMatrix(),o.current.updateMatrixWorld(),g.copy(o.current.matrixWorld).invert(),d=0;d<i.length;d++)m=i[d].current,y.toArray(h,3*d),o.current.geometry.attributes.position.needsUpdate=!0,m.matrixWorldNeedsUpdate=!0,m.color.toArray(E,3*d),o.current.geometry.attributes.color.needsUpdate=!0,w.set([m.size],d),o.current.geometry.attributes.size.needsUpdate=!0}));const x=l.useMemo((()=>{const e={};for(d=0;d<i.length;d++){var t;Object.assign(e,null==(t=i[d].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,a,n;const u=null==(r=i[e.index])?void 0:r.current;return null==u||null==(a=u.__r3f)||null==(n=a.handlers)?void 0:n[t]({...e,object:u})}})),{})}),[e,i]),U=l.useMemo((()=>({subscribe:e=>(p((t=>[...t,e])),()=>p((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("points",s.default({matrixAutoUpdate:!1,ref:f.default([u,o])},x,n),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attach:"attributes-position",count:h.length/3,array:h,itemSize:3,usage:c.DynamicDrawUsage}),l.createElement("bufferAttribute",{attach:"attributes-color",count:E.length/3,array:E,itemSize:3,usage:c.DynamicDrawUsage}),l.createElement("bufferAttribute",{attach:"attributes-size",count:w.length,array:w,itemSize:1,usage:c.DynamicDrawUsage})),l.createElement(b.Provider,{value:U},e))})),h=l.forwardRef((({children:e,...t},r)=>{l.useMemo((()=>a.extend({Position:u.Position})),[]);const n=l.useRef(),{subscribe:o}=l.useContext(b);return l.useLayoutEffect((()=>o(n)),[]),l.createElement("position",s.default({ref:f.default([r,n])},t),e)})),E=l.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:u=3,...o},i)=>{const d=l.useRef(null);return a.useFrame((()=>{const e=d.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),l.createElement("points",s.default({ref:f.default([i,d])},o),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attach:"attributes-position",count:t.length/u,array:t,itemSize:u,usage:c.DynamicDrawUsage}),r&&l.createElement("bufferAttribute",{attach:"attributes-color",count:r.length/u,array:r,itemSize:3,usage:c.DynamicDrawUsage}),n&&l.createElement("bufferAttribute",{attach:"attributes-size",count:n.length/u,array:n,itemSize:1,usage:c.DynamicDrawUsage})),e)})),w=l.forwardRef(((e,t)=>e.positions instanceof Float32Array?l.createElement(E,s.default({},e,{ref:t})):l.createElement(p,s.default({},e,{ref:t}))));exports.Point=h,exports.Points=w,exports.PointsBuffer=E;