Получить имя эталонного изображения swift ARKit 1.5

avatar
Pietro Messineo
8 апреля 2018 в 09:01
619
1
0

Кто-нибудь знает, как я могу получить имя опорного изображения красного цвета с камеры в AR?

Я думаю, что Anchor считывает идентификатор и связывает его с эталонным изображением, которое возвращает имя и физический размер.

Я хочу иметь одну папку AR Resources, куда я могу помещать разные изображения, а затем, в зависимости от того, что камера распознает, я хочу отображать одну модель вместо другой.

Большое спасибо!

Источник

Ответы (1)

avatar
BlackMirrorz
8 апреля 2018 в 09:28
3

Объект ARReferenceImage имеет следующие свойства, к которым вы можете получить доступ:

var name: String?

Описательное имя для изображения.

var physicalSize: CGSize

Реальные размеры изображения в метрах.

Поэтому, чтобы получить имя эталонного изображения и другие свойства, вы можете использовать следующий обратный вызов delegate:

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

        //1. If Out Target Image Has Been Detected Than Get The Corresponding Anchor
        guard let currentImageAnchor = anchor as? ARImageAnchor else { return }

        //2. Get The Targets Name
        let name = currentImageAnchor.referenceImage.name!

        //3. Get The Targets Width & Height
        let width = currentImageAnchor.referenceImage.physicalSize.width
        let height = currentImageAnchor.referenceImage.physicalSize.height

        //4. Log The Reference Images Information
        print("""
            Image Name = \(name)
            Image Width = \(width)
            Image Height = \(height)
            """)
    }

Обратите внимание, что этот код предполагает, что ваши изображения имеют имя, заданное в ARResources Asset Folder, например:

enter image description here

Затем вы можете поместить логику в обратный вызов или вызвать другую функцию, которая добавляет SCNNode или SCNScene при преобразовании ARImageAnchor, например:

//1. Create An SCNNode
let nodeHolder = SCNNode()

//2. Determine Which ImageTarget Has Been Detected
if name == "ImageOne"{

    let nodeGeometry = SCNBox(width: 0.02, height: 0.02, length: 0.02, chamferRadius: 0)
    nodeGeometry.firstMaterial?.diffuse.contents = UIColor.cyan
    nodeHolder.geometry = nodeGeometry

}else if name == "ImageTwo"{

     let nodeGeometry = SCNSphere(radius: 0.02)
     nodeGeometry.firstMaterial?.diffuse.contents = UIColor.cyan
     nodeHolder.geometry = nodeGeometry
}

//3. Add The SCNNode At The Position Of The Anchor
nodeHolder.position = SCNVector3(currentImageAnchor.transform.columns.3.x,
                                         currentImageAnchor.transform.columns.3.y,
                                         currentImageAnchor.transform.columns.3.z)

//4. Add It To The Scene
augmentedRealityView?.scene.rootNode.addChildNode(nodeHolder)
Pietro Messineo
8 апреля 2018 в 10:03
0

Спасибо большое!! Супер ясно! Это то, что я искал.

BlackMirrorz
8 апреля 2018 в 10:37
1

Рад, что помогло :)