【发布时间】:2021-10-19 03:34:21
【问题描述】:
在这个最小的 react-three-fiber 应用程序中,我尝试加载并包含相同的 GLTF 模型两次:
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 模型的正确方法吗?或者我应该以某种方式从场景中提取几何/纹理并进行渲染?
谢谢!
【问题讨论】:
标签: reactjs three.js gltf react-three-fiber