--- title: Cargar Modelos description: Carga modelos 3D en tus escenas de Tres. author: alvarosabu thumbnail: /recipes/gltf-model.png difficulty: 1 --- # Cargar Modelos > Todos los modelos utilizados en esta guía son de [Alvaro Saburido](https://sketchfab.com/3d-models/aku-aku-7dfcb6edf10b4098bbb965c56fd3055c). Los modelos 3D están disponibles en cientos de formatos de archivo, cada uno con diferentes propósitos, características variadas y complejidad variable. Para esta guía, nos vamos a centrar en cargar modelos gLTF (GL Transmission Format), que son el formato más común para modelos 3D en la web. Hay varias formas de cargar modelos en TresJS: ::: warning Por favor, ten en cuenta que en los ejemplos anteriores utilizamos el `await` de nivel superior, asegúrate de envolverlo con un componente [Suspense](https://vuejs.org/guide/built-ins/suspense.html#suspense). Consulta Suspense para obtener más información. ::: ## Usando `useLoader` El composable `useLoader` te permite pasar cualquier tipo de cargador de three.js y una URL para cargar el recurso. Devuelve una `Promise` con el recurso cargado. Para obtener una explicación detallada de cómo usar `useLoader`, consulta la documentación de [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') ``` Luego puedes pasar la escena del modelo a un componente [`primitive`](/advanced/primitive) de TresJS para renderizarlo: ```html ``` > El componente `` no es un componente independiente en el código fuente de Tres. En su lugar, es parte de la funcionalidad principal de Tres. Cuando usas ``, se traduce a una llamada a `createElement`, que crea el objeto three.js adecuado según la propiedad "object" proporcionada. Observa en el ejemplo anterior que estamos utilizando el componente `Suspense` para envolver el componente `TresCanvas`. Esto se debe a que `useLoader` devuelve una `Promise` y necesitamos esperar a que se resuelva antes de renderizar la escena. ## Usando `useGLTF` Una forma más conveniente de cargar modelos es utilizando el composable `useGLTF` disponible en el paquete [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos). ```ts import { useGLTF } from '@tresjs/cientos' const { scene, nodes, animations, materials } = await useGLTF('/models/AkuAku.gltf') ``` Una ventaja de usar `useGLTF` es que puedes pasar una propiedad `draco` para habilitar la [compresión Draco](https://threejs.org/docs/index.html?q=drac#examples/en/loaders/DRACOLoader) para el modelo. Esto reducirá el tamaño del modelo y mejorará el rendimiento. ```ts import { useGLTF } from '@tresjs/cientos' const { scene, nodes, animations, materials } = await useGLTF('/models/AkuAku.gltf', { draco: true }) ``` Alternativamente, puedes seleccionar fácilmente objetos dentro del modelo utilizando la propiedad `nodes`. ::: code-group ```vue [App.vue] ``` ```vue [Model.vue] ``` ::: ## Usando `GLTFModel` El componente `GLTFModel` es un envoltorio alrededor de `useGLTF` que está disponible en el paquete [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos). ```vue{2,9} ``` Este enfoque en particular es más sencillo pero te brinda menos control sobre el modelo. ## useFBX El composable `useFBX` está disponible en el paquete [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos). ```ts import { useFBX } from '@tresjs/cientos' const model = await useFBX('/models/AkuAku.fbx') ``` Entonces, es tan sencillo como agregar la escena a tu escena: ```html ``` ## FBXModel El componente `FBXModel` es un envoltorio alrededor de `useFBX` que está disponible en el paquete [@tresjs/cientos](https://github.com/Tresjs/tres/tree/main/packages/cientos). Su uso es similar al de `GLTFModel`: ```vue{2,9} ```