【发布时间】:2016-03-19 22:37:11
【问题描述】:
我搜索了这个问题的答案,发现两个答案要么是旧的,要么没有三个相关代码。
我想要发生的事情是让点击的点指向相机!
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,它几乎是在正确的地方,但在某种程度上,我哪里错了?
【问题讨论】:
-
我认为这可以通过使用lookAt函数来完成(假设你的球体默认朝向是+z)。从球心向您单击的点的方向看。
-
那么在我看来,您的第二张照片按预期工作了吗?
-
您正在寻找一个可以返回从 A 方向到 B 方向的旋转变化的函数吗?我有一些可能有用的东西。但它不是严格意义上的三。
-
是的,这就是我在问题中的代码应该做的事情,它正在朝着正确的方向发展,但不够准确。我想使用四元数,以便我可以使用 slerp 制作动画。
标签: javascript three.js