three.js启用OrbitControls时点选导航相机抖动问题求助
Three.js 点选导航相机移动与OrbitControls冲突问题
我正在Three.js中开发一个带点选导航功能的测试项目。点选机制很简单:通过raycaster检测用户点击平面的位置,再用gsap移动相机:
const move_cam = () => { const new_pos = { ...marker.position }; gsap.to(camera.position, { duration: 2, x: new_pos.x, z: new_pos.z, onComplete: () => { } }); };
但搭配OrbitControls使用时,相机移动过程中始终指向同一目标(
),原因是OrbitControls会让相机持续看向设定目标以实现环绕效果。
我尝试过三种解决方法:
- 移动时用
controls.enabled= false禁用OrbitControls,动画结束后通过gsap的onComplete()回调恢复,但该设置仅禁用用户交互,相机仍会看向目标; - 在动画循环中添加条件,仅当相机未移动时执行
controls.update(),但动画结束后相机立刻回到原目标; - 存储相机到目标的偏移量
offset,动画结束时重新计算目标位置,虽然能运行,但动画结束时相机出现抖动(
),对应的move_cam()函数如下:
const move_cam = () => { camera_is_moving = true; const offset = { x: controls.target.x - camera.position.x, y: controls.target.y - camera.position.y, z: controls.target.z - camera.position.z, }; const new_pos = { ...marker.position }; new_pos.y = CAMERA_HEIGHT; gsap.to(camera.position, { duration: 2, x: new_pos.x, y: new_pos.y, z: new_pos.z, onComplete: () => { controls.target.x = offset.x + camera.position.x; // controls.target.y= offset.x + camera.position.y; controls.target.z = offset.x + camera.position.z; offset.x = controls.target.x - camera.position.x; offset.y = controls.target.y - camera.position.y; offset.z = controls.target.z - camera.position.z; camera_is_moving = false; } }); };
我的目标是让相机旋转角度在动画前后保持一致,尝试上述方法后仍存在抖动问题,恳请技术帮助。项目已上传至Github仓库,完整JS文件见对应分支。
内容的提问来源于stack exchange,提问作者mqbaka
相关产品推荐
相关产品推荐

