旋转一个球体,使点击的点向矢量方向

时间:2015-12-14 12:34:16

标签: javascript three.js

我一直在寻找这个问题的答案,发现两个答案都是旧的或者没有三个相关的代码。

questionquestion

我想要发生的是将点击的点指向相机!

if (intersects.length > 0) {
    var point = intersects[0].point;
    //console.log(point);

    var a = new THREE.Vector3(0,0,1);
    var b = point.normalize();

    var rotationAxis = new THREE.Vector3(0, 0, 0);
    rotationAxis.crossVectors(b, a);
    var dot = a.dot(b);
    var angle = Math.acos(dot);

    var quaternion = new THREE.Quaternion();
    var dest = quaternion.setFromAxisAngle(rotationAxis, angle);
    sphere.setRotationFromQuaternion(dest);
}

更新

我一直试图将数学从第一个答案转换为threejs,它几乎到了正确的位置,但在一定程度上,我在哪里出错?

UPDATED JSFIDDLE HERE

初始位置 - 0,0,1 initial

点击一个点 enter image description here

1 个答案:

答案 0 :(得分:1)

我认为您需要的是找到一个旋转,将您从中心到点击点的方向转到从中心到相机的方向。这里有一个实现:Finding quaternion representing the rotation from one vector to another

    var z = new THREE.Vector3(0, 0, 1);             
    var point = continent.position.clone().normalize();
    earthContainer.localToWorld(point.clone()));

    var q = new THREE.Quaternion();
    q.setFromUnitVectors(point, z);
    earthContainer.setRotationFromQuaternion(q);

事实证明,三个js确实将其实现为q.setFromUnitVectors(u,v);.我更新了你的小提琴http://jsfiddle.net/6hfxng8n/4/,这几乎就是你联系到的第一个答案的答案。然而它大致工作(点击稍微右 - >球体向左旋转等)但是有些东西是关闭的。我无法弄清楚为什么。