threed-ai
Version:
'threed-ai' supporting Vite, Next, Nuxt, as a functioning, low-dependency app, a package supporting monorepos of workspaces that utilize 'ThreeJS, WebGL, React, TypeScript <r3Fiber>, GraphQL'.
44 lines (38 loc) • 1.06 kB
JSX
import { Canvas } from '@react-three/fiber'
import { OrbitControls, Preload } from '@react-three/drei'
import useStore from '~/stores/store'
import { useEffect, useRef } from 'react'
const LControl = () => {
const dom = useStore((state) => state.dom)
const control = useRef(null)
useEffect(() => {
if (control.current) {
const domElement = dom.current
const originalTouchAction = domElement.style['touch-action']
domElement.style['touch-action'] = 'none'
return () => {
domElement.style['touch-action'] = originalTouchAction
}
}
}, [dom, control])
// @ts-ignore
return <OrbitControls ref={control} domElement={dom.current} />
}
const LCanvas = ({ children }) => {
const dom = useStore((state) => state.dom)
return (
<Canvas
mode='concurrent'
style={{
position: 'absolute',
top: 0,
}}
onCreated={(state) => state.events.connect(dom.current)}
>
<LControl />
<Preload all />
{children}
</Canvas>
)
}
export default LCanvas