我认为你需要的是一个动画,有很多动画库,比如anime.js和tween.js。由于您在翻译后已经抓住了位置,您可以制作动画来平滑您的翻译。这是一个带有 tween.js 的 sn-p:
var tween2 = new TWEEN.Tween(camera.position)
.to({
x : target.position.x,
y : target.position.y,
z : target.position.z
} , 1000)
.easing(TWEEN.Easing.Linear.None)
.start();
如果您想找到相机中心的框。我们还需要改变相机的旋转。这是一种使用矩阵计算目标旋转的方法。
var rotation_matrix = new THREE.Matrix4();
rotation_matrix.lookAt(target_position,target_box.position,camera.up);
var target_rotation = new THREE.Euler(0,0,0,"XYZ");
target_rotation.setFromRotationMatrix(rotation_matrix);
//now, the target_rotation would be the rotation after translating.
然后,你可以用同样的方法制作动画来改变旋转。
顺便说一句,似乎在 100000 颗星中他们最终会切换相机。