ARKIT定位模型

问题描述 投票:0回答:1

我在屏幕上放置模型时遇到了一些麻烦。模型出现了,但它出现在我的上方而不是我的前方。理想情况下,我希望模型出现在被点击的位置。请帮助!

此处此功能可从AWS成功下载模型:

 private func dowloadModel(){
        let url = URL(string: "url_string")!

        URLSession.shared.dataTask(with: url) { data, response, error in

            if let error = error{
                print(error.localizedDescription)
                return
            }

            if let data = data{
                print(data)

                let documentDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

                if let documentDirectory = documentDirectories.first{

                    let fileURL = documentDirectory.appendingPathComponent("Food.scn")
                    let dataNS : NSData? = data as NSData

                    try! dataNS?.write(to: fileURL, options: .atomic)

                    print("Saved!")
                }
            }

        }.resume()
    }

这里将模型渲染到屏幕上:

private func registerGestureRecogniser(){
        print("Tapped")
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        self.sceneView.addGestureRecognizer(tapGestureRecognizer)
    }

这里是点击的功能:

 @objc func handleTap(gesture: UITapGestureRecognizer) {

        let documentDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

        if let documentDirectory = documentDirectories.first{
            let fileURL = documentDirectory.appendingPathComponent("Food.scn")

            do{
                let scene = try SCNScene(url: fileURL, options: nil)
                let node = scene.rootNode.childNode(withName: "Burger", recursively: true)!

                node.position = SCNVector3Make(0, 0, 0);

                self.sceneView.scene.rootNode.addChildNode(node)
            }
            catch{
                print(error)
            }

        }
    }

我也收到错误:

Error: Failed to load <C3DImage
ios swift scenekit arkit
1个回答
0
投票

执行时

node.position = SCNVector3Make(0, 0, 0);
self.sceneView.scene.rootNode.addChildNode(node)

您将模型节点放置在场景的rootNode上,当场景开始时,其位置由ARKit确定。

[如果您希望模型出现在相机的前面,则需要获取相机变换(session.currentFrame?.camera.transform),修改-z组件,并将其设置为节点的位置。或者,如果要将模型放置在曲面上,请进行光线投射,然后将raycastResult simdWorldPosition用作节点的simdWorldPosition

© www.soinside.com 2019 - 2024. All rights reserved.