@react-three/drei 9.19.7 → 9.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/core/Decal.cjs.js +1 -0
- package/core/Decal.d.ts +12 -0
- package/core/Decal.js +56 -0
- package/core/Reflector.d.ts +1 -1
- package/core/Sampler.cjs.js +1 -1
- package/core/Sampler.d.ts +9 -2
- package/core/Sampler.js +48 -28
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.js +2 -1
- package/index.cjs.js +1 -1
- package/index.js +2 -1
- package/native/index.cjs.js +1 -1
- package/native/index.js +2 -1
- package/package.json +1 -1
- package/web/index.cjs.js +1 -1
- package/web/index.js +2 -1
package/README.md
CHANGED
|
@@ -73,6 +73,7 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
|
|
|
73
73
|
<li><a href="#clone">Clone</a></li>
|
|
74
74
|
<li><a href="#useanimations">useAnimations</a></li>
|
|
75
75
|
<li><a href="#marchingcubes">MarchingCubes</a></li>
|
|
76
|
+
<li><a href="#decal">Decal</a></li>
|
|
76
77
|
</ul>
|
|
77
78
|
<li><a href="#shaders">Shaders</a></li>
|
|
78
79
|
<ul>
|
|
@@ -108,6 +109,7 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
|
|
|
108
109
|
<li><a href="#useintersect">useIntersect</a></li>
|
|
109
110
|
<li><a href="#useboxprojectedenv">useBoxProjectedEnv</a></li>
|
|
110
111
|
<li><a href="#useTrail">useTrail</a></li>
|
|
112
|
+
<li><a href="#useSurfaceSampler">useSurfaceSampler</a></li>
|
|
111
113
|
<li><a href="#BBAnchor">BBAnchor</a></li>
|
|
112
114
|
</ul>
|
|
113
115
|
<li><a href="#loading">Loaders</a></li>
|
|
@@ -767,6 +769,7 @@ You can either pass a Mesh and InstancedMesh as children:
|
|
|
767
769
|
<Sampler
|
|
768
770
|
weight={"normal"} // the name of the attribute to be used as sampling weight
|
|
769
771
|
transform={transformPoint} // a function that transforms each instance given a sample. See the examples for more.
|
|
772
|
+
count={16} // Number of samples
|
|
770
773
|
>
|
|
771
774
|
<mesh>
|
|
772
775
|
<sphereGeometry args={[2]} />
|
|
@@ -912,6 +915,37 @@ An abstraction for threes [MarchingCubes](https://threejs.org/examples/#webgl_ma
|
|
|
912
915
|
</MarchingCubes>
|
|
913
916
|
```
|
|
914
917
|
|
|
918
|
+
#### Decal
|
|
919
|
+
|
|
920
|
+
[](https://drei.pmnd.rs/?path=/story/misc-decal--decal-st)
|
|
921
|
+
|
|
922
|
+
Abstraction around Three's `DecalGeometry`. It will use the its parent `mesh` as the decal surface by default.
|
|
923
|
+
|
|
924
|
+
```js
|
|
925
|
+
<mesh>
|
|
926
|
+
<sphereGeometry />
|
|
927
|
+
<meshBasicMaterial />
|
|
928
|
+
|
|
929
|
+
<Decal
|
|
930
|
+
debug={undefined} // Makes "bounding box" of the decal visible
|
|
931
|
+
position={[0, 0, 0]} // Position of the decal
|
|
932
|
+
rotation={[0, 0, 0]} // Rotation of the decal
|
|
933
|
+
scale={[1, 1, 1]} // Scale of the decal
|
|
934
|
+
>
|
|
935
|
+
// Include your decal material here
|
|
936
|
+
<meshBasicMaterial alpaMap={map} />
|
|
937
|
+
</Decal>
|
|
938
|
+
</mesh>
|
|
939
|
+
```
|
|
940
|
+
|
|
941
|
+
If declarative composition is not possible, use the `mesh` prop to define the surface the decal must attach to.
|
|
942
|
+
|
|
943
|
+
```js
|
|
944
|
+
<Decal mesh={ref}>
|
|
945
|
+
<meshBasicMaterial alpaMap={map} />
|
|
946
|
+
</Decal>
|
|
947
|
+
```
|
|
948
|
+
|
|
915
949
|
# Shaders
|
|
916
950
|
|
|
917
951
|
#### MeshReflectorMaterial
|
|
@@ -1423,6 +1457,22 @@ useFrame(() => {
|
|
|
1423
1457
|
})
|
|
1424
1458
|
```
|
|
1425
1459
|
|
|
1460
|
+
#### useSurfaceSampler
|
|
1461
|
+
|
|
1462
|
+
[](https://drei.vercel.app/?path=/story/misc-decal--decal-st)
|
|
1463
|
+
|
|
1464
|
+
A hook to obtain the result of the [`<Sampler />`](#sampler) as a buffer. Useful for driving anything other than `InstancedMesh` via the Sampler.
|
|
1465
|
+
|
|
1466
|
+
```js
|
|
1467
|
+
const buffer = useSurfaceSampler(
|
|
1468
|
+
mesh, // Mesh to sample
|
|
1469
|
+
count, // [Optional] Number of samples (default: 16)
|
|
1470
|
+
transform, // [Optional] Transformation function. Same as in `<Sampler />`
|
|
1471
|
+
weight, // [Optional] Same as in `<Sampler />`
|
|
1472
|
+
instancedMesh // [Optional] Instanced mesh to scatter
|
|
1473
|
+
)
|
|
1474
|
+
```
|
|
1475
|
+
|
|
1426
1476
|
#### BBAnchor
|
|
1427
1477
|
|
|
1428
1478
|
[](https://drei.vercel.app/?path=/story/misc-bbanchor--bb-anchor-with-html)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("three"),t=require("three-stdlib");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var a=n(e),o=n(r);function c(e,r){Array.isArray(e)?r.fromArray?r.fromArray(e):r.set(...e):r.copy(e)}exports.Decal=function({debug:e,mesh:r,children:n,position:s,rotation:l,scale:u}){const i=a.useRef(null),[[f,m,p]]=a.useState((()=>[new o.Vector3,new o.Euler,new o.Vector3(1,1,1)]));return a.useLayoutEffect((()=>{const e=(null==r?void 0:r.current)||i.current.parent;if(!(e instanceof o.Mesh))throw new Error('Decal must have a Mesh as parent or specify its "mesh" prop');e&&(c(s,f),c(l,m),c(u,p),i.current.geometry=new t.DecalGeometry(e,f,m,p))}),[r,s,u,l,f,m,p]),a.createElement("mesh",{ref:i},n||a.createElement("meshNormalMaterial",{transparent:!0,depthTest:!0,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-4}),e&&a.createElement("mesh",{position:s,rotation:l,scale:u},a.createElement("boxGeometry",null),a.createElement("meshNormalMaterial",{wireframe:!0}),a.createElement("axesHelper",null)))};
|
package/core/Decal.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import * as FIBER from '@react-three/fiber';
|
|
4
|
+
interface DecalProps {
|
|
5
|
+
debug: boolean;
|
|
6
|
+
mesh: React.MutableRefObject<THREE.Mesh>;
|
|
7
|
+
position: FIBER.Vector3;
|
|
8
|
+
rotation: FIBER.Euler;
|
|
9
|
+
scale: FIBER.Vector3;
|
|
10
|
+
}
|
|
11
|
+
export declare function Decal({ debug, mesh, children, position, rotation, scale, }: React.PropsWithChildren<Partial<DecalProps>>): JSX.Element;
|
|
12
|
+
export {};
|
package/core/Decal.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { DecalGeometry } from 'three-stdlib';
|
|
4
|
+
|
|
5
|
+
function setProp(value, targetProp) {
|
|
6
|
+
if (Array.isArray(value)) {
|
|
7
|
+
if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);
|
|
8
|
+
} else {
|
|
9
|
+
targetProp.copy(value);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function Decal({
|
|
14
|
+
debug,
|
|
15
|
+
mesh,
|
|
16
|
+
children,
|
|
17
|
+
position,
|
|
18
|
+
rotation,
|
|
19
|
+
scale
|
|
20
|
+
}) {
|
|
21
|
+
const ref = React.useRef(null);
|
|
22
|
+
const [[p, r, s]] = React.useState(() => {
|
|
23
|
+
return [new THREE.Vector3(), new THREE.Euler(), new THREE.Vector3(1, 1, 1)];
|
|
24
|
+
});
|
|
25
|
+
React.useLayoutEffect(() => {
|
|
26
|
+
const parent = (mesh == null ? void 0 : mesh.current) || ref.current.parent;
|
|
27
|
+
|
|
28
|
+
if (!(parent instanceof THREE.Mesh)) {
|
|
29
|
+
throw new Error('Decal must have a Mesh as parent or specify its "mesh" prop');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (parent) {
|
|
33
|
+
setProp(position, p);
|
|
34
|
+
setProp(rotation, r);
|
|
35
|
+
setProp(scale, s);
|
|
36
|
+
ref.current.geometry = new DecalGeometry(parent, p, r, s);
|
|
37
|
+
}
|
|
38
|
+
}, [mesh, position, scale, rotation, p, r, s]);
|
|
39
|
+
return /*#__PURE__*/React.createElement("mesh", {
|
|
40
|
+
ref: ref
|
|
41
|
+
}, children || /*#__PURE__*/React.createElement("meshNormalMaterial", {
|
|
42
|
+
transparent: true,
|
|
43
|
+
depthTest: true,
|
|
44
|
+
depthWrite: false,
|
|
45
|
+
polygonOffset: true,
|
|
46
|
+
polygonOffsetFactor: -4
|
|
47
|
+
}), debug && /*#__PURE__*/React.createElement("mesh", {
|
|
48
|
+
position: position,
|
|
49
|
+
rotation: rotation,
|
|
50
|
+
scale: scale
|
|
51
|
+
}, /*#__PURE__*/React.createElement("boxGeometry", null), /*#__PURE__*/React.createElement("meshNormalMaterial", {
|
|
52
|
+
wireframe: true
|
|
53
|
+
}), /*#__PURE__*/React.createElement("axesHelper", null)));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { Decal };
|
package/core/Reflector.d.ts
CHANGED
|
@@ -26,4 +26,4 @@ declare global {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
export declare const Reflector: React.ForwardRefExoticComponent<Pick<ReflectorProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "material" | "blur" | "resolution" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "distortion" | "mixContrast" | "distortionMap"
|
|
29
|
+
export declare const Reflector: React.ForwardRefExoticComponent<Pick<ReflectorProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "material" | "blur" | "resolution" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "debug" | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "distortion" | "mixContrast" | "distortionMap"> & React.RefAttributes<Mesh<import("three").BufferGeometry, import("three").Material | import("three").Material[]>>>;
|
package/core/Sampler.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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 l=u(e),o=c(r);function i(e,r=16,u,c,l){const[i,a]=o.useState((()=>{const e=Array.from({length:r},(()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])).flat();return new n.InstancedBufferAttribute(Float32Array.from(e),16)}));return o.useEffect((()=>{if(void 0===e.current)return;const o=new t.MeshSurfaceSampler(e.current);c&&o.setWeightAttribute(c),o.build();const s=new n.Vector3,f=new n.Vector3,d=new n.Color,p=new n.Object3D;e.current.updateMatrixWorld(!0);for(let t=0;t<r;t++)o.sample(s,f,d),"function"==typeof u?u({dummy:p,sampledMesh:e.current,position:s,normal:f,color:d},t):p.position.copy(s),p.updateMatrix(),null!=l&&l.current&&l.current.setMatrixAt(t,p.matrix),p.matrix.toArray(i.array,16*t);null!=l&&l.current&&(l.current.instanceMatrix.needsUpdate=!0),i.needsUpdate=!0,a(i.clone())}),[e,l,c,r,u]),i}exports.Sampler=function({children:e,weight:r,transform:t,instances:n,mesh:u,count:c=16,...a}){const s=o.useRef(null),f=o.useRef(null),d=o.useRef(null);return o.useEffect((()=>{var e,r;f.current=null!==(e=null==n?void 0:n.current)&&void 0!==e?e:s.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),d.current=null!==(r=null==u?void 0:u.current)&&void 0!==r?r:s.current.children.find((e=>"Mesh"===e.type))}),[e,null==u?void 0:u.current,null==n?void 0:n.current]),i(d,c,t,r,f),o.createElement("group",l.default({ref:s},a),e)},exports.useSurfaceSampler=i;
|
package/core/Sampler.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { Color, InstancedMesh, Mesh, Object3D, Vector3 } from 'three';
|
|
2
|
+
import { Color, InstancedBufferAttribute, InstancedMesh, Mesh, Object3D, Vector3 } from 'three';
|
|
3
3
|
import { GroupProps } from '@react-three/fiber';
|
|
4
4
|
declare type SamplePayload = {
|
|
5
5
|
position: Vector3;
|
|
@@ -16,6 +16,13 @@ declare type Props = {
|
|
|
16
16
|
instances?: React.RefObject<InstancedMesh>;
|
|
17
17
|
weight?: string;
|
|
18
18
|
transform?: TransformFn;
|
|
19
|
+
count?: number;
|
|
19
20
|
};
|
|
20
|
-
export
|
|
21
|
+
export interface useSurfaceSamplerProps {
|
|
22
|
+
transform?: TransformFn;
|
|
23
|
+
weight?: string;
|
|
24
|
+
count?: number;
|
|
25
|
+
}
|
|
26
|
+
export declare function useSurfaceSampler(mesh: React.MutableRefObject<Mesh>, count?: number, transform?: TransformFn, weight?: string, instanceMesh?: React.MutableRefObject<InstancedMesh> | null): InstancedBufferAttribute;
|
|
27
|
+
export declare function Sampler({ children, weight, transform, instances, mesh, count, ...props }: React.PropsWithChildren<Props & GroupProps>): JSX.Element;
|
|
21
28
|
export {};
|
package/core/Sampler.js
CHANGED
|
@@ -1,29 +1,18 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { MeshSurfaceSampler } from 'three-stdlib';
|
|
4
|
-
import { Vector3, Color, Object3D } from 'three';
|
|
4
|
+
import { InstancedBufferAttribute, Vector3, Color, Object3D } from 'three';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}) => {
|
|
14
|
-
const group = React.useRef(null);
|
|
15
|
-
const instancedRef = React.useRef(null);
|
|
16
|
-
const meshToSampleRef = React.useRef(null);
|
|
6
|
+
function useSurfaceSampler(mesh, count = 16, transform, weight, instanceMesh) {
|
|
7
|
+
const [buffer, setBuffer] = React.useState(() => {
|
|
8
|
+
const arr = Array.from({
|
|
9
|
+
length: count
|
|
10
|
+
}, () => [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]).flat();
|
|
11
|
+
return new InstancedBufferAttribute(Float32Array.from(arr), 16);
|
|
12
|
+
});
|
|
17
13
|
React.useEffect(() => {
|
|
18
|
-
|
|
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);
|
|
14
|
+
if (typeof mesh.current === 'undefined') return;
|
|
15
|
+
const sampler = new MeshSurfaceSampler(mesh.current);
|
|
27
16
|
|
|
28
17
|
if (weight) {
|
|
29
18
|
sampler.setWeightAttribute(weight);
|
|
@@ -34,15 +23,15 @@ const Sampler = ({
|
|
|
34
23
|
const normal = new Vector3();
|
|
35
24
|
const color = new Color();
|
|
36
25
|
const dummy = new Object3D();
|
|
37
|
-
|
|
26
|
+
mesh.current.updateMatrixWorld(true);
|
|
38
27
|
|
|
39
|
-
for (let i = 0; i <
|
|
28
|
+
for (let i = 0; i < count; i++) {
|
|
40
29
|
sampler.sample(position, normal, color);
|
|
41
30
|
|
|
42
31
|
if (typeof transform === 'function') {
|
|
43
32
|
transform({
|
|
44
33
|
dummy,
|
|
45
|
-
sampledMesh:
|
|
34
|
+
sampledMesh: mesh.current,
|
|
46
35
|
position,
|
|
47
36
|
normal,
|
|
48
37
|
color
|
|
@@ -52,14 +41,45 @@ const Sampler = ({
|
|
|
52
41
|
}
|
|
53
42
|
|
|
54
43
|
dummy.updateMatrix();
|
|
55
|
-
|
|
44
|
+
|
|
45
|
+
if (instanceMesh != null && instanceMesh.current) {
|
|
46
|
+
instanceMesh.current.setMatrixAt(i, dummy.matrix);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
dummy.matrix.toArray(buffer.array, i * 16);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (instanceMesh != null && instanceMesh.current) {
|
|
53
|
+
instanceMesh.current.instanceMatrix.needsUpdate = true;
|
|
56
54
|
}
|
|
57
55
|
|
|
58
|
-
|
|
56
|
+
buffer.needsUpdate = true;
|
|
57
|
+
setBuffer(buffer.clone());
|
|
58
|
+
}, [mesh, instanceMesh, weight, count, transform]);
|
|
59
|
+
return buffer;
|
|
60
|
+
}
|
|
61
|
+
function Sampler({
|
|
62
|
+
children,
|
|
63
|
+
weight,
|
|
64
|
+
transform,
|
|
65
|
+
instances,
|
|
66
|
+
mesh,
|
|
67
|
+
count = 16,
|
|
68
|
+
...props
|
|
69
|
+
}) {
|
|
70
|
+
const group = React.useRef(null);
|
|
71
|
+
const instancedRef = React.useRef(null);
|
|
72
|
+
const meshToSampleRef = React.useRef(null);
|
|
73
|
+
React.useEffect(() => {
|
|
74
|
+
var _instances$current, _mesh$current;
|
|
75
|
+
|
|
76
|
+
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'));
|
|
77
|
+
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');
|
|
59
78
|
}, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
|
|
79
|
+
useSurfaceSampler(meshToSampleRef, count, transform, weight, instancedRef);
|
|
60
80
|
return /*#__PURE__*/React.createElement("group", _extends({
|
|
61
81
|
ref: group
|
|
62
82
|
}, props), children);
|
|
63
|
-
}
|
|
83
|
+
}
|
|
64
84
|
|
|
65
|
-
export { Sampler };
|
|
85
|
+
export { Sampler, useSurfaceSampler };
|
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("./CatmullRomLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),x=require("./Trail.cjs.js"),l=require("./Sampler.cjs.js"),
|
|
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("./CatmullRomLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),x=require("./Trail.cjs.js"),l=require("./Sampler.cjs.js"),q=require("./ComputedAttribute.cjs.js"),d=require("./Clone.cjs.js"),m=require("./MarchingCubes.cjs.js"),C=require("./Decal.cjs.js"),h=require("./OrthographicCamera.cjs.js"),S=require("./PerspectiveCamera.cjs.js"),b=require("./CubeCamera.cjs.js"),M=require("./DeviceOrientationControls.cjs.js"),B=require("./FlyControls.cjs.js"),g=require("./MapControls.cjs.js"),P=require("./OrbitControls.cjs.js"),T=require("./TrackballControls.cjs.js"),v=require("./ArcballControls.cjs.js"),f=require("./TransformControls.cjs.js"),A=require("./PointerLockControls.cjs.js"),L=require("./FirstPersonControls.cjs.js"),k=require("./GizmoHelper.cjs.js"),D=require("./GizmoViewcube.cjs.js"),E=require("./GizmoViewport.cjs.js"),G=require("./useCubeTexture.cjs.js"),w=require("./useFBX.cjs.js"),z=require("./useGLTF.cjs.js"),F=require("./useProgress.cjs.js"),R=require("./useTexture.cjs.js"),O=require("./useKTX2.cjs.js"),I=require("./Stats.cjs.js"),y=require("./useDepthBuffer.cjs.js"),H=require("./useAspect.cjs.js"),V=require("./useCamera.cjs.js"),Q=require("./useDetectGPU.cjs.js"),X=require("./useHelper.cjs.js"),K=require("./useBVH.cjs.js"),W=require("./useContextBridge.cjs.js"),N=require("./useAnimations.cjs.js"),U=require("./useFBO.cjs.js"),_=require("./useIntersect.cjs.js"),J=require("./useBoxProjectedEnv.cjs.js"),Y=require("./BBAnchor.cjs.js"),Z=require("./CurveModifier.cjs.js"),$=require("./MeshDistortMaterial.cjs.js"),ee=require("./MeshWobbleMaterial.cjs.js"),re=require("./MeshReflectorMaterial.cjs.js"),se=require("./PointMaterial.cjs.js"),te=require("./shaderMaterial.cjs.js"),oe=require("./softShadows.cjs.js"),ie=require("./shapes.cjs.js"),ue=require("./RoundedBox.cjs.js"),ae=require("./ScreenQuad.cjs.js"),ne=require("./Center.cjs.js"),ce=require("./Bounds.cjs.js"),je=require("./CameraShake.cjs.js"),pe=require("./Float.cjs.js"),xe=require("./Stage.cjs.js"),le=require("./Backdrop.cjs.js"),qe=require("./Shadow.cjs.js"),de=require("./ContactShadows.cjs.js"),me=require("./AccumulativeShadows.cjs.js"),Ce=require("./Reflector.cjs.js"),he=require("./SpotLight.cjs.js"),Se=require("./Environment.cjs.js"),be=require("./Lightformer.cjs.js"),Me=require("./Sky.cjs.js"),Be=require("./Stars.cjs.js"),ge=require("./Cloud.cjs.js"),Pe=require("./Sparkles.cjs.js"),Te=require("./useMatcapTexture.cjs.js"),ve=require("./useNormalTexture.cjs.js"),fe=require("./Points.cjs.js"),Ae=require("./Instances.cjs.js"),Le=require("./Segments.cjs.js"),ke=require("./Detailed.cjs.js"),De=require("./Preload.cjs.js"),Ee=require("./BakeShadows.cjs.js"),Ge=require("./meshBounds.cjs.js"),we=require("./AdaptiveDpr.cjs.js"),ze=require("./AdaptiveEvents.cjs.js"),Fe=require("./RenderTexture.cjs.js"),Re=require("./Mask.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("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),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.CatmullRomLine=t.CatmullRomLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Text3D=a.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=c.GradientTexture,exports.Image=j.Image,exports.Edges=p.Edges,exports.Trail=x.Trail,exports.useTrail=x.useTrail,exports.Sampler=l.Sampler,exports.useSurfaceSampler=l.useSurfaceSampler,exports.ComputedAttribute=q.ComputedAttribute,exports.Clone=d.Clone,exports.MarchingCube=m.MarchingCube,exports.MarchingCubes=m.MarchingCubes,exports.MarchingPlane=m.MarchingPlane,exports.Decal=C.Decal,exports.OrthographicCamera=h.OrthographicCamera,exports.PerspectiveCamera=S.PerspectiveCamera,exports.CubeCamera=b.CubeCamera,exports.DeviceOrientationControls=M.DeviceOrientationControls,exports.FlyControls=B.FlyControls,exports.MapControls=g.MapControls,exports.OrbitControls=P.OrbitControls,exports.TrackballControls=T.TrackballControls,exports.ArcballControls=v.ArcballControls,exports.TransformControls=f.TransformControls,exports.PointerLockControls=A.PointerLockControls,exports.FirstPersonControls=L.FirstPersonControls,exports.GizmoHelper=k.GizmoHelper,exports.useGizmoContext=k.useGizmoContext,exports.GizmoViewcube=D.GizmoViewcube,exports.GizmoViewport=E.GizmoViewport,exports.useCubeTexture=G.useCubeTexture,exports.useFBX=w.useFBX,exports.useGLTF=z.useGLTF,exports.useProgress=F.useProgress,exports.IsObject=R.IsObject,exports.useTexture=R.useTexture,exports.useKTX2=O.useKTX2,exports.Stats=I.Stats,exports.useDepthBuffer=y.useDepthBuffer,exports.useAspect=H.useAspect,exports.useCamera=V.useCamera,exports.useDetectGPU=Q.useDetectGPU,exports.useHelper=X.useHelper,exports.useBVH=K.useBVH,exports.useContextBridge=W.useContextBridge,exports.useAnimations=N.useAnimations,exports.useFBO=U.useFBO,exports.useIntersect=_.useIntersect,exports.useBoxProjectedEnv=J.useBoxProjectedEnv,exports.BBAnchor=Y.BBAnchor,exports.CurveModifier=Z.CurveModifier,exports.MeshDistortMaterial=$.MeshDistortMaterial,exports.MeshWobbleMaterial=ee.MeshWobbleMaterial,exports.MeshReflectorMaterial=re.MeshReflectorMaterial,exports.PointMaterial=se.PointMaterial,exports.PointMaterialImpl=se.PointMaterialImpl,exports.shaderMaterial=te.shaderMaterial,exports.softShadows=oe.softShadows,exports.Box=ie.Box,exports.Capsule=ie.Capsule,exports.Circle=ie.Circle,exports.Cone=ie.Cone,exports.Cylinder=ie.Cylinder,exports.Dodecahedron=ie.Dodecahedron,exports.Extrude=ie.Extrude,exports.Icosahedron=ie.Icosahedron,exports.Lathe=ie.Lathe,exports.Octahedron=ie.Octahedron,exports.Plane=ie.Plane,exports.Polyhedron=ie.Polyhedron,exports.Ring=ie.Ring,exports.Sphere=ie.Sphere,exports.Tetrahedron=ie.Tetrahedron,exports.Torus=ie.Torus,exports.TorusKnot=ie.TorusKnot,exports.Tube=ie.Tube,exports.RoundedBox=ue.RoundedBox,exports.ScreenQuad=ae.ScreenQuad,exports.Center=ne.Center,exports.Bounds=ce.Bounds,exports.useBounds=ce.useBounds,exports.CameraShake=je.CameraShake,exports.Float=pe.Float,exports.Stage=xe.Stage,exports.Backdrop=le.Backdrop,exports.Shadow=qe.Shadow,exports.ContactShadows=de.ContactShadows,exports.AccumulativeShadows=me.AccumulativeShadows,exports.RandomizedLight=me.RandomizedLight,exports.accumulativeContext=me.accumulativeContext,exports.Reflector=Ce.Reflector,exports.SpotLight=he.SpotLight,exports.Environment=Se.Environment,exports.EnvironmentCube=Se.EnvironmentCube,exports.EnvironmentMap=Se.EnvironmentMap,exports.EnvironmentPortal=Se.EnvironmentPortal,exports.useEnvironment=Se.useEnvironment,exports.Lightformer=be.Lightformer,exports.Sky=Me.Sky,exports.calcPosFromAngles=Me.calcPosFromAngles,exports.Stars=Be.Stars,exports.Cloud=ge.Cloud,exports.Sparkles=Pe.Sparkles,exports.useMatcapTexture=Te.useMatcapTexture,exports.useNormalTexture=ve.useNormalTexture,exports.Point=fe.Point,exports.Points=fe.Points,exports.PointsBuffer=fe.PointsBuffer,exports.Instance=Ae.Instance,exports.Instances=Ae.Instances,exports.Merged=Ae.Merged,exports.Segment=Le.Segment,exports.SegmentObject=Le.SegmentObject,exports.Segments=Le.Segments,exports.Detailed=ke.Detailed,exports.Preload=De.Preload,exports.BakeShadows=Ee.BakeShadows,exports.meshBounds=Ge.meshBounds,exports.AdaptiveDpr=we.AdaptiveDpr,exports.AdaptiveEvents=ze.AdaptiveEvents,exports.RenderTexture=Fe.RenderTexture,exports.Mask=Re.Mask,exports.useMask=Re.useMask;
|
package/core/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './Sampler';
|
|
|
15
15
|
export * from './ComputedAttribute';
|
|
16
16
|
export * from './Clone';
|
|
17
17
|
export * from './MarchingCubes';
|
|
18
|
+
export * from './Decal';
|
|
18
19
|
export * from './OrthographicCamera';
|
|
19
20
|
export * from './PerspectiveCamera';
|
|
20
21
|
export * from './CubeCamera';
|
package/core/index.js
CHANGED
|
@@ -11,10 +11,11 @@ export { GradientTexture } from './GradientTexture.js';
|
|
|
11
11
|
export { Image } from './Image.js';
|
|
12
12
|
export { Edges } from './Edges.js';
|
|
13
13
|
export { Trail, useTrail } from './Trail.js';
|
|
14
|
-
export { Sampler } from './Sampler.js';
|
|
14
|
+
export { Sampler, useSurfaceSampler } from './Sampler.js';
|
|
15
15
|
export { ComputedAttribute } from './ComputedAttribute.js';
|
|
16
16
|
export { Clone } from './Clone.js';
|
|
17
17
|
export { MarchingCube, MarchingCubes, MarchingPlane } from './MarchingCubes.js';
|
|
18
|
+
export { Decal } from './Decal.js';
|
|
18
19
|
export { OrthographicCamera } from './OrthographicCamera.js';
|
|
19
20
|
export { PerspectiveCamera } from './PerspectiveCamera.js';
|
|
20
21
|
export { CubeCamera } from './CubeCamera.js';
|