到目前为止,我已经能够下载Collada文件(dae)并将其显示在屏幕上。 现在,我试图以编程方式将图像放置在Normal属性中,这样前部纹理将获得不同的效果。
根据文件检查器,“常规”选项位于 材料->正常。
我试图通过材料更改“法线贴图”的内容,但没有成功。 这是我的代码不起作用。
/// Creating the Node
let node = SCNNode()
/// The dae file
let scene = SCNScene(named: "bluebag.dae")
let arryNode = scene?.rootNode.childNodes
/// Override the assets
for childNode in arryNode! {
if let geo = childNode.geometry {
for geoItem in geo.materials {
geoItem.normal.contents = UIImage(named:"fabric.jpg") /// This is not working
}
}
node.addChildNode(childNode)
}
我还尝试创建一个内部带有材质和法线贴图图像的新节点,并将其添加到前部纹理中,但是再次失败。 能否请任何人指出我如何向纹理添加法线贴图?我错过了什么吗?
答案 0 :(得分:0)
查看您的代码:
/// Creating the Node
let node = SCNNode()
/// The dae file
let scene = SCNScene(named: "bluebag.dae")
let arryNode = scene?.rootNode.childNodes // See Note 1
/// Override the assets
for childNode in arryNode! {
if let geo = childNode.geometry {
for geoItem in geo.materials {
geoItem.normal.contents = UIImage(named:"fabric.jpg") // See Note 2
}
}
node.addChildNode(childNode)
}
注释1 :您确定所有子节点都位于rootNode的第一级吗?
注意2::如果Assets.xcassets中包含fabric.jpg,则使用UIImage(named:"fabric")
尝试以下方法遍历节点层次结构:
scene.rootNode.enumerateChildNodes { (node, stop) in
if let geo = node.geometry {
for material in geo.materials {
material.normal.contents = UIImage(named: "fabric")
}
}
scnView.scene?.rootNode.addChildNode(node) // or something like this
}