glodrei
Version:
useful add-ons for react-three-fiber
59 lines (47 loc) • 1.44 kB
text/mdx
---
title: Sampler
sourcecode: src/core/Sampler.tsx
---
[](https://drei.vercel.app/?path=/story/misc-sampler--sampler-st)
<Grid cols={4}>
<li>
<Codesandbox id="ehflx3" />
</li>
<li>
<Codesandbox id="ehflx3" />
</li>
<li>
<Codesandbox id="k6rcp2" />
</li>
</Grid>
Declarative abstraction around MeshSurfaceSampler & InstancedMesh.
It samples points from the passed mesh and transforms an InstancedMesh's matrix to distribute instances on the points.
Check the demos & code for more.
You can either pass a Mesh and InstancedMesh as children:
```tsx
// This simple example scatters 1000 spheres on the surface of the sphere mesh.
<Sampler
weight={'normal'} // the name of the attribute to be used as sampling weight
transform={transformPoint} // a function that transforms each instance given a sample. See the examples for more.
count={16} // Number of samples
>
<mesh>
<sphereGeometry args={[2]} />
</mesh>
<instancedMesh args={[null, null, 1_000]}>
<sphereGeometry args={[0.1]} />
</instancedMesh>
</Sampler>
```
or use refs when you can't compose declaratively:
```tsx
const { nodes } = useGLTF('my/mesh/url')
const mesh = useRef(nodes)
const instances = useRef()
return <>
<instancedMesh args={[null, null, 1_000]}>
<sphereGeometry args={[0.1]}>
</instancedMesh>
<Sampler mesh={mesh} instances={instances}>
</>
```