Three.js - 点击更改相机POV

时间:2017-11-10 22:37:35

标签: animation three.js camera tween.js

一些项目背景:

我有一个随机生成的Sprite粒子字段。摄像机位于0,0,0位置。粒子场位于摄像机周围。我使用Raycaster来选择点击的粒子并改变它的颜色。点击后,我希望相机专注于这个粒子。我还尝试使用Tween将粒子滑入视图。

我尝试了几种不同的方法,但没有一种方法可行。它们在这里描述:

  1. 一种传统的lookAt方法,它使用Raycaster从点击中获取交叉点。

    var raycaster = new THREE.Raycaster(); raycaster.setFromCamera(mouse,this.camera); var intersects = raycaster.intersectObjects(this.starfield.children); this.camera.lookAt(相交[0] .object.position)

  2. distanceTo方法,其中相机和相交坐标之间的距离用于移动相机。这只会沿z平面移动相机。它实际上不会改变它的POV。

  3. var cameraPosition = new THREE.Vector3(this.camera.position.x, this.camera.position.y, this.camera.position.z);
    
    var intersectPosition = new THREE.Vector3(intersects[0].object.position.x, intersects[0].object.position.y , intersects[0].object.position.z );
    
    var zoomPos = intersectPosition.distanceTo( cameraPosition );
    
    const newCameraPosition = cameraPosition.addVectors(this.camera.position, vector.setLength(zoomPos));
    
    1. 我通过tan和cos方程计算每个X,Y和Z轴的旋转角度。然后我尝试按这些程度旋转相机。我甚至尝试将它们转换为弧度,看看是否会对旋转方法产生影响。它没有:(
    2. 我不知道还能做什么。在这个阶段,只要我让这台相机工作,我就会完全接受不同的方法。我很困难, 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

而不是使用

intersects[0].object.position 

尝试使用

intersects[0].point

.point是该命中的世界空间位置。

.object是三角形所属的对象。 .object.position只是该对象的起源,在本例中是粒子系统。粒子位置本身与此原点有关。