UNPKG

glodrei

Version:

useful add-ons for react-three-fiber

59 lines (47 loc) 1.44 kB
--- title: Sampler sourcecode: src/core/Sampler.tsx --- [![](https://img.shields.io/badge/-storybook-%23ff69b4)](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}> </> ```