可以使用ARAnchor中的ARPlaneAnchor和ARImageAnchor来选择真实世界的平面或图像,将虚拟对象绑定到它们上面。
以下是绑定到平面的示例代码:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
let plane = SCNPlane(width: CGFloat(planeAnchor.extent.x), height: CGFloat(planeAnchor.extent.z))
let planeNode = SCNNode(geometry: plane)
planeNode.position = SCNVector3Make(planeAnchor.center.x, 0, planeAnchor.center.z)
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
let sphere = SCNSphere(radius: 0.1)
let sphereNode = SCNNode(geometry: sphere)
sphereNode.position = SCNVector3Make(planeAnchor.center.x, 0.1, planeAnchor.center.z)
node.addChildNode(sphereNode)
}
以上代码在检测到ARPlaneAnchor时,在场景中添加一个平面节点和一个球形节点。可以根据需求添加更多节点和虚拟对象。
以下是绑定到图像的示例代码:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let imageAnchor = anchor as? ARImageAnchor else { return }
let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
plane.firstMaterial?.diffuse.contents = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
let sphere = SCNSphere(radius: 0.1)
let sphereNode = SCNNode(geometry: sphere)
sphere
上一篇:ARKit重置会话时存在内存泄漏
下一篇:ARKit追踪 - 偏移手机移动