我正在尝试弄清楚如何在 React Three Fiber 中以编程方式获取
scene
对象,以便我可以以传统方式添加三个组件:scene.add(myThing)
。我尝试过将 const canvasRef = useRef()
与 <Canvas ref={canvasRef} />
一起使用,但在传递给另一个组件时,引用似乎未定义。
我知道这可能是非常糟糕的做法,但我想做的是 将其转换为在 React Three Fiber 中使用,但是 Geometry
已被
BufferGeometry
取代,我有点迷失了。我找到了这个,但正如前面提到的,我现在只是尝试使用
scene.add()
,直到我能更多地了解 Three 的内部工作原理。感谢您的帮助。
import { useThree } from "@react-three/fiber"
import { BoxGeometry, Mesh, MeshStandardMaterial } from "three";
const { scene } = useThree()
const addThreeComponent = () => {
const geometry = new BoxGeometry(100, 10, 100);
const material = new MeshStandardMaterial({ color: 0x00ff00 });
const newBox = new Mesh(geometry, material);
newBox.position.set(0, 10, 0);
scene.add(newBox);
}
forwardRef
。
const MyCanvasRef = forwardRef(props, ref) => {
const { scene, camera } = useThree();
useImperativeHandle(ref, () => ({
scene,
camera,
}), [scene, camera]);
}
export const MyCanvas = forwardRef(({ children }, ref) => {
return (
<Canvas>
<MyCanvasRef ref={ref} />
{ children }
</Canvas>
);
}
用途:
const ref = useRef();
<MyCanvas ref={ref}>
...
</MyCanvas />