【问题标题】:'Hide' plane node under trigger image on ARKit 2.0ARKit 2.0触发图像下的“隐藏”平面节点
【发布时间】:2018-06-20 09:28:25
【问题描述】:

我正在使用 ARKit 2.0 来检测触发图像并在其上放置平面和对象。我希望一个特定的对象从我的触发图像下方逐渐出现并将其自身定位到它的一侧。为此,我运行了一个动画来移动位置:

//Original Position
self.planeNode?.position = SCNVector3(0, -0.02, 0)

//New position
self.planeNode?.runAction(SCNAction.move(to: SCNVector3(0.08, -0.05, 0), duration: 0.5))

但是,触发图像并没有隐藏 planeNode,我仍然可以在它上面看到它,即使它在技术上位于下方。

我曾想过使用具有相同图像的 planeNode 来复制我的触发器,但用手或其他方式握住触发器时会显得很奇怪。

以下是该问题的一些图片:

【问题讨论】:

    标签: ios swift arkit ios12


    【解决方案1】:

    我找到了使用遮挡的解决方案!本质上,我在触发器顶部创建了一个平面,它像这样遮挡它后面的所有东西:

                //Set occlusion material
                let cardOcclusion = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
                let holdout = SCNMaterial()
                holdout.isDoubleSided = true
                holdout.diffuse.contents = CIColor.black
                holdout.colorBufferWriteMask = SCNColorMask(rawValue: 0)
                cardOcclusion.firstMaterial? = holdout
                let cardOcclusionNode = SCNNode()
                cardOcclusionNode.eulerAngles.x = -.pi / 2
                cardOcclusionNode.geometry = cardOcclusion
                node.addChildNode(cardOcclusionNode)
    

    【讨论】:

      【解决方案2】:

      您只需将 UiimageView object 放在代码下方的 viewObj 中即可。

      func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
              let node = SCNNode()
              if let imageAnchor = anchor as? ARImageAnchor {
                  let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
                  plane.firstMaterial?.diffuse.contents = UIColor(white: 1, alpha: 0.8)
                  let material = SCNMaterial()
                  material.diffuse.contents = viewObj
                  plane.materials = [material]
                  let planeNode = SCNNode(geometry: plane)
                  planeNode.eulerAngles.x = -.pi / 2
                  node.addChildNode(planeNode)
              }
              return node
          }
      

      【讨论】:

        猜你喜欢
        • 2018-05-18
        • 2022-01-08
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2019-01-01
        • 2012-12-17
        • 1970-01-01
        相关资源
        最近更新 更多