我一直在寻找这个问题的答案,发现两个答案都是旧的或者没有三个相关的代码。
我想要发生的是将点击的点指向相机!
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,它几乎到了正确的位置,但在一定程度上,我在哪里出错?
答案 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/,这几乎就是你联系到的第一个答案的答案。然而它大致工作(点击稍微右 - >球体向左旋转等)但是有些东西是关闭的。我无法弄清楚为什么。