在这个精简的 react-three-fiber 应用中,我正在尝试加载和包含同一个 GLTF 模型两次:
请看这个codesandbox。
然而,只有第二个
我很难理解为什么会这样发生,以及如何更好地处理它。(这是因为第二次调用
特别是,这是我想要实现的:
import React, { Suspense } from "react";
import { Canvas } from "@react-three/fiber";
import { useGLTF } from "@react-three/drei";
function MyContent() {
const firstGltf = useGLTF("/eye/scene.gltf");
const secondGltf = useGLTF("/eye/scene.gltf");
return (
<>
<primitive object={firstGltf.scene} position={[-200, 0, -400]} />
<primitive object={secondGltf.scene} position={[200, 0, -400]} />
</>
);
}
export default function App() {
return (
<Canvas>
<ambientLight color="white" intensity={0.5} />
<Suspense fallback={null}>
<MyContent />
</Suspense>
</Canvas>
);
}
请看这个codesandbox。
然而,只有第二个
<primitive>
是可见的。如果我删除第二个<primitive>
,那么第一个就会出现。我很难理解为什么会这样发生,以及如何更好地处理它。(这是因为第二次调用
useGLTF
时记住了已经加载了"/eye/scene.gltf"
,并返回相同的对象吗?这是否会在使用<primitive>
时出现问题,也许是因为材质/几何体没有第二次重新创建,只存在一次?)特别是,这是我想要实现的:
- 在我的画布上多次使用gltf模型
- 理想情况下,只加载一次gltf
- 既然我只需要一个3D模型,那么使用
gltf.scene
对象是否是正确的方法? <primitive>
是否是显示3D模型的正确方法?或者我应该从场景中提取几何体/纹理并呈现它们?