我设置了一个带有相机的场景,该相机保持在场景中心的固定点。用户可以通过单击(并按住)并拖动鼠标左键来平移相机。当用户释放鼠标左键时,摄像机的运动停止。我的场景基于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 );
哪个按预期工作。当用户点击并拖动鼠标时,相机会旋转跟随。现在我试图为机芯添加一些惯性,因此当用户松开鼠标左键时,相机会继续沿旋转方向旋转一小段时间。
我已经尝试在拖动开始时跟踪鼠标位置的变化并拖动结束事件并尝试根据它计算移动方向,但这似乎是一种令人费解的方式
有关如何为相机控件添加惯性的任何建议?