import { useEffect, useMemo, useState } from 'react' import { Canvas, useFrame, useThree } from '@react-three/fiber' import * as THREE from 'three' const PRESETS = { front: [0, 1.2, 6.5], side: [6.5, 1.4, 0], topAngled: [3.8, 5.4, 4.2], } function CameraController({ preset }) { const { camera } = useThree() const target = useMemo(() => new THREE.Vector3(0, 0, 0), []) const targetPosition = useMemo(() => new THREE.Vector3(), []) useEffect(() => { const [x, y, z] = PRESETS[preset] targetPosition.set(x, y, z) }, [preset, targetPosition]) useFrame(() => { camera.position.lerp(targetPosition, 0.08) camera.lookAt(target) }) return null } function Scene({ preset }) { return ( <> ) } function App() { const [preset, setPreset] = useState('front') useEffect(() => { function onKeyDown(event) { if (event.key === '1') setPreset('front') if (event.key === '2') setPreset('side') if (event.key === '3') setPreset('topAngled') } window.addEventListener('keydown', onKeyDown) return () => window.removeEventListener('keydown', onKeyDown) }, []) return (

Camera Presets

Press 1, 2, or 3 to switch view.

) } export default App