SCNLookAtConstraint在做什么?我想尝试使用向量重新创建此内容。
最佳答案
我认为一旦有了两个方向矢量,就可以用叉积和点积完成。
默认情况下,节点指向其局部坐标系的负z轴方向。
我们感兴趣的另一个方向是从外观的节点到另一个节点,即外观局部坐标系的节点。您可以使用convertPosition:fromNode:
或convertPosition:toNode:
。
如果尚未完成,请对两个方向向量进行归一化。
对于局部坐标系中的两个方向,两者之间的叉积给出了一个矢量,该矢量与可以在两个方向之间形成的平面正交。该向量是垂直于该平面的表面。围绕该法线的任何旋转将成为保留在平面中的另一个向量。
由于两个方向均已归一化,因此两个点的乘积应为cos(ϴ)
,其中ϴ是两个之间的夹角。
将第一个向量(指向负z轴方向的向量)围绕该平面的法线旋转此角度,应使其指向与第二个向量相同的方向(一个向量指向另一个节点) 。
那应该是对两个向量完成的方式(或者至少是这样做的一种方式)。
要对节点执行此操作,可以将该角度绕该轴的旋转设置为正在寻找的节点。这将旋转该节点,以便其局部负z轴(其寻找的方向)将指向另一个节点。
在3D Graphics with Scene Kit的章节之一中,我有一个非常相似的示例,其中节点旋转以指向球形表面的正外。您可以查看sample code来了解如何解决。