If you don't want to use Blender to convert the fbx files into glb as shown in the video, then you can direct download them and save into ./dist/client/models
import*asTHREEfrom'three'import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'import{GLTFLoader}from'three/examples/jsm/loaders/GLTFLoader'importStatsfrom'three/examples/jsm/libs/stats.module'import{GUI}from'dat.gui'constscene=newTHREE.Scene()scene.add(newTHREE.AxesHelper(5))constlight1=newTHREE.PointLight(0xffffff,1000)light1.position.set(2.5,2.5,2.5)scene.add(light1)constlight2=newTHREE.PointLight(0xffffff,1000)light2.position.set(-2.5,2.5,2.5)scene.add(light2)constcamera=newTHREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000)camera.position.set(0.8,1.4,1.0)constrenderer=newTHREE.WebGLRenderer()renderer.setSize(window.innerWidth,window.innerHeight)document.body.appendChild(renderer.domElement)constcontrols=newOrbitControls(camera,renderer.domElement)controls.enableDamping=truecontrols.target.set(0,1,0)letmixer:THREE.AnimationMixerletmodelReady=falseconstanimationActions:THREE.AnimationAction[]=[]letactiveAction:THREE.AnimationActionletlastAction:THREE.AnimationActionconstgltfLoader=newGLTFLoader()gltfLoader.load('models/vanguard.glb',(gltf)=>{// gltf.scene.scale.set(.01, .01, .01)mixer=newTHREE.AnimationMixer(gltf.scene)constanimationAction=mixer.clipAction((gltfasany).animations[0])animationActions.push(animationAction)animationsFolder.add(animations,'default')activeAction=animationActions[0]scene.add(gltf.scene)//add an animation from another filegltfLoader.load('models/vanguard@samba.glb',(gltf)=>{console.log('loaded samba')constanimationAction=mixer.clipAction((gltfasany).animations[0])animationActions.push(animationAction)animationsFolder.add(animations,'samba')//add an animation from another filegltfLoader.load('models/vanguard@bellydance.glb',(gltf)=>{console.log('loaded bellydance')constanimationAction=mixer.clipAction((gltfasany).animations[0])animationActions.push(animationAction)animationsFolder.add(animations,'bellydance')//add an animation from another filegltfLoader.load('models/vanguard@goofyrunning.glb',(gltf)=>{console.log('loaded goofyrunning');(gltfasany).animations[0].tracks.shift()//delete the specific track that moves the object forward while runningconstanimationAction=mixer.clipAction((gltfasany).animations[0])animationActions.push(animationAction)animationsFolder.add(animations,'goofyrunning')modelReady=true},(xhr)=>{console.log((xhr.loaded/xhr.total)*100+'% loaded')},(error)=>{console.log(error)})},(xhr)=>{console.log((xhr.loaded/xhr.total)*100+'% loaded')},(error)=>{console.log(error)})},(xhr)=>{console.log((xhr.loaded/xhr.total)*100+'% loaded')},(error)=>{console.log(error)})},(xhr)=>{console.log((xhr.loaded/xhr.total)*100+'% loaded')},(error)=>{console.log(error)})window.addEventListener('resize',onWindowResize,false)functiononWindowResize(){camera.aspect=window.innerWidth/window.innerHeightcamera.updateProjectionMatrix()renderer.setSize(window.innerWidth,window.innerHeight)render()}conststats=newStats()document.body.appendChild(stats.dom)constanimations={default:function(){setAction(animationActions[0])},samba:function(){setAction(animationActions[1])},bellydance:function(){setAction(animationActions[2])},goofyrunning:function(){setAction(animationActions[3])},}constsetAction=(toAction:THREE.AnimationAction)=>{if(toAction!=activeAction){lastAction=activeActionactiveAction=toAction//lastAction.stop()lastAction.fadeOut(1)activeAction.reset()activeAction.fadeIn(1)activeAction.play()}}constgui=newGUI()constanimationsFolder=gui.addFolder('Animations')animationsFolder.open()constclock=newTHREE.Clock()functionanimate(){requestAnimationFrame(animate)controls.update()if(modelReady)mixer.update(clock.getDelta())render()stats.update()}functionrender(){renderer.render(scene,camera)}animate()