reactjs - react 三纤维锁定 Canvas 中的对象位置

标签 reactjs three.js react-three-fiber

我是 Threejs 和 React-Three-Fiber 的新手。当透视相机旋转和移动时,如何锁定 Canvas 中的对象(锁定位置、旋转)。我想制作一个避免透视相机移动并保持在固定位置的对象

current preview

enter image description here

最佳答案

您可以use refs to access underlying objects ,从而修改它们的位置、旋转等。

PerspectiveCameraObject3D ,您可以将此网格物体添加为子物体,以便它们一起移动。

import { useRef } from 'react';
import { useThree } from '@react-three/fiber';

const MyMesh = () => {
  const { camera } = useThree();
  const ref = useRef();

  useEffect(() => {
    // Add mesh to camera
    const meshRef = ref.current;
    camera.add(meshRef);

    // Cleanup on unmount
    return () => {
      camera.remove(meshRef);
    };
  }, [camera, ref.current]);

  return <mesh ref={ref} position={[0, 0, -5]} />;
};

在这里,我通过 useThree 通过其上下文访问 Fiber 的相机。钩子(Hook)。

或者,您可以每帧复制相机的属性并应用偏移。这将导致相同的显示行为。

您可以通过 useFrame 访问渲染循环钩。它在三个内运行,因此 React 中没有任何开销。值得注意的是,您也可以从钩子(Hook)的回调中访问 Fiber 的上下文。

import { useRef } from 'react';
import { useFrame } from '@react-three/fiber';

const MyMesh = () => {
  const ref = useRef();

  useFrame(({ camera }) => {
    // Move mesh to be flush with camera
    ref.current.position.copy(camera.position);
    ref.current.quaternion.copy(camera.quaternion);

    // Apply offset
    ref.current.translateZ(-5);
  });

  return <mesh ref={ref} />;
};

关于reactjs - react 三纤维锁定 Canvas 中的对象位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68796567/

相关文章:

javascript - 在 Nexus Player、Android Cordova 应用程序上打开虚拟键盘时键入第一个字符

javascript - 如何从文本输入中评估 JavaScript 函数

reactjs - 仅当元素位于视口(viewport)上时才调用 UseFrame

javascript - 如何限制 react 三纤维MapControls中的平移距离

reactjs - Textarea 自动高度在 flex 中不起作用

javascript - Undefined 不是一个对象(评估 'this. state.input' )

reactjs - 如何在 material-ui 数据网格行中添加按钮?

javascript - ThreeJS、Websockets 和 NodeJS 客户端/服务器实验

三.JS Blender 只导出单个对象

reactjs - 以编程方式更改 gltf 导入网格的 Material - react 三纤维