Я помещаю изображение как узел в сцене. Я просто хочу показать это на каком-то изображении. Но Xcode размещает его вертикально только в центре referenceImage. Я пытался найти решение. Ничего не помогает Как я могу нанести логотип на изображение? Что я делаю не так?
Я также пытался преобразовать узел с помощью функций Vector3, Vector4 и .eulerAngles.x
. И я получил тот же результат.
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let imageAnchor = anchor as? ARImageAnchor else { return }
let placeholderImage = UIImage(named: "logo")
let geometry = SCNPlane(width: 0.3, height: 0.3)
let material = SCNMaterial()
material.diffuse.contents = placeholderImage
geometry.materials = [material]
let planeNode = SCNNode(geometry: geometry)
let (min, max) = planeNode.boundingBox
let size = SCNVector3Make(max.x - min.x, max.y - min.y, max.z - min.z)
let widthRatio = Float(imageAnchor.referenceImage.physicalSize.width)/size.x
let heightRatio = Float(imageAnchor.referenceImage.physicalSize.height)/size.z
guard let ratio = [widthRatio, heightRatio].min() else { return }
let finalRatio = ratio * 0.8
planeNode.transform = SCNMatrix4(imageAnchor.transform)
planeNode.eulerAngles.x = -.pi / 2
planeNode.scale = SCNVector3Make(0.001, 0.001, 0.001)
planeNode.eulerAngles = SCNVector3Make(-.pi/2, 0, 0);
sceneView.scene.rootNode.addChildNode(planeNode)
let appearanceAction = SCNAction.scale(to: CGFloat(finalRatio), duration: 0.4)
appearanceAction.timingMode = .easeOut
planeNode.runAction(appearanceAction)
self.planeNode = planeNode
self.imageNode = node
}
Ошибки отсутствуют. Проект выполняется, но логотип всегда расположен вертикально.