ThreeJS-防止相机旋转使相机旋转

时间:2018-08-17 13:21:34

标签: three.js rotation quaternions

我当前正在处理一个场景,其中一个对象位于中心(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行为,还是我缺少什么?

编辑:

我还注意到,每次单击一个对象进行查看时,相机似乎都会重置其方向,然后旋转

0 个答案:

没有答案