anycoder-2e0e36d2 / components /ThreeBackground.jsx
M-Zeki's picture
Upload components/ThreeBackground.jsx with huggingface_hub
df4ed4e verified
Raw
History Blame Contribute Delete
1.31 kB
import { useRef, useMemo } from 'react'
import { Canvas, useFrame } from '@react-three/fiber'
import { Points, PointMaterial } from '@react-three/drei'
import * as random from 'maath/random/dist/maath-random.esm'
function ParticleField(props) {
const ref = useRef()
// Generate random points in a sphere
const sphere = useMemo(() => random.inSphere(new Float32Array(5000), { radius: 1.5 }), [])
useFrame((state, delta) => {
ref.current.rotation.x -= delta / 10
ref.current.rotation.y -= delta / 15
})
return (
<group rotation={[0, 0, Math.PI / 4]}>
<Points ref={ref} positions={sphere} stride={3} frustumCulled={false} {...props}>
<PointMaterial
transparent
color="#00E5FF"
size={0.002}
sizeAttenuation={true}
depthWrite={false}
opacity={0.6}
/>
</Points>
</group>
)
}
export default function ThreeBackground() {
return (
<div className="absolute inset-0 -z-10 bg-nordic-navy">
<Canvas camera={{ position: [0, 0, 1] }}>
<ParticleField />
</Canvas>
{/* Gradient overlay to blend canvas into page */}
<div className="absolute inset-0 bg-gradient-to-b from-nordic-navy/20 via-nordic-navy/50 to-nordic-navy pointer-events-none" />
</div>
)
}