Using ThreeJS with ReactJS Installation npm install three @react-three/fiber @react-three/drei Boilerplate 2 Cubes 'use client' import { useRef, useState } from 'react' import { Canvas, useFrame } from '@react-three/fiber' function Box (props) { // This reference gives us direct access to the THREE.Mesh object. const ref = useRef() // Hold state for hovered and clicked events. const [hovered, hover] = useState(false) const [clicked, click] = useState(false) // Subscribe this component to the render-loop and rotate the mesh every frame. useFrame((state,delta) => (ref.current.rotation.x += delta)) // Return the view. // These are regular three.js elements expressed in JSX. return ( <mesh {...props} ref={ref} scale={clicked ? 1.5 : 1} onClick={(event) => click(!clicked)} onPointerOver={(event) => hover(true)} onPointerOut={(event) => hover(false)} > <boxGeometry args={[1, 1, 1]} /> <meshStandardMaterial color={hovered ? 'hotpink' : 'orange' } /> </mesh> ) } export default function App() { return ( <Canvas> <color attach="background" args={['#fff']} /> <ambientLight intensity={0.5} /> <spotLight position={[10, 10, 10]} angle={0.15} penumbra={1} /> <pointLight position={[-10, -10, -10]} /> <Box position={[-1.2, 0, 0]} /> <Box position={[1.2, 0, 0]} /> </Canvas> ) } Custom model 'use client' import React, { Suspense } from 'react'; import { Canvas } from '@react-three/fiber'; import { useGLTF, OrbitControls } from '@react-three/drei'; function Model({ path }) { const { scene } = useGLTF(path); return <primitive object={scene} rotation={[0,4.7,0]} scale={[2, 2, 2]} />; } export default function Character() { return ( <Canvas> <directionalLight position={[10, 10, 10]} intensity={3} /> <directionalLight position={[10, -10, -10]} intensity={3} /> <directionalLight position={[-10, 0, 0]} intensity={3} /> <Suspense fallback={null}> <Model path="/creature.glb" /> </Suspense> <OrbitControls /> </Canvas> ); }