我正在尝试在应用程序中下载 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")
}
}
但是椅子的颜色是红色,并且显示为白色。但实际上,没有表面。
如果我使用的是同一图像在“我的项目”文件夹中如果未下载,则椅子颜色为红色。 那么,有人可以向我解释我的代码或图像问题怎么解决吗?
下面的图像是我在项目中使用本地文件时的情况。
答案 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