我用相机设置了一个场景,它保持在场景中心的一个固定点上 . 用户可以通过单击(并按住)并拖动鼠标左键来平移相机 . 当用户释放鼠标左键时,摄像机的运动停止 . 我的场景基于Three.js之一demos as see here

有一堆事件处理程序用于为摄像机创建目标位置 lookAt

function onDocumentMouseDown( event ) {
    event.preventDefault();
    isUserInteracting = true;
    onPointerDownPointerX = event.clientX;
    onPointerDownPointerY = event.clientY;
    onPointerDownLon = lon;
    onPointerDownLat = lat;
}

function onDocumentMouseMove( event ) {
    if ( isUserInteracting === true ) {
        lon = ( onPointerDownPointerX - event.clientX ) * 0.1 + onPointerDownLon;
        lat = ( event.clientY - onPointerDownPointerY ) * 0.1 + onPointerDownLat;
    }
}

在我的更新循环中,我有:

// lat and long have been calculated in the event handlers from the cursor click location 

lat = Math.max( - 85, Math.min( 85, lat ) );
phi = THREE.Math.degToRad( 90 - lat );
theta = THREE.Math.degToRad( lon );

camera.target.x = (500 * Math.sin( phi ) * Math.cos( theta ));
camera.target.y = (500 * Math.cos( phi ));
camera.target.z = (500 * Math.sin( phi ) * Math.sin( theta ));

camera.lookAt( camera.target );

哪个按预期工作 . 当用户点击并拖动鼠标时,相机会旋转跟随 . 现在我试图为机芯添加一些惯性,因此当用户松开鼠标左键时,相机会继续沿旋转方向旋转一小段时间 .

我已经尝试在拖动开始时跟踪鼠标位置的变化并拖动结束事件并尝试根据它来计算移动方向,但这似乎是一种复杂的方式

关于如何为相机控件添加惯性的任何建议?