【发布时间】:2018-10-14 06:35:31
【问题描述】:
我有一个长方体(例如 THREE.CubeGeometry 1x1x10)。这是我想要完成的任务:
给定某个点,我想将长方体放置在距原点一定距离的位置,但要沿着原点和所述点形成的线
旋转长方体,使其面向原点
我尝试过使用
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