Three.js - 如何旋转对象以查看一个点并朝向另一个点

Yon*_*ree 10 javascript 3d three.js

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

我有一个对象需要在另一个点(原点,在这种情况下为了简单起见)"指向",这可以通过该Object3D.lookAt(point)功能轻松完成.这很好地指向了物体的Z轴.

我还想looker围绕其Z轴旋转我的对象,称为其X轴通常指向另一个对象,refObj.我知道X轴不能直接指向,refObj除非该物体与原点形成直角.我想的X轴looker为位于由形成的平面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 = ??;
}
Run Code Online (Sandbox Code Playgroud)

用上面的例子创建了一个jsFiddle

Wes*_*ley 16

你真正要说的是你想要对象的y轴(对象的up-vector)与平面正交.

您所要做的就是up在调用之前设置对象的-vector lookAt( origin ).

up通过获取您知道位于平面中的两个向量的交叉积来计算所需的向量.

这是一个工作小提琴:http://jsfiddle.net/rQasN/43/

请注意,您的问题有两种解决方案,因为计算向量和它的否定都将与平面正交.

编辑:小提琴更新为three.js r.71