将ARCamera旋转变换应用于节点(ARKit)

时间:2018-03-07 11:55:54

标签: ios objective-c arkit

我想将ARCamera的旋转应用到3D节点,以便节点始终面向摄像机。如何在Objective-C中实现此代码?

2 个答案:

答案 0 :(得分:1)

您可以使用ARCamera让SCNNode面向SCNBillboardConstraint

  

SCNBillboardConstraint对象自动调整节点的方向,使其局部z轴始终指向当前用于渲染场景的pointOfView节点。例如,您可以使用广告牌约束来使用二维精灵图像而不是三维几何图形高效渲染场景的一部分 - 通过将精灵映射到受广告牌约束影响的平面上,精灵保持其相对于查看者的方向。要将约束附加到SCNNode对象,请使用其约束属性。

目标C:

SCNBillboardConstraint *lookAtConstraint = [SCNBillboardConstraint billboardConstraint];

node.constraints = @[lookAtConstraint];

<强>夫特:

let lookAtConstraint = SCNBillboardConstraint()
node.constraints = [lookAtConstraint]

如果您希望SCNNode面向另一个节点,那么您可以使用SCNLookAtConstraint

  

例如,您可以使用观察约束来确保相机或聚光灯始终跟随游戏角色的移动。要将约束附加到SCNNode对象,请使用其constraints属性。   节点指向其局部坐标系的负z轴方向。此轴定义包含摄像机的节点的视图方向以及包含聚光灯或方向灯的节点的照明方向,以及节点的几何和子节点的方向。当Scene Kit评估一个look-at约束时,它会更新受约束节点的transform属性,以便节点的负z轴指向约束的目标节点。

目标C:

SCNLookAtConstraint * lookAtNode = [SCNLookAtConstraint lookAtConstraintWithTarget:secondNode];
fistNode.constraints = @[lookAtNode];

<强>夫特:

 let lookAtConstraint = SCNLookAtConstraint(target: secondNode)
 firstNode.constraints = [lookAtConstraint]

答案 1 :(得分:0)

我用过

let lookAtConstraint = SCNBillboardConstraint()
node.constraints = [lookAtConstraint]

当用户旋转3D头部扫描模型时,SceneKit定向光节点始终从用户的角度照射光。如果没有此设置,定向光将保持锁定在面部模型的前面,然后在头部的背面始终存在暗影。