如何下载ARImage(.SCN)文件以在ARSCNView中显示图像?

时间:2018-10-08 13:16:21

标签: ios swift xcode arkit

我正在尝试在应用程序中下载 ARImage(.scn文件)。并显示在 ARSCNView

下面的代码运行正常,它可以显示图像。图片也在下方

func addARObject(x: Float = 0, y: Float = 0, z: Float = -0.5) {

    let aRUrl : URL = URL(string :arImageUrl2)!
    do {
        let arScene = try SCNScene(url: aRUrl  , options: nil)
        let arNode = arScene.rootNode.childNode(withName: "chair", recursively: false)
        print("x,y,z",x,y,z)
        arNode?.position = SCNVector3(x,y,z)

        zAxis = z
        if isNodeAvailable {
            currentNode.position = SCNVector3(x,y,z)
        }else{
            isNodeAvailable = true
            currentNode = arNode
            sceneView.scene.rootNode.addChildNode(arNode!)
        }
    }
    catch {
        print("errrrrororororor")
    }

}

这是输出 enter image description here

但是椅子的颜色是红色,并且显示为白色。但实际上,没有表面。

如果我使用的是同一图像在“我的项目”文件夹中如果未下载,则椅子颜色为红色。 那么,有人可以向我解释我的代码或图像问题怎么解决吗?

下面的图像是我在项目中使用本地文件时的情况。

enter image description here

1 个答案:

答案 0 :(得分:0)

您创建一个父节点,然后可以将所有节点添加为子节点。

var nodes: [SCNNode] = getMyNodes()

var parentNode = SCNNode()
parentNode.name = "chair"

for node in nodes {
parentNode.addChildNodes(node)
}

您可以使用以下方式访问特定的孩子:

 parentNode.childNode(withName: nameOfChildNode, recursively: true)

如果要从场景文件导入:

 let scene = SCNScene(named: "myScene.scn")

  func getMyNodes() -> [SCNNode] {
  var nodes: [SCNNode] = [SCNNode]()
  for node in scene.rootNode.childNodes {
    nodes.append(node)
   }
   return nodes
 }

从父节点获取子节点后,可以向子节点添加纹理。

  let childOne = parentNode.childNode(withName: nameOfChildNode, recursively: true)

  childOne.?.firstMaterial?.diffuse.contents = UIColor.red