Как назначить видеоплеер на одну из определенных сцен ARKit? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть настройка ARkit, где одна сцена "FreemensScene" загружает 3D-объект поверх изображения для отслеживания.

Я попытался настроить вторую сцену "VideoScene", которая загружает видео поверх изображения отслеживания.

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

Где мне нужно добавить этот код и как его определить?

//
//  SecondViewController.swift
//  3DLABS
//
//  Created by gssarchitecture on 05/04/2019.
//  Copyright © 2019 3dlabs. All rights reserved.
//

import UIKit
import SceneKit
import ARKit


class ThirdViewController: UIViewController, ARSCNViewDelegate {

    @IBOutlet var sceneView: ARSCNView!

    var FreemensNode: SCNNode?
    var VideoNode: SCNNode?

    override func viewDidLoad() {
        super.viewDidLoad()

        // Set the view's delegate
        sceneView.delegate = self
        sceneView.autoenablesDefaultLighting = true


        let FreemensScene = SCNScene(named: "AR.scnassets/Freemens.scn")
        let VideoScene = SCNScene(named: "AR.scnassets/Video.scn")
        FreemensNode = FreemensScene?.rootNode
        VideoNode = VideoScene?.rootNode

    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let configuration = ARImageTrackingConfiguration()


        if let trackingImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main){

        configuration.trackingImages = trackingImages
        configuration.maximumNumberOfTrackedImages = 2

        }

        // Run the view's session
        sceneView.session.run(configuration)

    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        sceneView.session.pause()
    }

    // MARK: - ARSCNViewDelegate

    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {

        let node = SCNNode()

        if let imageAnchor = anchor as? ARImageAnchor {
            let size = imageAnchor.referenceImage.physicalSize
            let plane = SCNPlane(width: size.width, height: size.height)
            plane.firstMaterial?.diffuse.contents = UIColor(white: 1, alpha: 0.0)
            let planeNode = SCNNode(geometry: plane)
            planeNode.eulerAngles.x = -.pi / 2
            node.addChildNode(planeNode)



            var shapeNode: SCNNode?
            switch imageAnchor.referenceImage.name {
            case ArItem.Freemens.rawValue :
                shapeNode = FreemensNode

            case ArItem.Video.rawValue :
                shapeNode = VideoNode
            default:
                break

            }



            if imageAnchor.referenceImage.name == "Vuforia" {
                shapeNode = FreemensNode


            } else {
                shapeNode = VideoNode
            }

            guard let shape = shapeNode else { return nil}
            node.addChildNode(shape)
        }

        return node

    }

    enum ArItem : String {
        case Freemens = "Freemens"
        case Video = "Video"
    }




}
...