在这个最小反应三光纤应用程序中,我尝试加载并包含相同的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>
);
}
看到这个代码沙盒了吗
然而只有第二个
(是不是因为对
useGLTF
的第二次调用记住了“/eye/scene.gltf”
已经加载并返回了同一个对象?这是不是把
特别是,这是我想要实现的:
在我的画布上多次使用gltf模型
除此之外,也许你还可以帮我澄清这些问题,让我更好地理解这里到底发生了什么:
因为我只想要一个3D模型,这是使用gltf的正确方法吗。场景
对象
是
非常感谢。
我不是3方面的专家。js
,根据我的发现并尝试回答您的问题。
1.即使定义了2个基本体,也只显示一只眼睛
如果使用useGLTF()
导入相同的模型,它将引用相同的对象。因此,2个基元指向同一个gltf,并且只应用了最后/一个配置。
const firstGltf = useGLTF("/eye/scene.gltf");
const secondGltf = useGLTF("/eye/scene.gltf");
const glassesGltf = useGLTF("/glasses/scene.gltf");
// for demonstrating first eye is same as second eye
// Output: false, true
console.log(firstGltf === glassesGltf, firstGltf === secondGltf);
2.是<代码>
是的。但是,如果要在屏幕上多次显示相同的gltf,则需要创建网格并应用模型的几何体和材质,以便可以拥有一个新对象。
function Model(props) {
const { nodes, materials } = useGLTF("/eye/scene.gltf");
return (
<group
{...props}
dispose={null}
rotation={[Math.PI, 0, -Math.PI / 2]}
scale={[1, 1, 1]}
>
<mesh
geometry={nodes.Sphere001_Eye_0.geometry}
material={materials.material}
/>
</group>
);
}
...
<Model position={[-1, 0, 1]} />
<Model position={[1, 0, 1]} />
这里是代码和演示框
FYR:
您可以使用这个库https://github.com/pmndrs/gltfjsx从模型生成jsx。
我试图在一个简单的react三纤维场景中动态更改“.gltf”模型的纹理贴图值。如果我理解正确,您必须在材质上添加纹理文件,然后将材质添加到模型中?在我的场景中,纹理文件被烘焙到“.gltf”文件中。我想用jsx更改alphaMap的不透明度等值。 这是我的沙箱:https://codesandbox.io/s/patient-framework-3holn?file=/src/App.js 我知
我已成功地将gltf对象加载到我的react three fiber场景中。现在,我想将材质附着到模型。在这个模型上可以使用标准材料吗?以下是我尝试过的: 常量形状=(道具)=
我正在使用React Three Fiber和“Drei”,并想使用广告牌。但我只知道如何改变广告牌的颜色,而不知道如何添加纹理。 我试过这样做,但在广告牌上找不到任何文档,也不知道我能传递什么样的论点。 在这里,您可以看到如何更改颜色,但不能看到如何添加纹理: https://drei.react-spring.io/?path=/story/abstractions-布告牌——布告牌街 希望有
我只是想在反应3纤维中的一个简单场景中添加一个具有扩散和凹凸纹理的模型。 我真的不知道我做错了什么。 这里是沙箱:https://codesandbox.io/s/three-point-lighting-in-react-three-fiber-forked-qeqlx?file=/src/index.js 该模型是一个GLTF moon,具有烘焙的纹理。月球只是一个球体,但我想使用GLTF模型
我试图加载反应三光纤(R3F)的gltf模型,我做了一个噩梦。我试着寻找答案,也有人有类似的问题,但我无法解决我的问题。 我一直在控制台中看到: 据我所知,我的代码没有问题。我试着用多种不同的方式在模型中加载它。几天前,react three Fibre的创建者将一个模型中装载的光纤与他的codesandbox连接起来,如下所示:https://codesandbox.io/s/r3f-gltf-
我从一个网站下载了一组文件,并在blender中导出了glb、gltf和mtl文件。我可以让glb或gltf文件显示在反应三纤维场景,但我不知道如何让纹理显示正确。我遇到了几个演示,但它们看起来很旧,什么不起作用。 下面是我如何加载文件。