@react-three/drei 8.1.0 → 8.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +2 -53
  2. package/core/Cloud.cjs.js +1 -1
  3. package/core/Cloud.js +2 -2
  4. package/core/Instances.cjs.js +1 -1
  5. package/core/Instances.d.ts +12 -24
  6. package/core/Instances.js +11 -23
  7. package/core/SpotLight.cjs.js +1 -1
  8. package/core/SpotLight.d.ts +4 -1
  9. package/core/SpotLight.js +10 -3
  10. package/core/index.cjs.js +1 -1
  11. package/core/index.d.ts +0 -3
  12. package/core/index.js +0 -6
  13. package/core/useMatcapTexture.cjs.js +1 -1
  14. package/core/useMatcapTexture.js +7 -2
  15. package/core/useNormalTexture.cjs.js +1 -1
  16. package/core/useNormalTexture.js +8 -3
  17. package/helpers/Position.cjs.js +1 -1
  18. package/helpers/Position.d.ts +5 -0
  19. package/helpers/Position.js +51 -0
  20. package/index.cjs.js +1 -1
  21. package/index.js +0 -3
  22. package/materials/SpotLightMaterial.cjs.js +1 -1
  23. package/materials/SpotLightMaterial.js +6 -2
  24. package/native/index.cjs.js +1 -1
  25. package/native/index.js +0 -6
  26. package/package.json +1 -1
  27. package/web/index.cjs.js +1 -1
  28. package/web/index.js +0 -6
  29. package/assets/cloud.base64.cjs.js +0 -1
  30. package/assets/cloud.base64.d.ts +0 -1
  31. package/assets/cloud.base64.js +0 -3
  32. package/core/useEdgeSplit.cjs.js +0 -1
  33. package/core/useEdgeSplit.d.ts +0 -3
  34. package/core/useEdgeSplit.js +0 -24
  35. package/core/useSimplification.cjs.js +0 -1
  36. package/core/useSimplification.d.ts +0 -3
  37. package/core/useSimplification.js +0 -25
  38. package/core/useTessellation.cjs.js +0 -1
  39. package/core/useTessellation.d.ts +0 -3
  40. package/core/useTessellation.js +0 -26
  41. package/helpers/matcap-assets.cjs.js +0 -1
  42. package/helpers/matcap-assets.d.ts +0 -643
  43. package/helpers/matcap-assets.js +0 -645
  44. package/helpers/normal-assets.cjs.js +0 -1
  45. package/helpers/normal-assets.d.ts +0 -78
  46. package/helpers/normal-assets.js +0 -80
package/README.md CHANGED
@@ -78,9 +78,6 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
78
78
  <li><a href="#modifiers">Modifiers</a></li>
79
79
  <ul>
80
80
  <li><a href="#curvemodifier">CurveModifier</a></li>
81
- <li><a href="#useedgesplit">useEdgeSplit</a></li>
82
- <li><a href="#usetessellation">useTessellation</a></li>
83
- <li><a href="#usesimplification">useSimplification</a></li>
84
81
  </ul>
85
82
  </ul>
86
83
  </td>
@@ -750,56 +747,6 @@ return (
750
747
  )
751
748
  ```
752
749
 
753
- #### useEdgeSplit
754
-
755
- [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.pmnd.rs/?path=/story/modifiers-useedgesplit)
756
-
757
- This hook mutates a mesh geometry using [three's Edge Split modifier](https://threejs.org/examples/?q=modifier#webgl_modifier_edgesplit). The first parameter is the cut-off angle, and the second parameter is a `tryKeepNormals` flag (default `true`).
758
-
759
- ```jsx
760
- const meshRef = useEdgeSplit(Math.PI / 2)
761
-
762
- return (
763
- <mesh ref={meshRef}>
764
- <boxBufferGeometry args={[10, 10]} />
765
- </mesh>
766
- )
767
- ```
768
-
769
- #### useSimplification
770
-
771
- [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.pmnd.rs/?path=/story/modifiers-usesimplification)
772
-
773
- This hook mutates a mesh geometry using [three's Simplification modifier](https://threejs.org/examples/webgl_modifier_simplifier.html).
774
-
775
- 👉 The simplification code is based on [this algorithm](http://www.melax.com/polychop/).
776
-
777
- ```jsx
778
- const meshRef = useSimplification(0.5)
779
-
780
- return (
781
- <mesh ref={meshRef}>
782
- <octahedronBufferGeometry args={[2, 5]} />
783
- </mesh>
784
- )
785
- ```
786
-
787
- #### useTessellation
788
-
789
- [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.pmnd.rs/?path=/story/modifiers-usetessellation)
790
-
791
- This hook mutates a mesh geometry using [three's Tessellation modifier](https://threejs.org/examples/?q=tess#webgl_modifier_tessellation). It will break-up faces withe edge longer than the maxEdgeLength parameter.
792
-
793
- ```jsx
794
- const meshRef = useTessellation(2, 8)
795
-
796
- return (
797
- <mesh ref={meshRef}>
798
- <octahedronBufferGeometry args={[2, 2]} />
799
- </mesh>
800
- )
801
- ```
802
-
803
750
  # Misc
804
751
 
805
752
  #### useContextBridge
@@ -1596,6 +1543,8 @@ Adds a blinking shader-based starfield to your scene.
1596
1543
 
1597
1544
  #### Cloud
1598
1545
 
1546
+ [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.pmnd.rs/?path=/story/staging-cloud--cloud-st) ![](https://img.shields.io/badge/-suspense-brightgreen)
1547
+
1599
1548
  Particle based cloud.
1600
1549
 
1601
1550
  ```jsx
package/core/Cloud.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("./Billboard.cjs.js"),a=require("./shapes.cjs.js"),n=require("./useTexture.cjs.js"),s=require("../assets/cloud.base64.cjs.js");function i(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)}require("@babel/runtime/helpers/extends"),require("react-merge-refs"),require("three");var o=i(e);exports.Cloud=function({opacity:e=.5,speed:i=.4,width:c=10,depth:u=1.5,segments:l=20,...d}){const m=o.useRef(),h=n.useTexture(s.CloudImage),p=o.useMemo((()=>[...new Array(l)].map(((e,r)=>({x:c/2-Math.random()*c,y:c/2-Math.random()*c,scale:.4+Math.sin((r+1)/l*Math.PI)*(10*(.2+Math.random())),density:Math.max(.2,Math.random()),rotation:Math.max(.002,.005*Math.random())*i})))),[c,l,i]);return r.useFrame((e=>{var r;return null==(r=m.current)?void 0:r.children.forEach(((r,t)=>{r.children[0].rotation.z+=p[t].rotation,r.children[0].scale.setScalar(p[t].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*t/10)}))})),o.createElement("group",d,o.createElement("group",{position:[0,0,l/2*u],ref:m},p.map((({x:r,y:n,scale:s,density:i},c)=>o.createElement(t.Billboard,{key:c,position:[r,n,-c*u]},o.createElement(a.Plane,{scale:s,rotation:[0,0,0]},o.createElement("meshStandardMaterial",{map:h,transparent:!0,opacity:s/6*i*e,depthTest:!1})))))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("./Billboard.cjs.js"),a=require("./shapes.cjs.js"),n=require("./useTexture.cjs.js");function s(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)}require("@babel/runtime/helpers/extends"),require("react-merge-refs"),require("three");var c=s(e);exports.Cloud=function({opacity:e=.5,speed:s=.4,width:i=10,depth:o=1.5,segments:u=20,...l}){const d=c.useRef(),h=n.useTexture("https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png"),m=c.useMemo((()=>[...new Array(u)].map(((e,r)=>({x:i/2-Math.random()*i,y:i/2-Math.random()*i,scale:.4+Math.sin((r+1)/u*Math.PI)*(10*(.2+Math.random())),density:Math.max(.2,Math.random()),rotation:Math.max(.002,.005*Math.random())*s})))),[i,u,s]);return r.useFrame((e=>{var r;return null==(r=d.current)?void 0:r.children.forEach(((r,t)=>{r.children[0].rotation.z+=m[t].rotation,r.children[0].scale.setScalar(m[t].scale+(1+Math.sin(e.clock.getElapsedTime()/10))/2*t/10)}))})),c.createElement("group",l,c.createElement("group",{position:[0,0,u/2*o],ref:d},m.map((({x:r,y:n,scale:s,density:i},u)=>c.createElement(t.Billboard,{key:u,position:[r,n,-u*o]},c.createElement(a.Plane,{scale:s,rotation:[0,0,0]},c.createElement("meshStandardMaterial",{map:h,transparent:!0,opacity:s/6*i*e,depthTest:!1})))))))};
package/core/Cloud.js CHANGED
@@ -3,8 +3,8 @@ import { useFrame } from '@react-three/fiber';
3
3
  import { Billboard } from './Billboard.js';
4
4
  import { Plane } from './shapes.js';
5
5
  import { useTexture } from './useTexture.js';
6
- import { CloudImage } from '../assets/cloud.base64.js';
7
6
 
7
+ const CLOUD_URL = 'https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png';
8
8
  function Cloud({
9
9
  opacity = 0.5,
10
10
  speed = 0.4,
@@ -14,7 +14,7 @@ function Cloud({
14
14
  ...props
15
15
  }) {
16
16
  const group = React.useRef();
17
- const texture = useTexture(CloudImage);
17
+ const texture = useTexture(CLOUD_URL);
18
18
  const clouds = React.useMemo(() => [...new Array(segments)].map((_, index) => ({
19
19
  x: width / 2 - Math.random() * width,
20
20
  y: width / 2 - Math.random() * width,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer"),u=require("../helpers/Position.cjs.js");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 i=o(e),l=s(t),f=s(r),d=o(a),m=o(c);let y,p;const x=f.createContext(null),b=new l.Matrix4,h=new l.Matrix4,g=new l.Matrix4,M=new l.Color,v=new l.Vector3,w=new l.Quaternion,j=new l.Vector3,A=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",i.default({ref:d.default([a,c])},r),t)})),E=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:s}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(A,i.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[E,O]=f.useState([]),[[q,P]]=f.useState((()=>{const e=new Float32Array(16*r);for(y=0;y<r;y++)g.identity().toArray(e,16*y);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,E.length)}),[E,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let _=0;n.useFrame((()=>{if(a===1/0||_<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),b.copy(m.current.matrixWorld).invert(),y=0;y<E.length;y++)p=E[y].current,p.matrixWorld.decompose(v,w,j),h.compose(v,w,j).premultiply(b),h.equals(g.fromArray(q,16*y))||(h.toArray(q,16*y),m.current.instanceMatrix.needsUpdate=!0),p.color.equals(M.fromArray(P,3*y))||(p.color.toArray(P,3*y),m.current.instanceColor.needsUpdate=!0);_++}}));const C=f.useMemo((()=>{const e={};for(y=0;y<E.length;y++){var t;Object.assign(e,null==(t=E[y].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,n,a;const c=null==(r=E[e.instanceId])?void 0:r.current;return null==c||null==(n=c.__r3f)||null==(a=n.handlers)?void 0:a[t]({...e,object:c})}})),{})}),[e,E]),R=f.useMemo((()=>({subscribe:e=>(O((t=>[...t,e])),()=>O((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",i.default({matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0]},C,c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:q.length/16,array:q,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:P.length/3,array:P,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:R},e(s)):f.createElement(x.Provider,{value:R},e))}));exports.Instance=A,exports.Instances=E,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(E,i.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer"),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 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),l=i(t),f=i(r),d=o(a),m=o(c);let y,p;const x=f.createContext(null),g=new l.Matrix4,b=new l.Matrix4,h=new l.Matrix4,M=new l.Color,w=new l.Vector3,A=new l.Quaternion,E=new l.Vector3,j=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o,getParent:i}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",s.default({instance:i(),instanceKey:c,ref:d.default([a,c])},r),t)})),v=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:i}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(j,s.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[v,O]=f.useState([]),[[P,q]]=f.useState((()=>{const e=new Float32Array(16*r);for(y=0;y<r;y++)h.identity().toArray(e,16*y);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,v.length)}),[v,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let C=0;n.useFrame((()=>{if(a===1/0||C<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),g.copy(m.current.matrixWorld).invert(),y=0;y<v.length;y++)p=v[y].current,p.matrixWorld.decompose(w,A,E),b.compose(w,A,E).premultiply(g),b.equals(h.fromArray(P,16*y))||(b.toArray(P,16*y),m.current.instanceMatrix.needsUpdate=!0),p.color.equals(M.fromArray(q,3*y))||(p.color.toArray(q,3*y),m.current.instanceColor.needsUpdate=!0);C++}}));const R=f.useMemo((()=>({getParent:()=>m,subscribe:e=>(O((t=>[...t,e])),()=>O((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",s.default({userData:{instances:v},matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0],raycast:()=>null},c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:P.length/16,array:P,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:q.length/3,array:q,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:R},e(i)):f.createElement(x.Provider,{value:R},e))}));exports.Instance=j,exports.Instances=v,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(v,s.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
@@ -2,8 +2,18 @@ import * as THREE from 'three';
2
2
  import * as React from 'react';
3
3
  import { Position } from '../helpers/Position';
4
4
  declare type Api = {
5
+ getParent: () => React.MutableRefObject<InstancedMesh>;
5
6
  subscribe: (ref: any) => void;
6
7
  };
8
+ declare type InstancesProps = JSX.IntrinsicElements['instancedMesh'] & {
9
+ range?: number;
10
+ limit?: number;
11
+ frames?: number;
12
+ };
13
+ declare type InstancedMesh = Omit<THREE.InstancedMesh, 'instanceMatrix' | 'instanceColor'> & {
14
+ instanceMatrix: THREE.InstancedBufferAttribute;
15
+ instanceColor: THREE.InstancedBufferAttribute;
16
+ };
7
17
  declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").Node<Position, typeof Position>, import("@react-three/fiber").NonFunctionKeys<{
8
18
  position?: import("@react-three/fiber").Vector3 | undefined;
9
19
  up?: import("@react-three/fiber").Vector3 | undefined;
@@ -24,30 +34,8 @@ declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<import("@react
24
34
  dispose?: (() => void) | null | undefined;
25
35
  } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
26
36
  context?: React.Context<Api> | undefined;
27
- }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "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 | "context"> & React.RefAttributes<unknown>>;
28
- declare const Instances: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").Node<THREE.InstancedMesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>, typeof THREE.InstancedMesh>, import("@react-three/fiber").NonFunctionKeys<{
29
- position?: import("@react-three/fiber").Vector3 | undefined;
30
- up?: import("@react-three/fiber").Vector3 | undefined;
31
- scale?: import("@react-three/fiber").Vector3 | undefined;
32
- rotation?: import("@react-three/fiber").Euler | undefined;
33
- matrix?: import("@react-three/fiber").Matrix4 | undefined;
34
- quaternion?: import("@react-three/fiber").Quaternion | undefined;
35
- layers?: import("@react-three/fiber").Layers | undefined;
36
- dispose?: (() => void) | null | undefined;
37
- }>> & {
38
- position?: import("@react-three/fiber").Vector3 | undefined;
39
- up?: import("@react-three/fiber").Vector3 | undefined;
40
- scale?: import("@react-three/fiber").Vector3 | undefined;
41
- rotation?: import("@react-three/fiber").Euler | undefined;
42
- matrix?: import("@react-three/fiber").Matrix4 | undefined;
43
- quaternion?: import("@react-three/fiber").Quaternion | undefined;
44
- layers?: import("@react-three/fiber").Layers | undefined;
45
- dispose?: (() => void) | null | undefined;
46
- } & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
47
- range?: number | undefined;
48
- limit?: number | undefined;
49
- frames?: number | undefined;
50
- }, "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" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "frames" | "instanceMatrix" | "count" | "instanceColor" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "limit"> & React.RefAttributes<THREE.InstancedMesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
37
+ }, "visible" | "attach" | "attachArray" | "attachObject" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "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 | "geometry" | "context" | "instance" | "instanceKey"> & React.RefAttributes<unknown>>;
38
+ declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "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" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "frames" | "instanceMatrix" | "count" | "instanceColor" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "limit"> & React.RefAttributes<InstancedMesh>>;
51
39
  declare function Merged({ meshes, children, ...props }: {
52
40
  [x: string]: any;
53
41
  meshes: any;
package/core/Instances.js CHANGED
@@ -25,10 +25,13 @@ const Instance = /*#__PURE__*/React.forwardRef(({
25
25
  }), []);
26
26
  const group = React.useRef();
27
27
  const {
28
- subscribe
28
+ subscribe,
29
+ getParent
29
30
  } = React.useContext(context || globalContext);
30
31
  React.useLayoutEffect(() => subscribe(group), []);
31
32
  return /*#__PURE__*/React.createElement("position", _extends({
33
+ instance: getParent(),
34
+ instanceKey: group,
32
35
  ref: mergeRefs([ref, group])
33
36
  }, props), children);
34
37
  });
@@ -97,37 +100,22 @@ const Instances = /*#__PURE__*/React.forwardRef(({
97
100
  count++;
98
101
  }
99
102
  });
100
- const events = React.useMemo(() => {
101
- const events = {};
102
-
103
- for (i = 0; i < instances.length; i++) {
104
- var _instances$i$current;
105
-
106
- Object.assign(events, (_instances$i$current = instances[i].current) == null ? void 0 : _instances$i$current.__r3f.handlers);
107
- }
108
-
109
- return Object.keys(events).reduce((prev, key) => ({ ...prev,
110
- [key]: event => {
111
- var _instances$event$inst, _r3f, _r3f$handlers;
112
-
113
- const object = (_instances$event$inst = instances[event.instanceId]) == null ? void 0 : _instances$event$inst.current;
114
- return object == null ? void 0 : (_r3f = object.__r3f) == null ? void 0 : (_r3f$handlers = _r3f.handlers) == null ? void 0 : _r3f$handlers[key]({ ...event,
115
- object
116
- });
117
- }
118
- }), {});
119
- }, [children, instances]);
120
103
  const api = React.useMemo(() => ({
104
+ getParent: () => parentRef,
121
105
  subscribe: ref => {
122
106
  setInstances(instances => [...instances, ref]);
123
107
  return () => setInstances(instances => instances.filter(item => item.current !== ref.current));
124
108
  }
125
109
  }), []);
126
110
  return /*#__PURE__*/React.createElement("instancedMesh", _extends({
111
+ userData: {
112
+ instances
113
+ },
127
114
  matrixAutoUpdate: false,
128
115
  ref: mergeRefs([ref, parentRef]),
129
- args: [null, null, 0]
130
- }, events, props), /*#__PURE__*/React.createElement("instancedBufferAttribute", {
116
+ args: [null, null, 0],
117
+ raycast: () => null
118
+ }, props), /*#__PURE__*/React.createElement("instancedBufferAttribute", {
131
119
  attach: "instanceMatrix",
132
120
  count: matrices.length / 16,
133
121
  array: matrices,
@@ -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("../materials/SpotLightMaterial.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 u=o(e),l=i(t);const s=new r.Vector3,c=l.forwardRef((({depthBuffer:e,color:t="white",distance:o=5,angle:i=.15,attenuation:c=5,anglePower:f=5,...m},p)=>{const h=l.useRef(null),d=a.useThree((e=>e.size)),g=a.useThree((e=>e.camera)),v=a.useThree((e=>e.viewport.dpr)),[b]=l.useState((()=>new n.SpotLightMaterial));a.useFrame((()=>{b.uniforms.spotPosition.value.copy(h.current.getWorldPosition(s)),h.current.lookAt(h.current.parent.target.getWorldPosition(s))}));const w=l.useMemo((()=>{const e=new r.CylinderGeometry(.1,7*i,o,128,64,!0);return e.applyMatrix4((new r.Matrix4).makeTranslation(0,-o/2,0)),e.applyMatrix4((new r.Matrix4).makeRotationX(-Math.PI/2)),e}),[i,o]);return l.createElement("spotLight",u.default({ref:p,angle:i,color:t,distance:o},m),l.createElement("mesh",{ref:h,geometry:w},l.createElement("primitive",{object:b,attach:"material","uniforms-lightColor-value":t,"uniforms-attenuation-value":c,"uniforms-anglePower-value":f,"uniforms-depth-value":e,"uniforms-cameraNear-value":g.near,"uniforms-cameraFar-value":g.far,"uniforms-resolution-value":e?[d.width*v,d.height*v]:[0,0]})))}));exports.SpotLight=c;
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"),o=require("../materials/SpotLightMaterial.cjs.js");function i(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 u=i(e),l=n(t);const s=new r.Vector3,c=l.forwardRef((({opacity:e=1,radiusTop:t,radiusBottom:i,depthBuffer:n,color:c="white",distance:f=5,angle:m=.15,attenuation:p=5,anglePower:d=5,...h},v)=>{const g=l.useRef(null),y=a.useThree((e=>e.size)),b=a.useThree((e=>e.camera)),w=a.useThree((e=>e.viewport.dpr)),[j]=l.useState((()=>new o.SpotLightMaterial));t=void 0===t?.1:t,i=void 0===i?7*m:i,a.useFrame((()=>{j.uniforms.spotPosition.value.copy(g.current.getWorldPosition(s)),g.current.lookAt(g.current.parent.target.getWorldPosition(s))}));const M=l.useMemo((()=>{const e=new r.CylinderGeometry(t,i,f,128,64,!0);return e.applyMatrix4((new r.Matrix4).makeTranslation(0,-f/2,0)),e.applyMatrix4((new r.Matrix4).makeRotationX(-Math.PI/2)),e}),[m,f,t,i]);return l.createElement("spotLight",u.default({ref:v,angle:m,color:c,distance:f},h),l.createElement("mesh",{ref:g,geometry:M,raycast:()=>null},l.createElement("primitive",{object:j,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":c,"uniforms-attenuation-value":p,"uniforms-anglePower-value":d,"uniforms-depth-value":n,"uniforms-cameraNear-value":b.near,"uniforms-cameraFar-value":b.far,"uniforms-resolution-value":n?[y.width*w,y.height*w]:[0,0]})))}));exports.SpotLight=c;
@@ -6,6 +6,9 @@ declare const SpotLight: React.ForwardRefExoticComponent<Pick<Omit<import("@reac
6
6
  depthBuffer?: DepthTexture | undefined;
7
7
  attenuation?: number | undefined;
8
8
  anglePower?: number | undefined;
9
+ radiusTop?: number | undefined;
10
+ radiusBottom?: number | undefined;
11
+ opacity?: number | undefined;
9
12
  color?: string | number | undefined;
10
- }, "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 | "distance" | "decay" | "target" | "angle" | "intensity" | "isLight" | "shadow" | "shadowCameraFov" | "shadowCameraLeft" | "shadowCameraRight" | "shadowCameraTop" | "shadowCameraBottom" | "shadowCameraNear" | "shadowCameraFar" | "shadowBias" | "shadowMapWidth" | "shadowMapHeight" | "power" | "depthBuffer" | "penumbra" | "isSpotLight" | "attenuation" | "anglePower"> & React.RefAttributes<SpotLightImpl>>;
13
+ }, "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 | "distance" | "opacity" | "decay" | "target" | "angle" | "intensity" | "isLight" | "shadow" | "shadowCameraFov" | "shadowCameraLeft" | "shadowCameraRight" | "shadowCameraTop" | "shadowCameraBottom" | "shadowCameraNear" | "shadowCameraFar" | "shadowBias" | "shadowMapWidth" | "shadowMapHeight" | "power" | "depthBuffer" | "penumbra" | "isSpotLight" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom"> & React.RefAttributes<SpotLightImpl>>;
11
14
  export { SpotLight };
package/core/SpotLight.js CHANGED
@@ -6,6 +6,9 @@ import { SpotLightMaterial } from '../materials/SpotLightMaterial.js';
6
6
 
7
7
  const vec = new Vector3();
8
8
  const SpotLight = /*#__PURE__*/React.forwardRef(({
9
+ opacity = 1,
10
+ radiusTop,
11
+ radiusBottom,
9
12
  depthBuffer,
10
13
  color = 'white',
11
14
  distance = 5,
@@ -19,16 +22,18 @@ const SpotLight = /*#__PURE__*/React.forwardRef(({
19
22
  const camera = useThree(state => state.camera);
20
23
  const dpr = useThree(state => state.viewport.dpr);
21
24
  const [material] = React.useState(() => new SpotLightMaterial());
25
+ radiusTop = radiusTop === undefined ? 0.1 : radiusTop;
26
+ radiusBottom = radiusBottom === undefined ? angle * 7 : radiusBottom;
22
27
  useFrame(() => {
23
28
  material.uniforms.spotPosition.value.copy(mesh.current.getWorldPosition(vec));
24
29
  mesh.current.lookAt(mesh.current.parent.target.getWorldPosition(vec));
25
30
  });
26
31
  const geom = React.useMemo(() => {
27
- const geometry = new CylinderGeometry(0.1, angle * 7, distance, 128, 64, true);
32
+ const geometry = new CylinderGeometry(radiusTop, radiusBottom, distance, 128, 64, true);
28
33
  geometry.applyMatrix4(new Matrix4().makeTranslation(0, -distance / 2, 0));
29
34
  geometry.applyMatrix4(new Matrix4().makeRotationX(-Math.PI / 2));
30
35
  return geometry;
31
- }, [angle, distance]);
36
+ }, [angle, distance, radiusTop, radiusBottom]);
32
37
  return /*#__PURE__*/React.createElement("spotLight", _extends({
33
38
  ref: ref,
34
39
  angle: angle,
@@ -36,10 +41,12 @@ const SpotLight = /*#__PURE__*/React.forwardRef(({
36
41
  distance: distance
37
42
  }, props), /*#__PURE__*/React.createElement("mesh", {
38
43
  ref: mesh,
39
- geometry: geom
44
+ geometry: geom,
45
+ raycast: () => null
40
46
  }, /*#__PURE__*/React.createElement("primitive", {
41
47
  object: material,
42
48
  attach: "material",
49
+ "uniforms-opacity-value": opacity,
43
50
  "uniforms-lightColor-value": color,
44
51
  "uniforms-attenuation-value": attenuation,
45
52
  "uniforms-anglePower-value": anglePower,
package/core/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./Effects.cjs.js"),a=require("./GradientTexture.cjs.js"),c=require("./Image.cjs.js"),j=require("./OrthographicCamera.cjs.js"),p=require("./PerspectiveCamera.cjs.js"),n=require("./CubeCamera.cjs.js"),l=require("./DeviceOrientationControls.cjs.js"),x=require("./FlyControls.cjs.js"),q=require("./MapControls.cjs.js"),d=require("./OrbitControls.cjs.js"),h=require("./TrackballControls.cjs.js"),C=require("./ArcballControls.cjs.js"),m=require("./TransformControls.cjs.js"),S=require("./PointerLockControls.cjs.js"),b=require("./FirstPersonControls.cjs.js"),B=require("./GizmoHelper.cjs.js"),M=require("./GizmoViewcube.cjs.js"),P=require("./GizmoViewport.cjs.js"),f=require("./useCubeTexture.cjs.js"),T=require("./useFBX.cjs.js"),g=require("./useGLTF.cjs.js"),v=require("./useProgress.cjs.js"),L=require("./useTexture.cjs.js"),A=require("./Stats.cjs.js"),G=require("./useDepthBuffer.cjs.js"),k=require("./useAspect.cjs.js"),D=require("./useCamera.cjs.js"),F=require("./useDetectGPU.cjs.js"),w=require("./useHelper.cjs.js"),z=require("./useBVH.cjs.js"),I=require("./useContextBridge.cjs.js"),O=require("./useAnimations.cjs.js"),E=require("./useFBO.cjs.js"),R=require("./useIntersect.cjs.js"),y=require("./useSimplification.cjs.js"),H=require("./useTessellation.cjs.js"),V=require("./useEdgeSplit.cjs.js"),Q=require("./CurveModifier.cjs.js"),W=require("./MeshDistortMaterial.cjs.js"),N=require("./MeshWobbleMaterial.cjs.js"),U=require("./MeshReflectorMaterial.cjs.js"),X=require("./PointMaterial.cjs.js"),K=require("./shaderMaterial.cjs.js"),_=require("./softShadows.cjs.js"),J=require("./shapes.cjs.js"),Y=require("./RoundedBox.cjs.js"),Z=require("./ScreenQuad.cjs.js"),$=require("./Center.cjs.js"),ee=require("./Bounds.cjs.js"),re=require("./CameraShake.cjs.js"),se=require("./Float.cjs.js"),te=require("./Stage.cjs.js"),oe=require("./Backdrop.cjs.js"),ie=require("./Shadow.cjs.js"),ue=require("./ContactShadows.cjs.js"),ae=require("./Reflector.cjs.js"),ce=require("./SpotLight.cjs.js"),je=require("./Environment.cjs.js"),pe=require("./Sky.cjs.js"),ne=require("./Stars.cjs.js"),le=require("./Cloud.cjs.js"),xe=require("./useMatcapTexture.cjs.js"),qe=require("./useNormalTexture.cjs.js"),de=require("./Points.cjs.js"),he=require("./Instances.cjs.js"),Ce=require("./Segments.cjs.js"),me=require("./Detailed.cjs.js"),Se=require("./Preload.cjs.js"),be=require("./BakeShadows.cjs.js"),Be=require("./meshBounds.cjs.js"),Me=require("./AdaptiveDpr.cjs.js"),Pe=require("./AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("lodash.omit"),require("lodash.pick"),require("zustand"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("use-asset"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../assets/cloud.base64.cjs.js"),require("../helpers/matcap-assets.cjs.js"),require("../helpers/normal-assets.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=t.Line,exports.PositionalAudio=o.PositionalAudio,exports.Text=i.Text,exports.Effects=u.Effects,exports.isWebGL2Available=u.isWebGL2Available,exports.GradientTexture=a.GradientTexture,exports.Image=c.Image,exports.OrthographicCamera=j.OrthographicCamera,exports.PerspectiveCamera=p.PerspectiveCamera,exports.CubeCamera=n.CubeCamera,exports.DeviceOrientationControls=l.DeviceOrientationControls,exports.FlyControls=x.FlyControls,exports.MapControls=q.MapControls,exports.OrbitControls=d.OrbitControls,exports.TrackballControls=h.TrackballControls,exports.ArcballControls=C.ArcballControls,exports.TransformControls=m.TransformControls,exports.PointerLockControls=S.PointerLockControls,exports.FirstPersonControls=b.FirstPersonControls,exports.GizmoHelper=B.GizmoHelper,exports.useGizmoContext=B.useGizmoContext,exports.GizmoViewcube=M.GizmoViewcube,exports.GizmoViewport=P.GizmoViewport,exports.useCubeTexture=f.useCubeTexture,exports.useFBX=T.useFBX,exports.useGLTF=g.useGLTF,exports.useProgress=v.useProgress,exports.IsObject=L.IsObject,exports.useTexture=L.useTexture,exports.Stats=A.Stats,exports.useDepthBuffer=G.useDepthBuffer,exports.useAspect=k.useAspect,exports.useCamera=D.useCamera,exports.useDetectGPU=F.useDetectGPU,exports.useHelper=w.useHelper,exports.useBVH=z.useBVH,exports.useContextBridge=I.useContextBridge,exports.useAnimations=O.useAnimations,exports.useFBO=E.useFBO,exports.useIntersect=R.useIntersect,exports.useSimplification=y.useSimplification,exports.useTessellation=H.useTessellation,exports.useEdgeSplit=V.useEdgeSplit,exports.CurveModifier=Q.CurveModifier,exports.MeshDistortMaterial=W.MeshDistortMaterial,exports.MeshWobbleMaterial=N.MeshWobbleMaterial,exports.MeshReflectorMaterial=U.MeshReflectorMaterial,exports.PointMaterial=X.PointMaterial,exports.PointMaterialImpl=X.PointMaterialImpl,exports.shaderMaterial=K.shaderMaterial,exports.softShadows=_.softShadows,exports.Box=J.Box,exports.Circle=J.Circle,exports.Cone=J.Cone,exports.Cylinder=J.Cylinder,exports.Dodecahedron=J.Dodecahedron,exports.Extrude=J.Extrude,exports.Icosahedron=J.Icosahedron,exports.Lathe=J.Lathe,exports.Octahedron=J.Octahedron,exports.Plane=J.Plane,exports.Polyhedron=J.Polyhedron,exports.Ring=J.Ring,exports.Sphere=J.Sphere,exports.Tetrahedron=J.Tetrahedron,exports.Torus=J.Torus,exports.TorusKnot=J.TorusKnot,exports.Tube=J.Tube,exports.RoundedBox=Y.RoundedBox,exports.ScreenQuad=Z.ScreenQuad,exports.Center=$.Center,exports.Bounds=ee.Bounds,exports.useBounds=ee.useBounds,exports.CameraShake=re.CameraShake,exports.Float=se.Float,exports.Stage=te.Stage,exports.Backdrop=oe.Backdrop,exports.Shadow=ie.Shadow,exports.ContactShadows=ue.ContactShadows,exports.Reflector=ae.Reflector,exports.SpotLight=ce.SpotLight,exports.Environment=je.Environment,exports.Sky=pe.Sky,exports.calcPosFromAngles=pe.calcPosFromAngles,exports.Stars=ne.Stars,exports.Cloud=le.Cloud,exports.useMatcapTexture=xe.useMatcapTexture,exports.useNormalTexture=qe.useNormalTexture,exports.Point=de.Point,exports.Points=de.Points,exports.PointsBuffer=de.PointsBuffer,exports.Instance=he.Instance,exports.Instances=he.Instances,exports.Merged=he.Merged,exports.Segment=Ce.Segment,exports.Segments=Ce.Segments,exports.Detailed=me.Detailed,exports.Preload=Se.Preload,exports.BakeShadows=be.BakeShadows,exports.meshBounds=Be.meshBounds,exports.AdaptiveDpr=Me.AdaptiveDpr,exports.AdaptiveEvents=Pe.AdaptiveEvents;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./Effects.cjs.js"),a=require("./GradientTexture.cjs.js"),c=require("./Image.cjs.js"),j=require("./OrthographicCamera.cjs.js"),n=require("./PerspectiveCamera.cjs.js"),p=require("./CubeCamera.cjs.js"),l=require("./DeviceOrientationControls.cjs.js"),x=require("./FlyControls.cjs.js"),q=require("./MapControls.cjs.js"),d=require("./OrbitControls.cjs.js"),C=require("./TrackballControls.cjs.js"),h=require("./ArcballControls.cjs.js"),m=require("./TransformControls.cjs.js"),B=require("./PointerLockControls.cjs.js"),b=require("./FirstPersonControls.cjs.js"),M=require("./GizmoHelper.cjs.js"),P=require("./GizmoViewcube.cjs.js"),S=require("./GizmoViewport.cjs.js"),f=require("./useCubeTexture.cjs.js"),T=require("./useFBX.cjs.js"),g=require("./useGLTF.cjs.js"),v=require("./useProgress.cjs.js"),L=require("./useTexture.cjs.js"),A=require("./Stats.cjs.js"),G=require("./useDepthBuffer.cjs.js"),k=require("./useAspect.cjs.js"),D=require("./useCamera.cjs.js"),F=require("./useDetectGPU.cjs.js"),w=require("./useHelper.cjs.js"),z=require("./useBVH.cjs.js"),I=require("./useContextBridge.cjs.js"),O=require("./useAnimations.cjs.js"),E=require("./useFBO.cjs.js"),R=require("./useIntersect.cjs.js"),y=require("./CurveModifier.cjs.js"),H=require("./MeshDistortMaterial.cjs.js"),V=require("./MeshWobbleMaterial.cjs.js"),Q=require("./MeshReflectorMaterial.cjs.js"),W=require("./PointMaterial.cjs.js"),N=require("./shaderMaterial.cjs.js"),U=require("./softShadows.cjs.js"),X=require("./shapes.cjs.js"),K=require("./RoundedBox.cjs.js"),_=require("./ScreenQuad.cjs.js"),J=require("./Center.cjs.js"),Y=require("./Bounds.cjs.js"),Z=require("./CameraShake.cjs.js"),$=require("./Float.cjs.js"),ee=require("./Stage.cjs.js"),re=require("./Backdrop.cjs.js"),se=require("./Shadow.cjs.js"),te=require("./ContactShadows.cjs.js"),oe=require("./Reflector.cjs.js"),ie=require("./SpotLight.cjs.js"),ue=require("./Environment.cjs.js"),ae=require("./Sky.cjs.js"),ce=require("./Stars.cjs.js"),je=require("./Cloud.cjs.js"),ne=require("./useMatcapTexture.cjs.js"),pe=require("./useNormalTexture.cjs.js"),le=require("./Points.cjs.js"),xe=require("./Instances.cjs.js"),qe=require("./Segments.cjs.js"),de=require("./Detailed.cjs.js"),Ce=require("./Preload.cjs.js"),he=require("./BakeShadows.cjs.js"),me=require("./meshBounds.cjs.js"),Be=require("./AdaptiveDpr.cjs.js"),be=require("./AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("lodash.omit"),require("lodash.pick"),require("zustand"),require("three/examples/js/libs/stats.min"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("use-asset"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=t.Line,exports.PositionalAudio=o.PositionalAudio,exports.Text=i.Text,exports.Effects=u.Effects,exports.isWebGL2Available=u.isWebGL2Available,exports.GradientTexture=a.GradientTexture,exports.Image=c.Image,exports.OrthographicCamera=j.OrthographicCamera,exports.PerspectiveCamera=n.PerspectiveCamera,exports.CubeCamera=p.CubeCamera,exports.DeviceOrientationControls=l.DeviceOrientationControls,exports.FlyControls=x.FlyControls,exports.MapControls=q.MapControls,exports.OrbitControls=d.OrbitControls,exports.TrackballControls=C.TrackballControls,exports.ArcballControls=h.ArcballControls,exports.TransformControls=m.TransformControls,exports.PointerLockControls=B.PointerLockControls,exports.FirstPersonControls=b.FirstPersonControls,exports.GizmoHelper=M.GizmoHelper,exports.useGizmoContext=M.useGizmoContext,exports.GizmoViewcube=P.GizmoViewcube,exports.GizmoViewport=S.GizmoViewport,exports.useCubeTexture=f.useCubeTexture,exports.useFBX=T.useFBX,exports.useGLTF=g.useGLTF,exports.useProgress=v.useProgress,exports.IsObject=L.IsObject,exports.useTexture=L.useTexture,exports.Stats=A.Stats,exports.useDepthBuffer=G.useDepthBuffer,exports.useAspect=k.useAspect,exports.useCamera=D.useCamera,exports.useDetectGPU=F.useDetectGPU,exports.useHelper=w.useHelper,exports.useBVH=z.useBVH,exports.useContextBridge=I.useContextBridge,exports.useAnimations=O.useAnimations,exports.useFBO=E.useFBO,exports.useIntersect=R.useIntersect,exports.CurveModifier=y.CurveModifier,exports.MeshDistortMaterial=H.MeshDistortMaterial,exports.MeshWobbleMaterial=V.MeshWobbleMaterial,exports.MeshReflectorMaterial=Q.MeshReflectorMaterial,exports.PointMaterial=W.PointMaterial,exports.PointMaterialImpl=W.PointMaterialImpl,exports.shaderMaterial=N.shaderMaterial,exports.softShadows=U.softShadows,exports.Box=X.Box,exports.Circle=X.Circle,exports.Cone=X.Cone,exports.Cylinder=X.Cylinder,exports.Dodecahedron=X.Dodecahedron,exports.Extrude=X.Extrude,exports.Icosahedron=X.Icosahedron,exports.Lathe=X.Lathe,exports.Octahedron=X.Octahedron,exports.Plane=X.Plane,exports.Polyhedron=X.Polyhedron,exports.Ring=X.Ring,exports.Sphere=X.Sphere,exports.Tetrahedron=X.Tetrahedron,exports.Torus=X.Torus,exports.TorusKnot=X.TorusKnot,exports.Tube=X.Tube,exports.RoundedBox=K.RoundedBox,exports.ScreenQuad=_.ScreenQuad,exports.Center=J.Center,exports.Bounds=Y.Bounds,exports.useBounds=Y.useBounds,exports.CameraShake=Z.CameraShake,exports.Float=$.Float,exports.Stage=ee.Stage,exports.Backdrop=re.Backdrop,exports.Shadow=se.Shadow,exports.ContactShadows=te.ContactShadows,exports.Reflector=oe.Reflector,exports.SpotLight=ie.SpotLight,exports.Environment=ue.Environment,exports.Sky=ae.Sky,exports.calcPosFromAngles=ae.calcPosFromAngles,exports.Stars=ce.Stars,exports.Cloud=je.Cloud,exports.useMatcapTexture=ne.useMatcapTexture,exports.useNormalTexture=pe.useNormalTexture,exports.Point=le.Point,exports.Points=le.Points,exports.PointsBuffer=le.PointsBuffer,exports.Instance=xe.Instance,exports.Instances=xe.Instances,exports.Merged=xe.Merged,exports.Segment=qe.Segment,exports.Segments=qe.Segments,exports.Detailed=de.Detailed,exports.Preload=Ce.Preload,exports.BakeShadows=he.BakeShadows,exports.meshBounds=me.meshBounds,exports.AdaptiveDpr=Be.AdaptiveDpr,exports.AdaptiveEvents=be.AdaptiveEvents;
package/core/index.d.ts CHANGED
@@ -38,9 +38,6 @@ export * from './useContextBridge';
38
38
  export * from './useAnimations';
39
39
  export * from './useFBO';
40
40
  export * from './useIntersect';
41
- export * from './useSimplification';
42
- export * from './useTessellation';
43
- export * from './useEdgeSplit';
44
41
  export * from './CurveModifier';
45
42
  export * from './MeshDistortMaterial';
46
43
  export * from './MeshWobbleMaterial';
package/core/index.js CHANGED
@@ -38,9 +38,6 @@ export { useContextBridge } from './useContextBridge.js';
38
38
  export { useAnimations } from './useAnimations.js';
39
39
  export { useFBO } from './useFBO.js';
40
40
  export { useIntersect } from './useIntersect.js';
41
- export { useSimplification } from './useSimplification.js';
42
- export { useTessellation } from './useTessellation.js';
43
- export { useEdgeSplit } from './useEdgeSplit.js';
44
41
  export { CurveModifier } from './CurveModifier.js';
45
42
  export { MeshDistortMaterial } from './MeshDistortMaterial.js';
46
43
  export { MeshWobbleMaterial } from './MeshWobbleMaterial.js';
@@ -96,8 +93,5 @@ import '../materials/ConvolutionMaterial.js';
96
93
  import '../materials/MeshReflectorMaterial.js';
97
94
  import '../helpers/environment-assets.js';
98
95
  import '../materials/SpotLightMaterial.js';
99
- import '../assets/cloud.base64.js';
100
- import '../helpers/matcap-assets.js';
101
- import '../helpers/normal-assets.js';
102
96
  import '../helpers/Position.js';
103
97
  import 'react-composer';
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./useTexture.cjs.js"),r=require("../helpers/matcap-assets.cjs.js");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 c=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,c.get?c:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("three"),require("@react-three/fiber");var a=c(e);const u=r.matcapList[0];exports.useMatcapTexture=function(e=0,c=1024){const s=a.useMemo((()=>Object.keys(r.matcapList).length),[]),n=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${c}/${`${a.useMemo((()=>"string"==typeof e?e:"number"==typeof e?r.matcapList[e]:null),[e])||u}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(c)}.png`}`;return[t.useTexture(n),n,s]};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./useTexture.cjs.js"),r=require("use-asset");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 s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("three"),require("@react-three/fiber");var u=s(e);exports.useMatcapTexture=function(e=0,s=1024){const a=r.useAsset((()=>new Promise((async e=>{e(await fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json())))}))),"matcapList"),n=a[0],c=u.useMemo((()=>Object.keys(a).length),[]),i=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${s}/${`${u.useMemo((()=>"string"==typeof e?e:"number"==typeof e?a[e]:null),[e])||n}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(s)}.png`}`;return[t.useTexture(i),i,c]};
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { useTexture } from './useTexture.js';
3
- import { matcapList } from '../helpers/matcap-assets.js';
3
+ import { useAsset } from 'use-asset';
4
4
 
5
5
  function getFormatString(format) {
6
6
  switch (format) {
@@ -21,9 +21,14 @@ function getFormatString(format) {
21
21
  }
22
22
  }
23
23
 
24
+ const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';
24
25
  const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';
25
- const DEFAULT_MATCAP = matcapList[0];
26
26
  function useMatcapTexture(id = 0, format = 1024) {
27
+ const matcapList = useAsset(() => new Promise(async resolve => {
28
+ const matcapList = await fetch(LIST_URL).then(res => res.json());
29
+ resolve(matcapList);
30
+ }), 'matcapList');
31
+ const DEFAULT_MATCAP = matcapList[0];
27
32
  const numTot = React.useMemo(() => Object.keys(matcapList).length, []);
28
33
  const fileHash = React.useMemo(() => {
29
34
  if (typeof id === 'string') {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useTexture.cjs.js"),t=require("three"),s=require("../helpers/normal-assets.cjs.js");function a(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@react-three/fiber");var o=a(e);const n=s.normalsList[0];exports.useNormalTexture=function(e=0,a={}){const{repeat:u=[1,1],anisotropy:c=1,offset:f=[0,0]}=a,i=o.useMemo((()=>Object.keys(s.normalsList).length),[]),p=`https://rawcdn.githack.com/emmelleppi/normal-maps/f24c810fc1d86b5b1e5dfea914b668f70b5f2923/normals/${s.normalsList[e]||n}`,l=r.useTexture(p);return o.useLayoutEffect((()=>{l&&(l.wrapS=l.wrapT=t.RepeatWrapping,l.repeat=new t.Vector2(u[0],u[1]),l.offset=new t.Vector2(f[0],f[1]),l.anisotropy=c)}),[l,c,u,f]),[l,p,i]};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useTexture.cjs.js"),t=require("three"),s=require("use-asset");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@react-three/fiber");var a=n(e);exports.useNormalTexture=function(e=0,n={}){const{repeat:o=[1,1],anisotropy:u=1,offset:c=[0,0]}=n,i=s.useAsset((()=>new Promise((async e=>{e(await fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json())))}))),"normalsList"),f=a.useMemo((()=>Object.keys(i).length),[]),p=i[0],l=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${i[e]||p}`,d=r.useTexture(l);return a.useLayoutEffect((()=>{d&&(d.wrapS=d.wrapT=t.RepeatWrapping,d.repeat=new t.Vector2(o[0],o[1]),d.offset=new t.Vector2(c[0],c[1]),d.anisotropy=u)}),[d,u,o,c]),[d,l,f]};
@@ -1,17 +1,22 @@
1
1
  import * as React from 'react';
2
2
  import { useTexture } from './useTexture.js';
3
3
  import { RepeatWrapping, Vector2 } from 'three';
4
- import { normalsList } from '../helpers/normal-assets.js';
4
+ import { useAsset } from 'use-asset';
5
5
 
6
- const NORMAL_ROOT = 'https://rawcdn.githack.com/emmelleppi/normal-maps/f24c810fc1d86b5b1e5dfea914b668f70b5f2923';
7
- const DEFAULT_NORMAL = normalsList[0];
6
+ const NORMAL_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb';
7
+ const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json';
8
8
  function useNormalTexture(id = 0, settings = {}) {
9
9
  const {
10
10
  repeat = [1, 1],
11
11
  anisotropy = 1,
12
12
  offset = [0, 0]
13
13
  } = settings;
14
+ const normalsList = useAsset(() => new Promise(async resolve => {
15
+ const normalsList = await fetch(LIST_URL).then(res => res.json());
16
+ resolve(normalsList);
17
+ }), 'normalsList');
14
18
  const numTot = React.useMemo(() => Object.keys(normalsList).length, []);
19
+ const DEFAULT_NORMAL = normalsList[0];
15
20
  const imageName = normalsList[id] || DEFAULT_NORMAL;
16
21
  const url = `${NORMAL_ROOT}/normals/${imageName}`;
17
22
  const normalTexture = useTexture(url);
@@ -1 +1 @@
1
- "use strict";function e(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}Object.defineProperty(exports,"__esModule",{value:!0});var r=e(require("three"));class t extends r.Group{constructor(){super(),this.color=new r.Color("white")}}exports.Position=t;
1
+ "use strict";function e(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)}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("three"));const r=new t.Matrix4,n=new t.Matrix4,i=[],s=new t.Mesh;class o extends t.Group{constructor(){super(),this.color=new t.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const o=this.instance.current;if(!o)return;if(!o.geometry||!o.material)return;s.geometry=o.geometry;const c=o.matrixWorld;let a=o.userData.instances.indexOf(this.instanceKey);if(-1!==a){o.getMatrixAt(a,r),n.multiplyMatrices(c,r),s.matrixWorld=n,s.raycast(e,i);for(let e=0,r=i.length;e<r;e++){const r=i[e];r.instanceId=a,r.object=this,t.push(r)}i.length=0}}}exports.Position=o;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import * as THREE from 'three';
2
3
  import { ReactThreeFiber } from '@react-three/fiber';
3
4
  declare global {
@@ -9,5 +10,9 @@ declare global {
9
10
  }
10
11
  export declare class Position extends THREE.Group {
11
12
  color: THREE.Color;
13
+ instance: React.MutableRefObject<THREE.InstancedMesh | undefined>;
14
+ instanceKey: React.MutableRefObject<JSX.IntrinsicElements['position'] | undefined>;
12
15
  constructor();
16
+ get geometry(): THREE.BufferGeometry | undefined;
17
+ raycast(raycaster: any, intersects: any): void;
13
18
  }
@@ -1,9 +1,60 @@
1
1
  import * as THREE from 'three';
2
2
 
3
+ const _instanceLocalMatrix = /*@__PURE__*/new THREE.Matrix4();
4
+
5
+ const _instanceWorldMatrix = /*@__PURE__*/new THREE.Matrix4();
6
+
7
+ const _instanceIntersects = [];
8
+
9
+ const _mesh = /*@__PURE__*/new THREE.Mesh();
10
+
3
11
  class Position extends THREE.Group {
4
12
  constructor() {
5
13
  super();
6
14
  this.color = new THREE.Color('white');
15
+ this.instance = {
16
+ current: undefined
17
+ };
18
+ this.instanceKey = {
19
+ current: undefined
20
+ };
21
+ } // This will allow the virtual instance have bounds
22
+
23
+
24
+ get geometry() {
25
+ var _this$instance$curren;
26
+
27
+ return (_this$instance$curren = this.instance.current) == null ? void 0 : _this$instance$curren.geometry;
28
+ } // And this will allow the virtual instance to receive events
29
+
30
+
31
+ raycast(raycaster, intersects) {
32
+ const parent = this.instance.current;
33
+ if (!parent) return;
34
+ if (!parent.geometry || !parent.material) return;
35
+ _mesh.geometry = parent.geometry;
36
+ const matrixWorld = parent.matrixWorld;
37
+ let instanceId = parent.userData.instances.indexOf(this.instanceKey);
38
+ if (instanceId === -1) return; // calculate the world matrix for each instance
39
+
40
+ parent.getMatrixAt(instanceId, _instanceLocalMatrix);
41
+
42
+ _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); // the mesh represents this single instance
43
+
44
+
45
+ _mesh.matrixWorld = _instanceWorldMatrix;
46
+
47
+ _mesh.raycast(raycaster, _instanceIntersects); // process the result of raycast
48
+
49
+
50
+ for (let i = 0, l = _instanceIntersects.length; i < l; i++) {
51
+ const intersect = _instanceIntersects[i];
52
+ intersect.instanceId = instanceId;
53
+ intersect.object = this;
54
+ intersects.push(intersect);
55
+ }
56
+
57
+ _instanceIntersects.length = 0;
7
58
  }
8
59
 
9
60
  }