【问题标题】:Three.js move object to point along some line & lookAtThree.js 将对象移动到沿某条线的点并查看
【发布时间】:2018-10-14 06:35:31
【问题描述】:

我有一个长方体(例如 THREE.CubeGeometry 1x1x10)。这是我想要完成的任务:

  1. 给定某个点,我想将长方体放置在距原点一定距离的位置,但要沿着原点和所述点形成的线

  2. 旋转长方体,使其面向原点

我尝试过使用

obj.lookAt(new THREE.Vector3(0, 0, 0));

但这会以这样一种方式旋转对象,使其侧面朝向原点,而不是其末端。

至于第一步(沿着那条线找到一个距离原点 N 个单位的点),我什至不知道从哪里开始。我所做的是用点对 vec 进行归一化,[我认为]本质上让我得到一条长度为 1 的线,从 (0, 0, 0) 指向该点。为了将该点移动到我想要的位置(距原点 N 距离),我可以相应地缩放该向量。不知道这是否有意义......


编辑

在回答其中一位说 obj.lookAt() 应该 工作的 cmets 时,这就是我得到的,以及我想让它做的事情:

在位置设置到某个点后如何绘制长方体,然后调用lookAt()

注意物体的侧面是看原点的(不是我想要的)

我想做的是让对象从它的末端看那个点(我想我离那个点还有一圈,但那是一圈我不知道如何计算)

【问题讨论】:

  • 在你的目标点的方向上创建一条射线,通过你想要的距离得到射线上的点。我没有使用three.js,但我猜它有一个射线对象,你的射线的方向是点 - 原点或相反。
  • 一个对象默认查找其局部正 z 轴。当您调用object.lookAt( scene.position ) 时,对象的局部 z 轴将指向原点。如果你的长方体是 1x1x10,它应该做你想做的事。
  • z 维度是立方体的长边吗?
  • @WestLangley 啊!当然。感谢您指出了这一点。问题是我将长方体声明为 1x10x1 而不是 1x1x10(顺序错误)。确实像一个魅力!

标签: javascript three.js geometry linear-algebra


【解决方案1】:

当您调用object.lookAt( 0, 0, 0 ) 时,对象的局部z 轴将指向原点。

所以,如果你的长方体是 1x1x10,长边平行于 z 轴,你应该得到你想要的结果。

three.js r.97

【讨论】:

  • 如果长边垂直于z轴怎么办? ://
  • @ManPersonson 在这种情况下,旋转几何体(不是网格),使其沿 z 轴定向。例如,geometry.rotateY( Math.PI / 2 );
猜你喜欢
  • 2014-06-25
  • 1970-01-01
  • 2016-03-16
  • 2018-03-20
  • 2014-09-19
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多