我想从我自己的自定义数据创建一个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]
你看到什么了?或者只是说我的数据不正确?
谢谢
注:请注意,indexCount
和vertexCount
都是对的,甚至强硬的定义似乎不可思议没有更多的背景:)
编辑:当试图使法线:
mesh.addNormals(withAttributeNamed: MDLVertexAttributeNormal, creaseThreshold: 0)
这里是我得到的错误:
2017-08-04 09:39:24.078436 + 0200 MyAppName [506:706 57] *终止 应用由于未捕获的异常 'NSRangeException',原因: '* - [__ NSArrayM objectAtIndexedSubscript:]:索引1超出范围[0 .. 0]'
我现在应该添加一个答案,现在我解决了我的问题!这个问题显然是我在添加说明之前提供了数据,所以当我添加数据时,所有内容都被默认的描述值取代! –