【问题标题】:Apply ARCamera rotation transform to node (ARKit)将 ARCamera 旋转变换应用于节点 (ARKit)
【发布时间】:2020-02-07 10:50:52
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c arkit


    【解决方案1】:

    您可以使用SCNBillboardConstraint 让SCNNode 面对ARCamera

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

    目标 C:

    SCNBillboardConstraint *lookAtConstraint = [SCNBillboardConstraint billboardConstraint];
    
    node.constraints = @[lookAtConstraint];
    

    斯威夫特:

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

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

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

    目标 C:

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

    斯威夫特:

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

    【讨论】:

    • 感谢您的回复。我不希望 3d 节点不断地看着相机。我只是想沿几个轴抓取相机旋转并将其应用于节点。
    【解决方案2】:

    我用过

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

    当用户旋转 3D 头部扫描模型时,SceneKit 定向光节点始终从用户的视角发出光线。没有这个,定向光会一直锁定在脸部模型的前面,然后头部后面总是会出现暗影。

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 2018-06-26
      • 2017-12-31
      • 2017-12-20
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2018-03-25
      • 2018-08-01
      相关资源
      最近更新 更多