【发布时间】:2019-06-02 01:22:49
【问题描述】:
我做过一些 AR 图像跟踪应用和 AR 世界跟踪应用。
AR Image Tracking 用于识别从相机捕获的物理地图上的图像。
有没有什么办法可以让AR Image Tracking识别出基本上是SCNPlane材质的虚拟“图像”?
如果有人能给我一些指导或建议,我们将不胜感激。
(注意:对于这个项目,我在 ARWorldTrackingConfiguration 上使用检测图像)
【问题讨论】:
我做过一些 AR 图像跟踪应用和 AR 世界跟踪应用。
AR Image Tracking 用于识别从相机捕获的物理地图上的图像。
有没有什么办法可以让AR Image Tracking识别出基本上是SCNPlane材质的虚拟“图像”?
如果有人能给我一些指导或建议,我们将不胜感激。
(注意:对于这个项目,我在 ARWorldTrackingConfiguration 上使用检测图像)
【问题讨论】:
我认为可能是的,可以通过将内容图像(您想在地图中检测到)添加到 Assets.xcassets 中。然后使用此代码检测如下虚拟图像:
// 把你的图片名字放进去(withName: "namehere")
lazy var mapNode: SCNNode = {
let node = scene.rootNode.childNode(withName: "map", recursively: false)
return node
}()
// Now When detecting Images
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
DispatchQueue.main.async {
guard let imageAnchor = anchor as? ARImageAnchor,
let imageName = imageAnchor.referenceImage.name else { return }
// TODO: Comment out code
// let planeNode = self.getPlaneNode(withReferenceImage: imageAnchor.referenceImage)
// planeNode.opacity = 0.0
// planeNode.eulerAngles.x = -.pi / 2
// planeNode.runAction(self.fadeAction)
// node.addChildNode(planeNode)
// TODO: Overlay 3D Object
let overlayNode = self.getNode(withImageName: imageName)
overlayNode.opacity = 0
overlayNode.position.y = 0.2
overlayNode.runAction(self.fadeAndSpinAction)
node.addChildNode(overlayNode)
self.label.text = "Image detected: \"\(imageName)\""
}
}
func getPlaneNode(withReferenceImage image: ARReferenceImage) -> SCNNode {
let plane = SCNPlane(width: image.physicalSize.width,
height: image.physicalSize.height)
let node = SCNNode(geometry: plane)
return node
}
func getNode(withImageName name: String) -> SCNNode {
var node = SCNNode()
switch name {
case "map":
node = mapNode
default:
break
}
return node
}
}
【讨论】: