独立于场景中的点选方法,对于“旋转带相机”的意思有几种理解。
我想,你想顺便旋转相机,使选定的点位于屏幕的中心。
这很简单:
camera.lookAt(your_point_in_scene);
你可以做的更复杂。首先,找到当前的指向向量。默认情况下,相机朝Vector(0,0,1) 方向看。当我们以与相机相同的旋转方式旋转它时,我们将拥有相机方向:
var vec = new THREE.Vector3(0,0,1);
vec.applyQuaternion(camera.rotation._quaternion);
现在我们必须确定旋转相机的角度和旋转轴。
旋转轴可以作为相机方向和从相机到对象的矢量的叉积来找到。可以从点积中提取天使:
var object_dir = object_world_point.clone().sub(camera.position);
var axis = vec.clone().crossProduct(object_dir);
var angle = Math.acos( vec.clone().dot(object_dir) / vec.length() / object_dir.length());
有了角度和轴,我们可以旋转相机:
camera.rotateOnAxis(axis, angle);
或者,如果你想让它平滑:
// before animation started
var total_rotation = 0,
rotateon,
avel = 0.01; // 0.01 radian per second
if(total_rotation < angle){
rotateon = avel * time_delta;
camera.rotateOnAxis(axis, angle);
total_rotation += rotateon;
}