我当前正在处理一个场景,其中一个对象位于中心(0,0,0)处,另外6个对象围绕该场景运行。我在外部对象的后面和稍上方有一个摄像头,回头看向中心(camera.lookAt(0,0,0)等)。
我想单击一个对象,只是为了使摄像机弧形朝向并面对所单击的对象。我正在使用Quaternion.slerp来实现这一点,并且可以完成某些工作,但是当相机移动时,它会缓慢地漂移,然后慢慢聚焦在对象中心之外。
因此,如果我单击相机FOV左侧的对象,则该对象在向左摆动之前会向右漂移一点,反之亦然。
我找到了一些有关slerp运动的帮助,我希望能够对其进行简单调整:
How to animate the camera in three.js to look at an object?
设置
this._endQ = new Quaternion();
this._iniQ = new Quaternion().copy(this._camera.quaternion);
this._curQ = new Quaternion();
this._vec3 = new Vector3();
const euler = new Euler(this._cameraLookAtDestination.x, this._cameraLookAtDestination.y, this._cameraLookAtDestination.z);
this._endQ.setFromEuler(euler);
在渲染循环中
Quaternion.slerp(this._iniQ, this._endQ, this._curQ, pointInTime);
this._vec3.x = this._cameraLookAtDestination.x;
this._vec3.y = this._cameraLookAtDestination.y;
this._vec3.z = this._cameraLookAtDestination.z;
this._vec3.applyQuaternion(this._curQ);
this._camera.lookAt(this._vec3);
这是正常的slerp行为,还是我缺少什么?
编辑:
我还注意到,每次单击一个对象进行查看时,相机似乎都会重置其方向,然后旋转