--- title: Tekst 3D description: Add 3D tekst met gemak author: alvarosabu thumbnail: /recipes/text-3d.png difficulty: 1 --- # Text3D [TextGeometry](https://threejs.org/docs/index.html?q=text#examples/en/geometries/TextGeometry) is een van de manieren waarmee we 3D tekst in onze scene kunnen toevoegen. Het maakt echter geen deel uit van de kern van ThreeJS. Om het te gebruiken moet je het dus importeren vanuit de module `three/addons/controls/TextGeometry`. Dit levert een probleem op omdat **TresJS** automatisch een catalogus van de kern van Three maakt, zodat u deze als componenten kunt gebruiken. Gelukkig biedt **TresJS** een manier om de catalogus met componenten uit te breiden. U kunt dit doen door de `extend` methode uit de kernbibliotheek te gebruiken. Voor meer informatie over het uitbreiden van uw TresJS-catalogus raadpleegt u de sectie [extending](/nl/advanced/extending.md). ## TextGeometry gebruiken Om `TextGeometry` te gebruiken moet je het eerst importeren via de `three/addons/geometries/TextGeometry` module. ```js import { TextGeometry } from 'three/addons/geometries/TextGeometry' ``` Daarna moet je de catalogus van componenten extenden middels de `extend` method. ```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) heeft maar één argument nodig - de font. Je vind hieronder een voorbeeld. ```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)) } }) ``` Vervolgens kunt u de component `TresTextGeometry` in een TresMesh in uw scène gebruiken ```vue ``` dan kunt u, net als in het voorbeeld, een object doorgeven met de gewenste configuraties. ```ts const fontOptions = { size: 0.5, height: 0.2, curveSegments: 5, bevelEnabled: true, bevelThickness: 0.05, bevelSize: 0.02, bevelOffset: 0, bevelSegments: 4, } ``` We kunnen ook een matcapTexture doorgeven om de laatste details toe te voegen, met behulp van het TresMeshNormalMaterial in de TresMesh. ```ts const matcapTexture = await useTexture(['https://raw.githubusercontent.com/Tresjs/assets/main/textures/matcaps/7.png']) ``` ```html ``` De uiteindelijke code zou er dus ongeveer zo uitzien: ```vue ``` We weten dat dit veel werk lijkt, maar het goede nieuws is dat er een veel eenvoudigere manier is ## TextGeometry van `cientos` De `cientos` package bied een component genaamd ``, wat een wrapper van de `TextGeometry` is van de [`three-stdlib`](https://github.com/pmndrs/three-stdlib) module. Het beste gedeelte? Je hoeft de catalogus niet te extenden en je hoeft alleen de font als argument mee te geven. It just works. 💯 (Als er geen tekst is meegegeven dan zal de text TresJS zijn) ```vue ``` We kunnen de opties doorgeven als props ```html ``` als de opties niet zijn opgegeven, zijn de standaardwaarden: ``` size: 0.5, height: 0.2, curveSegments: 5, bevelEnabled: true, bevelThickness: 0.05, bevelSize: 0.02, bevelOffset: 0, bevelSegments: 4, ``` Standaard begint tekst in ThreeJS op de beginpositie van de mesh, dus het is [0,0,0] en de tekst begint daar, maar we kunnen deze centreren door gewoon de flag "center" door te geven ```vue ```