2017-08-04 34 views
1

我想从我自己的自定义数据创建一个MDLMesh,我从文件中解析出来。该文件只包含顶点位置和三角形索引;我将它们抽取为两个Swift Data对象,float3格式的顶点和uint32格式的索引。来自自定义数据的模型I/O网格

我的问题是,我的MDLMesh似乎不能正常工作,因为我无法将其导入到SceneKit(生成的SCNGeometry看起来像“空”),也没有从它创建法线(崩溃)。

现在,这里是MDLMesh代码:

let mesh = MDLMesh() 
     mesh.vertexBuffers = [MDLMeshBufferData(type: .vertex, data: vertexData)] 
     mesh.vertexCount = floats.count/3 
     let vertexDescriptor = MDLVertexDescriptor() 
     let attribute = MDLVertexAttribute(name: MDLVertexAttributePosition, format: .float3, offset: 0, bufferIndex: 0) 
     let layout = MDLVertexBufferLayout(stride: MemoryLayout<float3>.stride) 
     vertexDescriptor.attributes = [attribute] 
     vertexDescriptor.layouts = [layout] 

然后,我创建一个子网(描述三角形):

let submesh = MDLSubmesh(indexBuffer: MDLMeshBufferData(type: MDLMeshBufferType.index, data: indexData), 
      indexCount: uint32Indexes.count-uint32Indexes.count/4, 
      indexType: .uint32, 
      geometryType: .triangles, 
      material: nil) 

mesh.submeshes = [submesh] 

你看到什么了?或者只是说我的数据不正确?
谢谢

注:请注意,indexCountvertexCount都是对的,甚至强硬的定义似乎不可思议没有更多的背景:)

编辑:当试图使法线:

mesh.addNormals(withAttributeNamed: MDLVertexAttributeNormal, creaseThreshold: 0) 

这里是我得到的错误:

2017-08-04 09:39:24.078436 + 0200 MyAppName [506:706 57] *终止 应用由于未捕获的异常 'NSRangeException',原因: '* - [__ NSArrayM objectAtIndexedSubscript:]:索引1超出范围[0 .. 0]'

回答

0

Apple documentation有关此方法的状态:“在不包含顶点位置数据的网格上调用此方法会引发异常。”,我相信这正是问题所在:您的vertexData似乎没有任何元素。

+0

我现在应该添加一个答案,现在我解决了我的问题!这个问题显然是我在添加说明之前提供了数据,所以当我添加数据时,所有内容都被默认的描述值取代! –