The concept of moving the Orbit controls target was discussed and demonstrated in the JEasings video lesson.
In this example, a glTF scene is imported and when you double-click the floor or monkey head, the Orbit Controls target JEases to the new position. See the dblclick function in the code below.
import'./style.css'import*asTHREEfrom'three'import{OrbitControls}from'three/addons/controls/OrbitControls.js'import{GLTFLoader}from'three/addons/loaders/GLTFLoader.js'import{RGBELoader}from'three/addons/loaders/RGBELoader.js'importStatsfrom'three/addons/libs/stats.module.js'importJEASINGSfrom'jeasings'constscene=newTHREE.Scene()constgridHelper=newTHREE.GridHelper()gridHelper.position.y=-1scene.add(gridHelper)awaitnewRGBELoader().loadAsync('img/venice_sunset_1k.hdr').then((texture)=>{texture.mapping=THREE.EquirectangularReflectionMappingscene.environment=texture})constcamera=newTHREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,100)camera.position.set(0,1,4)constrenderer=newTHREE.WebGLRenderer({antialias:true})renderer.toneMapping=THREE.ACESFilmicToneMappingrenderer.toneMappingExposure=0.8renderer.shadowMap.enabled=truerenderer.setSize(window.innerWidth,window.innerHeight)document.body.appendChild(renderer.domElement)window.addEventListener('resize',()=>{camera.aspect=window.innerWidth/window.innerHeightcamera.updateProjectionMatrix()renderer.setSize(window.innerWidth,window.innerHeight)})constcontrols=newOrbitControls(camera,renderer.domElement)controls.enableDamping=trueletsuzanne:THREE.Mesh,plane:THREE.MeshnewGLTFLoader().load('models/suzanne_scene.glb',(gltf)=>{suzanne=gltf.scene.getObjectByName('Suzanne')asTHREE.Meshsuzanne.castShadow=true;((suzanne.materialasTHREE.MeshStandardMaterial).mapasTHREE.Texture).colorSpace=THREE.LinearSRGBColorSpaceplane=gltf.scene.getObjectByName('Plane')asTHREE.Meshplane.scale.set(50,1,50);(plane.materialasTHREE.MeshStandardMaterial).envMap=scene.environment// since three@163, we need to set `envMap` before changing `envMapIntensity` has any effect.;(plane.materialasTHREE.MeshStandardMaterial).envMapIntensity=0.05plane.receiveShadow=trueconstspotLight=gltf.scene.getObjectByName('Spot')asTHREE.SpotLightspotLight.intensity/=500spotLight.castShadow=truespotLight.target=suzannescene.add(gltf.scene)})constraycaster=newTHREE.Raycaster()constmouse=newTHREE.Vector2()renderer.domElement.addEventListener('dblclick',(e)=>{mouse.set((e.clientX/renderer.domElement.clientWidth)*2-1,-(e.clientY/renderer.domElement.clientHeight)*2+1)raycaster.setFromCamera(mouse,camera)constintersects=raycaster.intersectObjects([suzanne,plane],false)if(intersects.length){constp=intersects[0].point// JEasing the controls.targetnewJEASINGS.JEasing(controls.target).to({x:p.x,y:p.y,z:p.z,},500).easing(JEASINGS.Cubic.Out).start()}})conststats=newStats()document.body.appendChild(stats.dom)functionanimate(){requestAnimationFrame(animate)controls.update()JEASINGS.update()render()stats.update()}functionrender(){renderer.render(scene,camera)}animate()