我试图在跟踪(参考)图像旁边的屏幕上放置一个虚拟 2D 图像。为此,我在跟踪参考图像后使用下面的代码,创建一个类似于屏幕上图像的平面,然后用简单的基本数学计算图像节点的位置。显然太简单了,因为结果不是很好。
我相信应该有更好的方法,但我是 ARKit 的新手,我还没有找到它,可以使用一些帮助。谢谢。
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
let node = SCNNode()
if let imageAnchor = anchor as? ARImageAnchor {
if let name = imageAnchor.name {
print("Image name: \(name)")
}
// Create a plane to visualize the initial position of the detected image.
let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width,
height: imageAnchor.referenceImage.physicalSize.height)
let planeNode = SCNNode(geometry: plane)
planeNode.opacity = 0.25
planeNode.eulerAngles.x = -.pi / 2
let imagePlane = SCNPlane(width: 0.1, height: 0.1)
imagePlane.firstMaterial?.diffuse.contents = UIImage(named: "image")
let imageNode = SCNNode(geometry: imagePlane)
imageNode.eulerAngles.x = -.pi / 2
let x = Float(-1 * (plane.width/2 + imagePlane.width/2))
let y = Float(-1 * (plane.height/2 + imagePlane.height/2))
imageNode.position = SCNVector3Make(Float(x), Float(y), 0)
node.addChildNode(imageNode)
}
return node
}
以下是不满意的结果:
编辑:这里看起来有什么问题?图像应位于左侧跟踪图像(大图像)的右侧,接触跟踪图像的左侧。问题也是实现这一点的方法,我用近似数学计算完成了这个糟糕的结果,我想有一种方法可以使用跟踪图像平面的变换将另一张图像放在一边。