ARKit 和 Vision – 如何将 SCNPlane 放置在找到的 QR 码上?
ARKit and Vision – How to place a SCNPlane on a found QR-Code?
通过 Vision
框架,我能够检测到二维码。接下来我想做的是使用 ARKit 将 SCNPlane 准确地放置在 QRCode 上。我写了下面的代码来找到 QRCode 在现实世界中的位置。但是 SCNPlane 一直添加在错误的地方。下面代码中的barcode变量是VNBarcodeObservation类型。
也许你们当中有人知道我做错了什么。
let rect = CGPoint(x: barcode.boundingBox.origin.x, y: barcode.boundingBox.origin.y)
let hitTestResults = sceneView.hitTest(rect, types: [.existingPlaneUsingExtent, .existingPlane])
if let hitResult = hitTestResults.first {
//TODO: change to width and height
let plane = SCNPlane(width: 0.1, height: 0.1)
let material = SCNMaterial()
material.diffuse.contents = UIColor.red
plane.materials = [material]
let node = SCNNode()
node.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
node.position = SCNVector3(hitResult.worldTransform.columns.3.x,
hitResult.worldTransform.columns.3.y,
hitResult.worldTransform.columns.3.z)
node.geometry = plane
sceneView.scene.rootNode.addChildNode(node)
}
编辑:
添加了当前情况的图片。红色平面添加在左上角。但是,这个平面必须准确添加到你的QRCode上。
使用中心点而不是原点对我有用:
let center2 = CGPoint(x: result.boundingBox.midX, y: result.boundingBox.midY)
let hitTestResults2 = frame.hitTest(center2, types: [.featurePoint/*, .estimatedHorizontalPlane, .existingPlane, .existingPlaneUsingExtent*/] )
通过 Vision
框架,我能够检测到二维码。接下来我想做的是使用 ARKit 将 SCNPlane 准确地放置在 QRCode 上。我写了下面的代码来找到 QRCode 在现实世界中的位置。但是 SCNPlane 一直添加在错误的地方。下面代码中的barcode变量是VNBarcodeObservation类型。
也许你们当中有人知道我做错了什么。
let rect = CGPoint(x: barcode.boundingBox.origin.x, y: barcode.boundingBox.origin.y)
let hitTestResults = sceneView.hitTest(rect, types: [.existingPlaneUsingExtent, .existingPlane])
if let hitResult = hitTestResults.first {
//TODO: change to width and height
let plane = SCNPlane(width: 0.1, height: 0.1)
let material = SCNMaterial()
material.diffuse.contents = UIColor.red
plane.materials = [material]
let node = SCNNode()
node.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
node.position = SCNVector3(hitResult.worldTransform.columns.3.x,
hitResult.worldTransform.columns.3.y,
hitResult.worldTransform.columns.3.z)
node.geometry = plane
sceneView.scene.rootNode.addChildNode(node)
}
编辑:
添加了当前情况的图片。红色平面添加在左上角。但是,这个平面必须准确添加到你的QRCode上。
使用中心点而不是原点对我有用:
let center2 = CGPoint(x: result.boundingBox.midX, y: result.boundingBox.midY)
let hitTestResults2 = frame.hitTest(center2, types: [.featurePoint/*, .estimatedHorizontalPlane, .existingPlane, .existingPlaneUsingExtent*/] )