CurveModifier
Given a curve will replace the children of this component with a mesh that move along said curve calling the property moveAlongCurve
or modifying the uniforms.pathOffset
value on the passed ref. Uses three's Curve Modifier
const curveRef = useRef<CurveModifierRef>()
const scroll = useScroll()
const curve = React.useMemo(() => new THREE.CatmullRomCurve3([...handlePos], true, 'centripetal'), [handlePos])
useFrame(() => {
if (curveRef.current) {
// Move continuously along the curve
curveRef.current.moveAlongCurve(0.001)
// Move along the curve using the scrollbar
curveRef.current.uniforms.pathOffset.value = scroll.offset
}
})
return (
<CurveModifier ref={curveRef} curve={curve}>
<mesh>
<boxGeometry args={[10, 10]} />
</mesh>
</CurveModifier>
)
Reference api
type CurveModifierRef = {
curveArray: Curve<any>[];
curveLengthArray: number[];
object3D: TMesh;
splineTexure: DataTexture;
uniforms: CurveModifierUniforms;
updateCurve<TCurve extends Curve<any>>(index: number, curve: TCurve): void;
moveAlongCurve(amount: number): void;
}
type CurveModifierUniforms = {
spineTexture: IUniform<DataTexture>;
pathOffset: INumericUniform;
pathSegment: INumericUniform;
spineOffset: INumericUniform;
spineLength: INumericUniform;
flow: INumericUniform;
}