javascript - Three.js - 如何旋转对象以注视一个点并朝向另一个点

标签 javascript 3d three.js

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

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

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

diagram of problem

进行旋转的最简单方法似乎是修改 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 with the example diagramed above

最佳答案

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

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

您可以通过对平面中已知的两个向量进行叉积来计算所需的 up 向量。

three.js r.143

关于javascript - Three.js - 如何旋转对象以注视一个点并朝向另一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250208/

相关文章:

javascript - Three.js .png 图像呈现白色,而不是应有的样子

3d - 两个 9 自由度边界框的真实 3D 并交 (IoU) 的计算/实现

javascript - 从 Blender 导出到三个带有纹理的 js

javascript - React DropzoneComponent 在上传之前在本地打开/修改文件

Java 3D游戏: Door opens too fast

javascript - 使用 GWT JSNI native 方法从 Chartis.js 实现示例折线图时出现问题

javascript - 三个 JS 从 matrixWorld 获取(世界)旋转

javascript - 在预定义 Material 中混合纹理

javascript - 如果选中复选框如何调用函数,如果未选中如何从附加列表中删除

每分钟数据的javascript图表库