SCNLookAtConstraint,指定节点如何查看目标节点?

时间:2015-01-19 18:20:09

标签: scenekit

我有一个文本节点。我告诉节点总是这样看相机节点:

let lookAt = SCNLookAtConstraint(target: cameraNode)
textNode.constraints = [lookAt]

在我应用该约束之前,文本如下所示:(见图片) enter image description here

如果我应用该约束,则节点看起来像在图像中一样翻转(见图)。 因此,文本始终保持该方向并正确查看相机节点,因此约束正在起作用。

enter image description here

我试图了解节点"看起来如何"但是在目标节点上。我显然希望文本在摄像机四处移动时保持在第一张图像中显示。

我尝试对文本应用旋转来纠正我在应用约束时所获得的行为但是没有效果。

那么,我怎样才能让文本看到另一个节点但不像第二张图像那样被翻转?

3 个答案:

答案 0 :(得分:7)

The documentation for SCNLookAtConstraint说明:

  

当SceneKit评估观察约束时,它更新受约束节点的transform属性,以便节点的负z轴指向约束的目标节点。

但是SCNText几何体是沿着 z轴向前创建的,所以你的约束系统需要以某种方式解释它。我建议使用专为此类情况设计的SCNBillboardConstraintIts documentation说:

  

SCNBillboardConstraint对象会自动调整节点的方向,以使其本地z轴始终指向当前用于渲染场景的pointOfView节点。

有了这个,你就不需要重新显示节点。

答案 1 :(得分:3)

“SCNBillboardConstraint对象自动调整节点的方向,使其局部z轴始终指向当前用于渲染场景的pointOfView节点。”

textNode.constraints = [SCNBillboardConstraint()]

答案 2 :(得分:0)

您还可以通过指定 localFront 属性的轴来修改lookAt约束:

let lookAtConstraint = SCNLookAtConstraint(target: distantNode)
lookAtConstraint.localFront = SCNVector3Make(0, 1, 0)
node.constraints = [lookAtConstraint]

上面的代码将通过 node 的Y轴将其指向 distantNode