Я пытаюсь разместить виртуальное 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
}
Вот неудовлетворительный результат:
РЕДАКТИРОВАТЬ: Что выглядит здесь неправильно?Изображение должно оставаться прямо рядом с отслеживаемым изображением (большим) слева, касаясь левой стороны отслеживаемого изображения.И проблема заключается также в способе достижения этого, я добился этого плохого результата с помощью приблизительного математического вычисления, я полагаю, что есть способ использовать преобразование плоскости отслеживаемого изображения, чтобы расположить другое изображение на стороне.