.obj 文件未加载所有子网格名称
Posted
技术标签:
【中文标题】.obj 文件未加载所有子网格名称【英文标题】:.obj file is not loading all the child mesh name 【发布时间】:2018-07-10 15:29:14 【问题描述】:在这里,我将 SceneKit 与 .obj 模型一起使用。我需要一些帮助才能使用 SceneKit.ModelIO 获取部件/子网格名称。
是否可以获得 .obj 的所有网格名称?请检查以下代码。
// Here Obj url
let url = "https://s3.ap-south-1.amazonaws.com/p9-platform/DAE/barware_s11624.obj"
let asset = MDLAsset(url: url as URL)
let scene = SCNScene(mdlAsset: asset)
let mesh = asset.object(at:0) as! MDLMesh
let vertexBuffer = mesh.vertexBuffers[0]
let descripter = mesh.vertexDescriptor
let submeshes = mesh.submeshes
for index in 0...(submeshes?.count)! - 1
let submesh0 = submeshes![index] as! MDLSubmesh
let singleMesh = MDLMesh(vertexBuffer: vertexBuffer, vertexCount: mesh.vertexCount, descriptor: descripter, submeshes: [submesh0])
let geometry = SCNGeometry(mdlMesh: singleMesh)
let Node = SCNNode(geometry: geometry)
scene.rootNode.addChildNode(Node)
print("scene ===>\(scene.rootNode)")
//Print scene Result in Xcode console
scene ===><SCNNode: 0x1c41ef300 | 7 children>
print("object.childNodes==>\(object.childNodes)")
//Print object.childNodes Result
这是 Xcode 控制台中的输出。
object.childNodes==>[<SCNNode: 0x1c41e9300 'default' | geometry=<SCNGeometry: 0x1c5339280 'default' | 6 elements> | no child>, <SCNNode: 0x1c41f5a00 | geometry=<SCNGeometry: 0x1c5339320 'Obj1'> | no child>, <SCNNode: 0x1c41f5b00 | geometry=<SCNGeometry: 0x1c53393c0 'Obj2'> | no child>, <SCNNode: 0x1c41f5d00 | geometry=<SCNGeometry: 0x1c5339460 'Obj3'> | no child>, <SCNNode: 0x1c41f5e00 | geometry=<SCNGeometry: 0x1c5339500 'Obj4'> | no child>, <SCNNode: 0x1c41f5f00 | geometry=<SCNGeometry: 0x1c53395a0 'Obj5'> | no child>, <SCNNode: 0x1c01f3c00 | geometry=<SCNGeometry: 0x1c0522260 'Obj6'> | no child>]
我想要同样的输出。
【问题讨论】:
【参考方案1】:与this question 一样,我的建议是使用Assimp 来加载文件,它应该加载所有数据并让您更好地控制如何处理它。
【讨论】:
以上是关于.obj 文件未加载所有子网格名称的主要内容,如果未能解决你的问题,请参考以下文章
Extjs - 在添加带有商店数据的网格面板时获取“类型错误:名称未定义”