Как закрепить видео или плоскость над трехмерным объектом, чтобы привязка перемещалась в реальном времени с трехмерным объектом? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть 3d-объект, который при сканировании я бы хотел закрепить плоскостью или видео чуть выше 3d-объекта.

Когда я сканирую объект, плоскость показывает, но когда я перемещаю объект, закрепленная плоскость отстает и медленно перемещается в свое положение над объектом.

Я бы хотел, чтобы мой самолет двигался мгновенно, когда я перемещаю 3-й объект (фиксированный якорь).

Я не использую сторонние приложения и не собираюсь. Будем весьма благодарны за любые предложения, которые помогут решить мою проблему.

Использование xcode

Я пытался изменить свой код разными способами, но без радости.

             //
            //  ViewController.swift
            //  FlowerShop


             import UIKit
             import SceneKit
             import ARKit

          class ViewController: UIViewController, ARSCNViewDelegate 
             {

           @IBOutlet var sceneView: ARSCNView!

       override func viewDidLoad() {
          super.viewDidLoad()

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

    // Show statistics such as fps and timing information
    sceneView.showsStatistics = true


           }

    override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)

    // Create a session configuration
    let configuration = ARWorldTrackingConfiguration()




               // Object Detection
            configuration.detectionObjects = 

ARReferenceObject.referenceObjects (inGroupNamed: "cokecan", bundle: Bundle.main)!

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

     override func viewWillDisappear(_ animated: Bool) {
         super.viewWillDisappear(animated)

         // Pause the view's session
           sceneView.session.pause()
            }


      // MARK: - ARSCNViewDelegate

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

          let node = SCNNode()

    if let objectAnchor = anchor as? ARObjectAnchor {
        let plane = SCNPlane(width: 
CGFloat(objectAnchor.referenceObject.extent.x * 0.8), height: 
CGFloat(objectAnchor.referenceObject.extent.y * 0.5))

        plane.cornerRadius = plane.width / 8

        let spriteKitScene = SKScene(fileNamed: "ProductInfo")

        plane.firstMaterial?.diffuse.contents = spriteKitScene
        plane.firstMaterial?.isDoubleSided = true
        plane.firstMaterial?.diffuse.contentsTransform = 
   SCNMatrix4Translate(SCNMatrix4MakeScale(1, -1, 1), 0, 1, 0)

        let planeNode = SCNNode(geometry: plane)
        planeNode.position = 
     SCNVector3Make(objectAnchor.referenceObject.center.x, 
     objectAnchor.referenceObject.center.y + 0.15
            , objectAnchor.referenceObject.center.z)

            node.addChildNode(planeNode)

    }

         return node
}


func session(_ session: ARSession, didFailWithError error: Error) {
    // Present an error message to the user

}

func sessionWasInterrupted(_ session: ARSession) {
    // Inform the user that the session has been interrupted, for example, by presenting an overlay

}

func sessionInterruptionEnded(_ session: ARSession) {
    // Reset tracking and/or remove existing anchors if consistent tracking is required

}

}

Я бы хотел, чтобы плоскость или видео имели сплошную и фиксированную привязку, поэтому при перемещении трехмерного объекта плоскость или видео перемещается вместе с трехмерным объектом в реальном времени. Введите код здесь

...