# Texto3D [TextGeometry](https://threejs.org/docs/index.html?q=text#examples/en/geometries/TextGeometry) es una de las formas en las que podemos agregar texto en 3D a nuestra escena. Sin embargo, no forma parte del núcleo de ThreeJS. Por lo tanto, para usarlo, tendrías que importarlo desde el módulo `three/addons/controls/TextGeometry`. Esto crea un problema porque **TresJS** crea automáticamente un catálogo del núcleo de Three para que puedas usarlos como componentes. Afortunadamente, **TresJS** proporciona una forma de ampliar el catálogo de componentes. Puedes hacerlo utilizando el método `extend` de la biblioteca principal. Para obtener más información sobre cómo ampliar tu catálogo de TresJS, consulta la sección de [extending](/advanced/extending.md). ## Usando TextGeometry Para usar `TextGeometry`, debes importarlo desde el módulo `three/addons/geometries/TextGeometry`. ```js import { TextGeometry } from 'three/addons/geometries/TextGeometry' ``` Luego, debes ampliar el catálogo de componentes utilizando el método `extend`. ```js import { extend } from '@tresjs/core' import { TextGeometry } from 'three/addons/geometries/TextGeometry' extend({ TextGeometry }) ``` [TextGeometry](https://threejs.org/docs/index.html?q=text#examples/en/geometries/TextGeometry) necesita solo un argumento requerido, la fuente. Puedes ver un ejemplo a continuación. ```js const fontPath = 'https://raw.githubusercontent.com/Tresjs/assets/main/fonts/FiraCodeRegular.json' const loader = new FontLoader() const font = await new Promise((resolve, reject) => { try { loader.load(fontPath, (font) => { resolve(font) }) } catch (error) { reject(console.error('cientos', error)) } }) ``` Ahora puedes usar el componente `TresTextGeometry` dentro de un TresMesh en tu escena. ```vue ``` luego, como en el ejemplo, puedes pasar un objeto con las configuraciones deseadas. ```ts const fontOptions = { size: 0.5, height: 0.2, curveSegments: 5, bevelEnabled: true, bevelThickness: 0.05, bevelSize: 0.02, bevelOffset: 0, bevelSegments: 4, } ``` También podemos pasar una matcapTexture para agregar detalles finales, utilizando TresMeshNormalMaterial dentro de TresMesh. ```ts const matcapTexture = await useTexture(['https://raw.githubusercontent.com/Tresjs/assets/main/textures/matcaps/7.png']) ``` Entonces, el código final sería algo como esto: ```vue ``` Sé que parece mucho trabajo, pero tengo buenas noticias, hay una forma mucho más sencilla. ## TextGeometry de `cientos` El paquete `cientos` proporciona un componente llamado `` que es un envoltorio de `TextGeometry` del módulo [`three-stdlib`](https://github.com/pmndrs/three-stdlib). ¿Lo mejor? No necesitas extender el catálogo, solo pasa el argumento de la fuente. Simplemente funciona. 💯 (si no se proporciona un texto, el texto será TresJS) ```vue ``` Podemos pasar las opciones como props ```html ``` en caso de que no se proporcionen las opciones, los valores predeterminados son: ```js size: 0.5, height: 0.2, curveSegments: 5, bevelEnabled: true, bevelThickness: 0.05, bevelSize: 0.02, bevelOffset: 0, bevelSegments: 4, ``` De forma predeterminada, el texto en ThreeJS comienza en la posición inicial de la malla, por lo que si es [0,0,0], el texto comenzará allí, pero podemos centrarlo simplemente pasando la bandera "center". ```vue ```