Three.js 如何将相机动态观察/缩放到贴花/光线投射?

Three.js 如何将相机动态观察/缩放到贴花/光线投射?,three.js,Three.js,我有(归功于@Mugen87)-你可以看到贴花被添加到贴花数组中,我添加了一个从贴花创建列表的函数(添加贴花,你会看到它出现在左上角)-我想知道在选择一个贴花时如何将相机指向指针的准确位置,因此,假设我在头部背面添加了贴花,我想不需要手动旋转就可以返回到它,这样我就可以单击它的名称,并获得正确的位置。 我猜这种方法还包括保存交叉点,然后设置相机位置……类似于这样: click on decal name function : //intersectionaArr - store interse

我有(归功于@Mugen87)-你可以看到贴花被添加到贴花数组中,我添加了一个从贴花创建列表的函数(添加贴花,你会看到它出现在左上角)-我想知道在选择一个贴花时如何将相机指向指针的准确位置,因此,假设我在头部背面添加了贴花,我想不需要手动旋转就可以返回到它,这样我就可以单击它的名称,并获得正确的位置。 我猜这种方法还包括保存交叉点,然后设置相机位置……类似于这样:

click on decal name function : 
//intersectionaArr - store intersections
camera.position.set(intersectionaArr[index of the decal].normal);
camera.lookAt(intersectionaArr[index of the decal].point);
camera.updateProjectionMatrix ();

由于已经具有交点的位置以及相应曲面法线的方向,因此可以执行以下操作来计算相机的位置:

const normal=new-THREE.Vector3(0,0,1).applyEuler(方向);
const camPosition=new THREE.Vector3().copy(position).add(normal.multilyscalar(50));
因此,我们的想法是通过从交点开始,沿着曲面法线移动一定距离来计算新的摄影机位置。现在是50个世界单位

然后,可以将摄影机位置和交点存储在列表元素中,并在事件侦听器中使用它来更改摄影机的位置和方向

更新小提琴: