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

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 (139) hide show
  1. package/README.md +62 -329
  2. package/core/ArcballControls.cjs.js +1 -1
  3. package/core/ArcballControls.js +27 -18
  4. package/core/Billboard.d.ts +2 -2
  5. package/core/Bounds.cjs.js +1 -1
  6. package/core/Bounds.d.ts +1 -2
  7. package/core/Bounds.js +15 -26
  8. package/core/Center.d.ts +1 -1
  9. package/core/Cloud.cjs.js +1 -1
  10. package/core/Cloud.d.ts +1 -3
  11. package/core/Cloud.js +1 -4
  12. package/core/ContactShadows.cjs.js +1 -1
  13. package/core/ContactShadows.d.ts +1 -3
  14. package/core/ContactShadows.js +2 -15
  15. package/core/CubeCamera.cjs.js +1 -1
  16. package/core/CubeCamera.js +7 -7
  17. package/core/Detailed.d.ts +2 -2
  18. package/core/DeviceOrientationControls.cjs.js +1 -1
  19. package/core/DeviceOrientationControls.d.ts +1 -1
  20. package/core/DeviceOrientationControls.js +6 -2
  21. package/core/Effects.cjs.js +1 -1
  22. package/core/Effects.d.ts +2 -2
  23. package/core/Effects.js +2 -2
  24. package/core/Environment.cjs.js +1 -1
  25. package/core/Environment.d.ts +3 -13
  26. package/core/Environment.js +30 -95
  27. package/core/FirstPersonControls.cjs.js +1 -1
  28. package/core/FirstPersonControls.d.ts +1 -1
  29. package/core/FirstPersonControls.js +6 -2
  30. package/core/Float.cjs.js +1 -1
  31. package/core/Float.d.ts +1 -1
  32. package/core/Float.js +4 -5
  33. package/core/FlyControls.d.ts +1 -1
  34. package/core/GizmoHelper.cjs.js +1 -1
  35. package/core/GizmoHelper.d.ts +1 -2
  36. package/core/GizmoHelper.js +41 -31
  37. package/core/GizmoViewcube.cjs.js +1 -1
  38. package/core/GizmoViewcube.d.ts +2 -2
  39. package/core/GizmoViewcube.js +1 -1
  40. package/core/GizmoViewport.d.ts +2 -2
  41. package/core/Image.cjs.js +1 -1
  42. package/core/Image.d.ts +2 -4
  43. package/core/Image.js +1 -6
  44. package/core/Instances.cjs.js +1 -1
  45. package/core/Instances.d.ts +3 -3
  46. package/core/Instances.js +11 -5
  47. package/core/Line.d.ts +1 -1
  48. package/core/MapControls.d.ts +1 -1
  49. package/core/MeshDistortMaterial.d.ts +2 -4
  50. package/core/MeshReflectorMaterial.cjs.js +1 -1
  51. package/core/MeshReflectorMaterial.d.ts +2 -1
  52. package/core/MeshReflectorMaterial.js +5 -4
  53. package/core/MeshWobbleMaterial.d.ts +2 -4
  54. package/core/OrbitControls.cjs.js +1 -1
  55. package/core/OrbitControls.js +33 -23
  56. package/core/OrthographicCamera.d.ts +2 -2
  57. package/core/PerspectiveCamera.d.ts +2 -2
  58. package/core/PointMaterial.cjs.js +1 -1
  59. package/core/PointMaterial.d.ts +7 -3
  60. package/core/PointMaterial.js +32 -14
  61. package/core/PointerLockControls.cjs.js +1 -1
  62. package/core/PointerLockControls.d.ts +1 -3
  63. package/core/PointerLockControls.js +22 -36
  64. package/core/Points.cjs.js +1 -1
  65. package/core/Points.d.ts +3 -3
  66. package/core/Points.js +36 -17
  67. package/core/PositionalAudio.d.ts +2 -2
  68. package/core/Reflector.d.ts +1 -1
  69. package/core/RoundedBox.d.ts +1 -1
  70. package/core/ScreenQuad.d.ts +1 -1
  71. package/core/Segments.d.ts +1 -1
  72. package/core/Shadow.d.ts +2 -2
  73. package/core/SpotLight.d.ts +20 -4
  74. package/core/Stage.cjs.js +1 -1
  75. package/core/Stage.js +2 -1
  76. package/core/Stars.cjs.js +1 -1
  77. package/core/Stars.js +3 -6
  78. package/core/Text.cjs.js +1 -1
  79. package/core/Text.d.ts +2 -3
  80. package/core/Text.js +2 -3
  81. package/core/TrackballControls.cjs.js +1 -1
  82. package/core/TrackballControls.d.ts +1 -1
  83. package/core/TrackballControls.js +7 -12
  84. package/core/TransformControls.cjs.js +1 -1
  85. package/core/TransformControls.d.ts +1 -1
  86. package/core/TransformControls.js +13 -7
  87. package/core/index.cjs.js +1 -1
  88. package/core/index.d.ts +0 -6
  89. package/core/index.js +2 -9
  90. package/core/shapes.d.ts +17 -17
  91. package/core/useFBO.cjs.js +1 -1
  92. package/core/useFBO.d.ts +1 -1
  93. package/core/useFBO.js +24 -21
  94. package/core/useFBX.d.ts +1 -1
  95. package/core/useFBX.js +1 -2
  96. package/core/useGLTF.d.ts +1 -1
  97. package/core/useGLTF.js +1 -2
  98. package/core/useHelper.d.ts +1 -3
  99. package/core/useKTX2.d.ts +1 -1
  100. package/core/useKTX2.js +1 -2
  101. package/core/useTexture.d.ts +1 -1
  102. package/core/useTexture.js +1 -2
  103. package/index.cjs.js +1 -1
  104. package/index.js +1 -7
  105. package/materials/ConvolutionMaterial.cjs.js +1 -1
  106. package/materials/ConvolutionMaterial.js +0 -2
  107. package/materials/MeshReflectorMaterial.cjs.js +1 -1
  108. package/materials/MeshReflectorMaterial.d.ts +3 -0
  109. package/materials/MeshReflectorMaterial.js +27 -1
  110. package/materials/SpotLightMaterial.cjs.js +1 -1
  111. package/materials/SpotLightMaterial.js +0 -3
  112. package/native/index.cjs.js +1 -1
  113. package/native/index.js +2 -9
  114. package/package.json +8 -9
  115. package/web/Html.cjs.js +1 -1
  116. package/web/Html.js +7 -6
  117. package/web/ScrollControls.cjs.js +1 -1
  118. package/web/ScrollControls.js +5 -4
  119. package/web/Select.js +0 -1
  120. package/web/index.cjs.js +1 -1
  121. package/web/index.js +3 -10
  122. package/core/Clone.cjs.js +0 -1
  123. package/core/Clone.d.ts +0 -11
  124. package/core/Clone.js +0 -92
  125. package/core/ComputedAttribute.cjs.js +0 -1
  126. package/core/ComputedAttribute.d.ts +0 -9
  127. package/core/ComputedAttribute.js +0 -34
  128. package/core/Lightformer.cjs.js +0 -1
  129. package/core/Lightformer.d.ts +0 -41
  130. package/core/Lightformer.js +0 -51
  131. package/core/Sampler.cjs.js +0 -1
  132. package/core/Sampler.d.ts +0 -21
  133. package/core/Sampler.js +0 -65
  134. package/core/Trail.cjs.js +0 -1
  135. package/core/Trail.d.ts +0 -20
  136. package/core/Trail.js +0 -160
  137. package/core/useBoxProjectedEnv.cjs.js +0 -1
  138. package/core/useBoxProjectedEnv.d.ts +0 -8
  139. package/core/useBoxProjectedEnv.js +0 -98
package/core/Clone.js DELETED
@@ -1,92 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as React from 'react';
3
- import pick from 'lodash.pick';
4
-
5
- function createSpread(child, {
6
- keys = ['near', 'far', 'color', 'distance', 'decay', 'penumbra', 'angle', 'intensity', 'skeleton', 'visible', 'castShadow', 'receiveShadow', 'morphTargetDictionary', 'morphTargetInfluences', 'name', 'geometry', 'material', 'position', 'rotation', 'scale', 'up', 'userData'],
7
- deep,
8
- inject,
9
- castShadow,
10
- receiveShadow
11
- }) {
12
- let spread = pick(child, keys);
13
-
14
- if (deep) {
15
- if (spread.geometry && deep !== 'materialsOnly') spread.geometry = spread.geometry.clone();
16
- if (spread.material && deep !== 'geometriesOnly') spread.material = spread.material.clone();
17
- }
18
-
19
- if (inject) {
20
- if (typeof inject === 'function') spread = { ...spread,
21
- children: inject(child)
22
- };else if ( /*#__PURE__*/React.isValidElement(inject)) spread = { ...spread,
23
- children: inject
24
- };else spread = { ...spread,
25
- ...inject
26
- };
27
- }
28
-
29
- if (child.type === 'Mesh') {
30
- if (castShadow) spread.castShadow = true;
31
- if (receiveShadow) spread.receiveShadow = true;
32
- }
33
-
34
- return spread;
35
- }
36
-
37
- const Clone = /*#__PURE__*/React.forwardRef(({
38
- object,
39
- children,
40
- deep,
41
- castShadow,
42
- receiveShadow,
43
- inject,
44
- keys,
45
- ...props
46
- }, forwardRef) => {
47
- const config = {
48
- keys,
49
- deep,
50
- inject,
51
- castShadow,
52
- receiveShadow
53
- }; // Deal with arrayed clones
54
-
55
- if (Array.isArray(object)) {
56
- return /*#__PURE__*/React.createElement("group", _extends({}, props, {
57
- ref: forwardRef
58
- }), object.map(o => /*#__PURE__*/React.createElement(Clone, _extends({
59
- key: o.uuid,
60
- object: o
61
- }, config))), children);
62
- } // Singleton clones
63
-
64
-
65
- const {
66
- children: injectChildren,
67
- ...spread
68
- } = createSpread(object, config);
69
- const Element = object.type[0].toLowerCase() + object.type.slice(1);
70
- return /*#__PURE__*/React.createElement(Element, _extends({}, spread, props, {
71
- ref: forwardRef
72
- }), (object == null ? void 0 : object.children).map(child => {
73
- let spread = {};
74
- let Element = child.type[0].toLowerCase() + child.type.slice(1);
75
-
76
- if (Element === 'group' || Element === 'object3D') {
77
- Element = Clone;
78
- spread = {
79
- object: child,
80
- ...config
81
- };
82
- } else {
83
- spread = createSpread(child, config);
84
- }
85
-
86
- return /*#__PURE__*/React.createElement(Element, _extends({
87
- key: child.uuid
88
- }, spread));
89
- }), children, injectChildren);
90
- });
91
-
92
- export { Clone };
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three");function u(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 u=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,u.get?u:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=u(e),a=n(t);exports.ComputedAttribute=({compute:e,name:t,...u})=>{const[n]=a.useState((()=>new r.BufferAttribute(new Float32Array(0),1))),f=a.useRef(null);return a.useLayoutEffect((()=>{if(f.current){var t;const r=null!==(t=f.current.parent)&&void 0!==t?t:f.current.__r3f.parent,u=e(r);f.current.copy(u)}}),[e]),a.createElement("primitive",c.default({ref:f,object:n,attachObject:["attributes",t]},u))};
@@ -1,9 +0,0 @@
1
- import { BufferAttributeProps } from '@react-three/fiber';
2
- import * as React from 'react';
3
- import { BufferAttribute, BufferGeometry } from 'three';
4
- declare type Props = {
5
- compute: (geometry: BufferGeometry) => BufferAttribute;
6
- name: string;
7
- };
8
- export declare const ComputedAttribute: ({ compute, name, ...props }: React.PropsWithChildren<Props & BufferAttributeProps>) => JSX.Element;
9
- export {};
@@ -1,34 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as React from 'react';
3
- import { BufferAttribute } from 'three';
4
-
5
- /**
6
- * Used exclusively as a child of a BufferGeometry.
7
- * Computes the BufferAttribute by calling the `compute` function
8
- * and attaches the attribute to the geometry.
9
- */
10
- const ComputedAttribute = ({
11
- compute,
12
- name,
13
- ...props
14
- }) => {
15
- const [bufferAttribute] = React.useState(() => new BufferAttribute(new Float32Array(0), 1));
16
- const primitive = React.useRef(null);
17
- React.useLayoutEffect(() => {
18
- if (primitive.current) {
19
- var _ref;
20
-
21
- // @ts-expect-error brittle
22
- const parent = (_ref = primitive.current.parent) !== null && _ref !== void 0 ? _ref : primitive.current.__r3f.parent;
23
- const attr = compute(parent);
24
- primitive.current.copy(attr);
25
- }
26
- }, [compute]);
27
- return /*#__PURE__*/React.createElement("primitive", _extends({
28
- ref: primitive,
29
- object: bufferAttribute,
30
- attachObject: ['attributes', name]
31
- }, props));
32
- };
33
-
34
- export { ComputedAttribute };
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),a=require("three"),l=require("react-merge-refs");function n(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 a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var u=n(e),i=c(t),o=c(a),s=n(l);const f=i.forwardRef((({args:e,map:t,toneMapped:a=!1,color:l="white",form:n="rect",intensity:c=1,scale:f=1,target:m,children:p,...d},y)=>{const g=i.useRef(null);return i.useLayoutEffect((()=>{p||d.material||(r.applyProps(g.current.material,{color:l}),g.current.material.color.multiplyScalar(c))}),[l,c,p,d.material]),i.useLayoutEffect((()=>{m&&g.current.lookAt(Array.isArray(m)?new o.Vector3(...m):m)}),[m]),f=Array.isArray(f)&&2===f.length?[f[0],f[1],1]:f,i.createElement("mesh",u.default({ref:s.default([g,y]),scale:f},d),"circle"===n?i.createElement("ringGeometry",{args:[0,1,64]}):"ring"===n?i.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===n?i.createElement("planeGeometry",null):i.createElement(n,{args:e}),p||(d.material?null:i.createElement("meshBasicMaterial",{toneMapped:a,map:t,side:o.DoubleSide})))}));exports.Lightformer=f;
@@ -1,41 +0,0 @@
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.Node<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" | "attachArray" | "attachObject" | "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>>;
@@ -1,51 +0,0 @@
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 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three-stdlib"),n=require("three");function u(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 i=u(e),l=c(r);exports.Sampler=({children:e,weight:r,transform:u,instances:c,mesh:o,...a})=>{const s=l.useRef(null),d=l.useRef(null),f=l.useRef(null);return l.useEffect((()=>{var e,r;d.current=null!==(e=null==c?void 0:c.current)&&void 0!==e?e:s.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),f.current=null!==(r=null==o?void 0:o.current)&&void 0!==r?r:s.current.children.find((e=>"Mesh"===e.type))}),[e,null==o?void 0:o.current,null==c?void 0:c.current]),l.useEffect((()=>{if(void 0===f.current)return;if(void 0===d.current)return;const e=new t.MeshSurfaceSampler(f.current);r&&e.setWeightAttribute(r),e.build();const c=new n.Vector3,i=new n.Vector3,l=new n.Color,o=new n.Object3D;f.current.updateMatrixWorld(!0);for(let r=0;r<d.current.count;r++)e.sample(c,i,l),"function"==typeof u?u({dummy:o,sampledMesh:f.current,position:c,normal:i,color:l},r):o.position.copy(c),o.updateMatrix(),d.current.setMatrixAt(r,o.matrix);d.current.instanceMatrix.needsUpdate=!0}),[e,null==o?void 0:o.current,null==c?void 0:c.current]),l.createElement("group",i.default({ref:s},a),e)};
package/core/Sampler.d.ts DELETED
@@ -1,21 +0,0 @@
1
- import * as React from 'react';
2
- import { Color, InstancedMesh, Mesh, Object3D, Vector3 } from 'three';
3
- import { GroupProps } from '@react-three/fiber';
4
- declare type SamplePayload = {
5
- position: Vector3;
6
- normal: Vector3;
7
- color: Color;
8
- };
9
- export declare type TransformFn = (payload: TransformPayload, i: number) => void;
10
- declare type TransformPayload = SamplePayload & {
11
- dummy: Object3D;
12
- sampledMesh: Mesh;
13
- };
14
- declare type Props = {
15
- mesh?: React.RefObject<Mesh>;
16
- instances?: React.RefObject<InstancedMesh>;
17
- weight?: string;
18
- transform?: TransformFn;
19
- };
20
- export declare const Sampler: ({ children, weight, transform, instances, mesh, ...props }: React.PropsWithChildren<Props & GroupProps>) => JSX.Element;
21
- export {};
package/core/Sampler.js DELETED
@@ -1,65 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as React from 'react';
3
- import { MeshSurfaceSampler } from 'three-stdlib';
4
- import { Vector3, Color, Object3D } from 'three';
5
-
6
- const Sampler = ({
7
- children,
8
- weight,
9
- transform,
10
- instances,
11
- mesh,
12
- ...props
13
- }) => {
14
- const group = React.useRef(null);
15
- const instancedRef = React.useRef(null);
16
- const meshToSampleRef = React.useRef(null);
17
- React.useEffect(() => {
18
- var _instances$current, _mesh$current;
19
-
20
- instancedRef.current = (_instances$current = instances == null ? void 0 : instances.current) !== null && _instances$current !== void 0 ? _instances$current : group.current.children.find(c => c.hasOwnProperty('instanceMatrix'));
21
- meshToSampleRef.current = (_mesh$current = mesh == null ? void 0 : mesh.current) !== null && _mesh$current !== void 0 ? _mesh$current : group.current.children.find(c => c.type === 'Mesh');
22
- }, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
23
- React.useEffect(() => {
24
- if (typeof meshToSampleRef.current === 'undefined') return;
25
- if (typeof instancedRef.current === 'undefined') return;
26
- const sampler = new MeshSurfaceSampler(meshToSampleRef.current);
27
-
28
- if (weight) {
29
- sampler.setWeightAttribute(weight);
30
- }
31
-
32
- sampler.build();
33
- const position = new Vector3();
34
- const normal = new Vector3();
35
- const color = new Color();
36
- const dummy = new Object3D();
37
- meshToSampleRef.current.updateMatrixWorld(true);
38
-
39
- for (let i = 0; i < instancedRef.current.count; i++) {
40
- sampler.sample(position, normal, color);
41
-
42
- if (typeof transform === 'function') {
43
- transform({
44
- dummy,
45
- sampledMesh: meshToSampleRef.current,
46
- position,
47
- normal,
48
- color
49
- }, i);
50
- } else {
51
- dummy.position.copy(position);
52
- }
53
-
54
- dummy.updateMatrix();
55
- instancedRef.current.setMatrixAt(i, dummy.matrix);
56
- }
57
-
58
- instancedRef.current.instanceMatrix.needsUpdate = true;
59
- }, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
60
- return /*#__PURE__*/React.createElement("group", _extends({
61
- ref: group
62
- }, props), children);
63
- };
64
-
65
- export { Sampler };
package/core/Trail.cjs.js DELETED
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@react-three/fiber"),t=require("react"),r=require("three"),n=require("meshline");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=o(t);const s={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},u=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function c(t,n){const{length:o,local:c,decay:l,interval:a,stride:f}={...s,...n},d=i.useRef(),[h]=i.useState((()=>new r.Vector3));i.useLayoutEffect((()=>{t&&(d.current=Float32Array.from({length:10*o*3},((e,r)=>t.position.getComponent(r%3))))}),[o,t]);const p=i.useRef(new r.Vector3),y=i.useRef(0);return e.useFrame((()=>{if(t&&d.current){if(0===y.current){let e;c?e=t.position:(t.getWorldPosition(h),e=h);const r=1*l;for(let t=0;t<r;t++)e.distanceTo(p.current)<f||(u(d.current,3),d.current.set(e.toArray(),d.current.length-3));p.current.copy(e)}y.current++,y.current=y.current%a}})),d}const l=i.forwardRef(((t,o)=>{const{children:u}=t,{width:l,length:a,decay:f,local:d,stride:h,interval:p}={...s,...t},{color:y="hotpink",attenuation:g,target:m}=t,v=e.useThree((e=>e.size)),b=i.useRef(null),[w,M]=i.useState(null),j=c(w,{length:a,decay:f,local:d,stride:h,interval:p});i.useEffect((()=>{const e=(null==m?void 0:m.current)||b.current.children.find((e=>e instanceof r.Object3D));e&&M(e)}),[j,m]);const O=i.useMemo((()=>new n.MeshLine),[]),E=i.useMemo((()=>{var e;const t=new n.MeshLineMaterial({lineWidth:.1*l,color:y,sizeAttenuation:1,resolution:new r.Vector2(v.width,v.height)});let o;if(u)if(Array.isArray(u))o=u.find((e=>{const t=e;return"string"==typeof t.type&&"meshLineMaterial"===t.type}));else{const e=u;"string"==typeof e.type&&"meshLineMaterial"===e.type&&(o=e)}return"object"==typeof(null==(e=o)?void 0:e.props)&&t.setValues(o.props),t}),[l,y,v,u]);return i.useEffect((()=>{E.uniforms.resolution.value.set(v.width,v.height)}),[v]),e.useFrame((()=>{j.current&&O.setPoints(j.current,g)})),i.createElement("group",null,i.createElement("mesh",{ref:o,geometry:O,material:E}),i.createElement("group",{ref:b},u))}));exports.Trail=l,exports.useTrail=c;
package/core/Trail.d.ts DELETED
@@ -1,20 +0,0 @@
1
- import * as React from 'react';
2
- import { ColorRepresentation, Object3D } from 'three';
3
- import { MeshLine } from 'meshline';
4
- declare type Settings = {
5
- width: number;
6
- length: number;
7
- decay: number;
8
- local: boolean;
9
- stride: number;
10
- interval: number;
11
- };
12
- export declare function useTrail(target: Object3D, settings: Partial<Settings>): React.MutableRefObject<Float32Array | undefined>;
13
- export declare const Trail: React.ForwardRefExoticComponent<{
14
- color?: ColorRepresentation | undefined;
15
- attenuation?: ((width: number) => number) | undefined;
16
- target?: React.MutableRefObject<Object3D<import("three").Event>> | undefined;
17
- } & Partial<Settings> & {
18
- children?: React.ReactNode;
19
- } & React.RefAttributes<MeshLine>>;
20
- export {};
package/core/Trail.js DELETED
@@ -1,160 +0,0 @@
1
- import { useFrame, useThree } from '@react-three/fiber';
2
- import * as React from 'react';
3
- import { Vector3, Object3D, Vector2 } from 'three';
4
- import { MeshLine, MeshLineMaterial } from 'meshline';
5
-
6
- const defaults = {
7
- width: 0.2,
8
- length: 1,
9
- decay: 1,
10
- local: false,
11
- stride: 0,
12
- interval: 1
13
- };
14
-
15
- const shiftLeft = (collection, steps = 1) => {
16
- collection.set(collection.subarray(steps));
17
- collection.fill(-Infinity, -steps);
18
- return collection;
19
- };
20
-
21
- function useTrail(target, settings) {
22
- const {
23
- length,
24
- local,
25
- decay,
26
- interval,
27
- stride
28
- } = { ...defaults,
29
- ...settings
30
- };
31
- const points = React.useRef();
32
- const [worldPosition] = React.useState(() => new Vector3());
33
- React.useLayoutEffect(() => {
34
- if (target) {
35
- points.current = Float32Array.from({
36
- length: length * 10 * 3
37
- }, (_, i) => target.position.getComponent(i % 3));
38
- }
39
- }, [length, target]);
40
- const prevPosition = React.useRef(new Vector3());
41
- const frameCount = React.useRef(0);
42
- useFrame(() => {
43
- if (!target) return;
44
- if (!points.current) return;
45
-
46
- if (frameCount.current === 0) {
47
- let newPosition;
48
-
49
- if (local) {
50
- newPosition = target.position;
51
- } else {
52
- target.getWorldPosition(worldPosition);
53
- newPosition = worldPosition;
54
- }
55
-
56
- const steps = 1 * decay;
57
-
58
- for (let i = 0; i < steps; i++) {
59
- if (newPosition.distanceTo(prevPosition.current) < stride) continue;
60
- shiftLeft(points.current, 3);
61
- points.current.set(newPosition.toArray(), points.current.length - 3);
62
- }
63
-
64
- prevPosition.current.copy(newPosition);
65
- }
66
-
67
- frameCount.current++;
68
- frameCount.current = frameCount.current % interval;
69
- });
70
- return points;
71
- }
72
- const Trail = /*#__PURE__*/React.forwardRef((props, forwardRef) => {
73
- const {
74
- children
75
- } = props;
76
- const {
77
- width,
78
- length,
79
- decay,
80
- local,
81
- stride,
82
- interval
83
- } = { ...defaults,
84
- ...props
85
- };
86
- const {
87
- color = 'hotpink',
88
- attenuation,
89
- target
90
- } = props;
91
- const size = useThree(s => s.size);
92
- const ref = React.useRef(null);
93
- const [anchor, setAnchor] = React.useState(null);
94
- const points = useTrail(anchor, {
95
- length,
96
- decay,
97
- local,
98
- stride,
99
- interval
100
- });
101
- React.useEffect(() => {
102
- const t = (target == null ? void 0 : target.current) || ref.current.children.find(o => {
103
- return o instanceof Object3D;
104
- });
105
-
106
- if (t) {
107
- setAnchor(t);
108
- }
109
- }, [points, target]);
110
- const geo = React.useMemo(() => new MeshLine(), []);
111
- const mat = React.useMemo(() => {
112
- var _matOverride;
113
-
114
- const m = new MeshLineMaterial({
115
- lineWidth: 0.1 * width,
116
- color: color,
117
- sizeAttenuation: 1,
118
- resolution: new Vector2(size.width, size.height)
119
- }); // Get and apply first <meshLineMaterial /> from children
120
-
121
- let matOverride;
122
-
123
- if (children) {
124
- if (Array.isArray(children)) {
125
- matOverride = children.find(child => {
126
- const c = child;
127
- return typeof c.type === 'string' && c.type === 'meshLineMaterial';
128
- });
129
- } else {
130
- const c = children;
131
-
132
- if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {
133
- matOverride = c;
134
- }
135
- }
136
- }
137
-
138
- if (typeof ((_matOverride = matOverride) == null ? void 0 : _matOverride.props) === 'object') {
139
- m.setValues(matOverride.props);
140
- }
141
-
142
- return m;
143
- }, [width, color, size, children]);
144
- React.useEffect(() => {
145
- mat.uniforms.resolution.value.set(size.width, size.height);
146
- }, [size]);
147
- useFrame(() => {
148
- if (!points.current) return;
149
- geo.setPoints(points.current, attenuation);
150
- });
151
- return /*#__PURE__*/React.createElement("group", null, /*#__PURE__*/React.createElement("mesh", {
152
- ref: forwardRef,
153
- geometry: geo,
154
- material: mat
155
- }), /*#__PURE__*/React.createElement("group", {
156
- ref: ref
157
- }, children));
158
- });
159
-
160
- export { Trail, useTrail };
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),n=require("@react-three/fiber");function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var o=i(e),t=i(r);exports.useBoxProjectedEnv=function(e=new o.Vector3,r=new o.Vector3){const[i]=t.useState((()=>({position:new o.Vector3,size:new o.Vector3})));n.applyProps(i,{position:e,size:r});const a=t.useRef(null),c=t.useMemo((()=>({ref:a,onBeforeCompile:e=>function(e,r,n){e.defines.BOX_PROJECTED_ENV_MAP=!0,e.uniforms.envMapPosition={value:r},e.uniforms.envMapSize={value:n},e.vertexShader=`\n varying vec3 vWorldPosition;\n ${e.vertexShader.replace("#include <worldpos_vertex>","\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n")}`,e.fragmentShader=`\n \n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n\n ${e.fragmentShader.replace("#include <envmap_physical_pars_fragment>",o.ShaderChunk.envmap_physical_pars_fragment).replace("vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );","vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n\n ").replace("reflectVec = inverseTransformDirection( reflectVec, viewMatrix );","reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n\n ")}`}(e,i.position,i.size),customProgramCacheKey:()=>JSON.stringify(i.position.toArray())+JSON.stringify(i.size.toArray())})),[...i.position.toArray(),...i.size.toArray()]);return t.useLayoutEffect((()=>{a.current.needsUpdate=!0}),[i]),c};
@@ -1,8 +0,0 @@
1
- import * as THREE from 'three';
2
- import * as React from 'react';
3
- import { ReactThreeFiber } from '@react-three/fiber';
4
- export declare function useBoxProjectedEnv(position?: ReactThreeFiber.Vector3, size?: ReactThreeFiber.Vector3): {
5
- ref: React.MutableRefObject<THREE.Material>;
6
- onBeforeCompile: (shader: THREE.Shader) => void;
7
- customProgramCacheKey: () => string;
8
- };
@@ -1,98 +0,0 @@
1
- import * as THREE from 'three';
2
- import * as React from 'react';
3
- import { applyProps } from '@react-three/fiber';
4
-
5
- // and @0beqz https://gist.github.com/0beqz/8d51b4ae16d68021a09fb504af708fca
6
-
7
- const worldposReplace =
8
- /* glsl */
9
- `
10
- #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )
11
- vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
12
- #ifdef BOX_PROJECTED_ENV_MAP
13
- vWorldPosition = worldPosition.xyz;
14
- #endif
15
- #endif
16
- `;
17
- const boxProjectDefinitions =
18
- /*glsl */
19
- `
20
- #ifdef BOX_PROJECTED_ENV_MAP
21
- uniform vec3 envMapSize;
22
- uniform vec3 envMapPosition;
23
- varying vec3 vWorldPosition;
24
-
25
- vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {
26
- vec3 nDir = normalize( v );
27
- vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;
28
- vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;
29
- vec3 rbminmax;
30
- rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;
31
- rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;
32
- rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;
33
- float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );
34
- vec3 boxIntersection = vWorldPosition + nDir * correction;
35
- return boxIntersection - cubePos;
36
- }
37
- #endif
38
- `; // will be inserted after "vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );"
39
-
40
- const getIBLIrradiance_patch =
41
- /* glsl */
42
- `
43
- #ifdef BOX_PROJECTED_ENV_MAP
44
- worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );
45
- #endif
46
- `; // will be inserted after "reflectVec = inverseTransformDirection( reflectVec, viewMatrix );"
47
-
48
- const getIBLRadiance_patch =
49
- /* glsl */
50
- `
51
- #ifdef BOX_PROJECTED_ENV_MAP
52
- reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );
53
- #endif
54
- `;
55
-
56
- function boxProjectedEnvMap(shader, envMapPosition, envMapSize) {
57
- shader.defines.BOX_PROJECTED_ENV_MAP = true; // uniforms
58
-
59
- shader.uniforms.envMapPosition = {
60
- value: envMapPosition
61
- };
62
- shader.uniforms.envMapSize = {
63
- value: envMapSize
64
- }; // vertex shader
65
-
66
- shader.vertexShader = `
67
- varying vec3 vWorldPosition;
68
- ${shader.vertexShader.replace('#include <worldpos_vertex>', worldposReplace)}`; // fragment shader
69
-
70
- shader.fragmentShader = `
71
- ${boxProjectDefinitions}
72
- ${shader.fragmentShader.replace('#include <envmap_physical_pars_fragment>', THREE.ShaderChunk.envmap_physical_pars_fragment).replace('vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );', `vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
73
- ${getIBLIrradiance_patch}
74
- `).replace('reflectVec = inverseTransformDirection( reflectVec, viewMatrix );', `reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
75
- ${getIBLRadiance_patch}
76
- `)}`;
77
- }
78
-
79
- function useBoxProjectedEnv(position = new THREE.Vector3(), size = new THREE.Vector3()) {
80
- const [config] = React.useState(() => ({
81
- position: new THREE.Vector3(),
82
- size: new THREE.Vector3()
83
- }));
84
- applyProps(config, {
85
- position,
86
- size
87
- });
88
- const ref = React.useRef(null);
89
- const spread = React.useMemo(() => ({
90
- ref,
91
- onBeforeCompile: shader => boxProjectedEnvMap(shader, config.position, config.size),
92
- customProgramCacheKey: () => JSON.stringify(config.position.toArray()) + JSON.stringify(config.size.toArray())
93
- }), [...config.position.toArray(), ...config.size.toArray()]);
94
- React.useLayoutEffect(() => void (ref.current.needsUpdate = true), [config]);
95
- return spread;
96
- }
97
-
98
- export { useBoxProjectedEnv };