Javascript Three.js-如何旋转对象以观察一个点并朝向另一个点

Javascript Three.js-如何旋转对象以观察一个点并朝向另一个点,javascript,3d,three.js,Javascript,3d,Three.js,一般来说,我对three.js和3d编程都是新手,所以这似乎是一个非常简单的问题。理想情况下,我希望答案能帮助我理解基本原则 我有一个对象需要“指向”另一个点(为了简单起见,这里是原点),这可以通过Object3D.lookAt(point)函数轻松完成。这将使对象的Z轴精确地指向该点 我还想围绕Z轴旋转名为looker的对象,使其X轴通常指向另一个对象refObj。我知道X轴不能直接指向REOBJ,除非该对象与原点成直角。我希望looker的X轴位于由origin、refObj和looker创

一般来说,我对three.js和3d编程都是新手,所以这似乎是一个非常简单的问题。理想情况下,我希望答案能帮助我理解基本原则

我有一个对象需要“指向”另一个点(为了简单起见,这里是原点),这可以通过
Object3D.lookAt(point)
函数轻松完成。这将使对象的Z轴精确地指向该点

我还想围绕Z轴旋转名为
looker
的对象,使其X轴通常指向另一个对象
refObj
。我知道X轴不能直接指向
REOBJ
,除非该对象与原点成直角。我希望
looker
的X轴位于由
origin
refObj
looker
创建的平面上,如下图所示:

进行旋转的最简单方法似乎是修改
looker.rotation.z
,但我不知道如何计算该值

一般来说,我想要一个扩展版的
lookAt
函数,它采用第二个坐标,X轴将指向该坐标。大概是这样的:

function lookAtAndOrient(objectToAdjust, pointToLookAt, pointToOrientXTowards)
{
  // First we look at the pointToLookAt
  objectToAdjust.lookAt(pointToLookAt);

  // Then we rotate the object
  objectToAdjust.rotation.z = ??;
}

我已经创建了一个

你真正想说的是你希望对象的y轴(对象的
向上
-向量)与平面正交

在调用
lookAt(origin)
之前,只需设置对象的
up
-向量

通过取平面上已知的两个向量的叉积,计算所需的
up
向量

这是一把小提琴:

请注意,您的问题有两种解决方案,因为计算向量及其求反都与平面正交

编辑:fiddle更新为three.js r.71