【发布时间】:2018-01-12 00:58:02
【问题描述】:
我正在尝试使用从文件中解析的自定义数据创建 MDLMesh。该文件仅包含顶点位置和三角形索引;我将它们提取到两个 Swift Data 对象中,float3 格式用于顶点,uint32 格式用于索引。
我的问题是我的 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:70657] * 终止 应用程序由于未捕获的异常 'NSRangeException',原因:'* -[__NSArrayM objectAtIndexedSubscript:]: 索引 1 越界 [0 .. 0]'
【问题讨论】:
标签: ios swift scenekit metal arkit