--- title: 加载模型 description: 将3D模型加载到您的Tres场景中。 author: alvarosabu thumbnail: /recipes/gltf-model.png difficulty: 1 --- # 加载模型 > 本指南中使用的所有模型均来自 [Alvaro Saburido](https://sketchfab.com/3d-models/aku-aku-7dfcb6edf10b4098bbb965c56fd3055c)。 3D 模型有数百种文件格式,每种格式都有不同的用途、不同的功能和不同的复杂性。 在本指南中,我们将重点介绍加载 gLTF(GL 传输格式)模型,这是 Web 上最常见的 3D 模型格式。 在 TresJS 中加载模型有多种方法: ::: warning 请注意,在上面的示例中,我们使用顶级 await,请确保用 [Suspense](https://vuejs.org/guide/built-ins/suspense.html#suspense) 组件包装它。有关更多信息,请参阅 Suspense。 ::: ## 使用 `useLoader` `useLoader` 组合式函数允许你传递任何类型的 three.js 加载器和一个用于加载资源的 URL。它返回一个包含已加载资源的 `Promise`。 有关如何使用 `useLoader` 的详细说明,请查看 [useLoader](/api/composables#useloader) 文档。 ```ts import { useLoader } from '@tresjs/core' import { GLTFLoader } from 'three/addons/loaders/GLTFLoader' const { scene } = await useLoader(GLTFLoader, '/models/AkuAku.gltf') ``` 然后,你可以将模型场景传递给 TresJS [`primitive`](/advanced/primitive) 组件以渲染它: ```html ``` > `` 组件不是 Tres 源代码中的独立组件。相反,它是 Tres 核心功能的一部分。当你使用 `` 时,它会被转换为 `createElement` 调用,该调用会根据提供的“object”道具创建适当的 three.js 对象。 请注意,在上面的示例中,我们使用 `Suspense` 组件包装 `TresCanvas` 组件。这是因为 `useLoader` 返回一个 `Promise`,我们需要等到它解析后才能渲染场景。 ## 使用 `useGLTF` 一种更方便的加载模型的方式是使用 [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos) 包中提供的 `useGLTF` 组合式函数。 ```ts import { useGLTF } from '@tresjs/cientos' const { scene, nodes, animations, materials } = await useGLTF('/models/AkuAku.gltf') ``` 使用 `useGLTF` 的一个优点是,你可以传递一个 `draco` 道具来启用模型的 [Draco 压缩](https://threejs.org/docs/index.html#examples/zh/loaders/DRACOLoader)。这将减小模型的大小并提高性能。 ```ts import { useGLTF } from '@tresjs/cientos' const { scene, nodes, animations, materials } = await useGLTF('/models/AkuAku.gltf', { draco: true }) ``` 或者,你可以使用 `nodes` 属性轻松选择模型中的对象 ::: code-group ```vue [App.vue] ``` ```vue [Model.vue] ``` ::: ## 使用 `GLTFModel` `GLTFModel` 组件是 `useGLTF` 的包装器,可从 [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos) 包中获得。 ```vue{2,9} ``` 这种特殊的方法更直接,但它让你对模型的控制更少。 ## useFBX `useFBX` 组合式函数可从 [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos) 包中获得。 ```ts import { useFBX } from '@tresjs/cientos' const model = await useFBX('/models/AkuAku.fbx') ``` 然后,将场景添加到你的场景中非常简单: ```html ``` ## FBXModel `FBXModel` 组件是 `useFBX` 的包装器,可从 [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos) 包中获得。它的用法类似于 `GLTFModel`: ```vue{2,9} ```