Используйте пружину React С элементами управления орбитой в волокне React Three

#reactjs #three.js #react-spring #react-three-fiber #orbitcontrols

Вопрос:

Я пытаюсь использовать Orbitcontrols в сочетании с react spring для анимации моей камеры в React Three Fiber. До сих пор это мой подход:

 function Controls({ cameraData, duration }) {  const [orbit, setOrbit] = useState(true);  const [target, setTarget] = useState(cameraData.lookAt);  const { gl, camera } = useThree();   const springProps = useSpring({  config: { duration: duration ? duration : 1000, easing: easings.easeCubic },  from: {  x: camera.position.x - 0.1,  y: camera.position.y - 0.1,  z: camera.position.z - 0.1,  lookAtX: camera.lookAt.x - 0.1,  lookAtY: camera.lookAt.y - 0.1,  lookAtZ: camera.lookAt.z - 0.1,  },  to: {  x: cameraData.position[0],  y: cameraData.position[1],  z: cameraData.position[2],  lookAtX: cameraData.lookAt[0],  lookAtY: cameraData.lookAt[1],  lookAtZ: cameraData.lookAt[2],  },  onStart: (ya) =gt; {  setOrbit(false);  },  onRest: (ya) =gt; {  setOrbit(true);  setTarget(cameraData.lookAt)  },  });   useFrame((state, delta) =gt; {  if (!orbit) {  camera.position.x = springProps.x.animation.values[0]._value;  camera.position.y = springProps.y.animation.values[0]._value;  camera.position.z = springProps.z.animation.values[0]._value;  camera.lookAt(  springProps.lookAtX.animation.values[0]._value,  springProps.lookAtY.animation.values[0]._value,  springProps.lookAtZ.animation.values[0]._value  );  }  });   return (  lt;OrbitControls  enabled={orbit}  target={target}  args={[camera, gl.domElement]}  /gt;  ); }  

Я отключаю орбитальные контроллеры, когда начинается моя весна. Все работает. Но: При использовании OrbitControl положение моей камеры меняется. После этого, когда я запускаю свою весеннюю анимацию, значения «от» не обновляются.

Например, я переключаюсь с x: 100 до x: 500 . Затем поверните мою камеру с помощью OrbitControls на x: 700 . Когда я начинаю свою следующую весеннюю анимацию, она анимируется, начиная с x: 500 вместо x: 700 .

Как я могу обновить свои from ценности.

Спасибо в связи