12

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

我有一个对象需要“指向”另一个点(为简单起见,在本例中为原点),这可以通过该Object3D.lookAt(point)函数轻松完成。这将对象的 Z 轴很好地指向该点。

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

问题示意图

进行旋转的最简单方法似乎是 modify 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 = ??;
}

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

4

1 回答 1

19

您真正要说的是您希望对象的 y 轴(对象的up-vector)与平面正交。

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

up您通过取两个已知位于平面上的向量的叉积来计算所需的向量。

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

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

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

于 2013-01-10T04:51:19.297 回答