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 (
<>
Press 1, 2, or 3 to switch view.