| | |
| | | import { useThree } from '@react-three/fiber'; |
| | | import { |
| | | PerspectiveCamera, |
| | | CameraControls, |
| | | PresentationControls, |
| | | FlyControls, |
| | | OrbitControls, |
| | | FirstPersonControls, |
| | | MapControls, |
| | | } from '@react-three/drei'; |
| | | |
| | | const Camera = (props) => { |
| | | const threeObj = useThree(); |
| | | const camera = threeObj.camera; |
| | | |
| | | const [choiceCtrls, setChoiceCtrls] = useState(true); |
| | | |
| | | const ctrl = () => { |
| | | return ( |
| | | <group> |
| | | {/* 相机控制器 */} |
| | | {/* <PresentationControls /> */} |
| | | <CameraControls /> |
| | | {/* <PointerCtrl /> */} |
| | | </group> |
| | | ); |
| | | }; |
| | | |
| | | const flyCtrl = () => { |
| | | return ( |
| | | <group> |
| | | <FirstPersonControls |
| | | far={100000} |
| | | movementSpeed={100} |
| | | activeLook={false} |
| | | lookVertical={true} |
| | | ></FirstPersonControls> |
| | | {/* <OrbitControls /> */} |
| | | <MapControls zoomSpeed={0.1} /> |
| | | </group> |
| | | ); |
| | | }; |
| | | |
| | | return ( |
| | | <> |
| | | {choiceCtrls ? ctrl() : flyCtrl()} |
| | | <PerspectiveCamera |
| | | makeDefault |
| | | position={[-100, 200, 1000]} |
New file |
| | |
| | | import React, { useState, useEffect } from 'react'; |
| | | import { |
| | | PerspectiveCamera, |
| | | CameraControls, |
| | | PresentationControls, |
| | | FlyControls, |
| | | OrbitControls, |
| | | FirstPersonControls, |
| | | MapControls, |
| | | } from '@react-three/drei'; |
| | | |
| | | const Controls = (props) => { |
| | | const [choiceCtrls, setChoiceCtrls] = useState(false); |
| | | |
| | | useEffect(() => { |
| | | if (props.fly) { |
| | | setChoiceCtrls(false); |
| | | } else { |
| | | setChoiceCtrls(true); |
| | | } |
| | | }, [props]) |
| | | |
| | | const ctrl = () => { |
| | | return ( |
| | | <group> |
| | | {/* <PresentationControls /> */} |
| | | <CameraControls /> |
| | | {/* <PointerCtrl /> */} |
| | | </group> |
| | | ); |
| | | }; |
| | | |
| | | const flyCtrl = () => { |
| | | return ( |
| | | <group> |
| | | <FirstPersonControls |
| | | far={100000} |
| | | movementSpeed={100} |
| | | activeLook={false} |
| | | lookVertical={true} |
| | | ></FirstPersonControls> |
| | | {/* <OrbitControls /> */} |
| | | <MapControls zoomSpeed={0.1} /> |
| | | </group> |
| | | ); |
| | | }; |
| | | |
| | | return ( |
| | | <> |
| | | {choiceCtrls ? ctrl() : flyCtrl()} |
| | | </> |
| | | ); |
| | | }; |
| | | |
| | | export default Controls; |
| | |
| | | import Help from '../components/help' |
| | | import Lights from '../components/light' |
| | | import Camera from '../components/camera' |
| | | import Controls from '../components/ctrl' |
| | | import Buildings from '../components/buidings' |
| | | import TreeGroup from '../components/tree-group' |
| | | import House from '../components/house' |
| | |
| | | > |
| | | <Lights /> |
| | | <Camera /> |
| | | <Controls /> |
| | | <Sky distance={450000} sunPosition={[0, 1, 0]} inclination={0} azimuth={0.25} /> |
| | | <Buildings /> |
| | | <TreeGroup /> |