ios - 从自定义数据建模 I/O 网格

标签 ios swift scenekit metal arkit

我正在尝试根据我从文件中解析的自定义数据创建 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]

你看到什么不对了吗?或者可能只是我的数据不正确?
谢谢

注意:请注意 indexCountvertexCount 都是正确的,即使它们的定义在没有更多上下文的情况下看起来很奇怪 :)

编辑:尝试制作法线时:

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

这是我得到的错误:

2017-08-04 09:39:24.078436+0200 MyAppName[506:70657] * Terminating app due to uncaught exception 'NSRangeException', reason: '* -[__NSArrayM objectAtIndexedSubscript:]: index 1 beyond bounds [0 .. 0]'

最佳答案

您应该从 VertexDescriptor 中删除布局:

这些行:

let layout = MDLVertexBufferLayout(stride: MemoryLayout<float3>.stride)
vertexDescriptor.layouts = [layout]

并在设置 VertexDescriptor 的末尾添加这些行:

vertexDescriptor.setPackedOffsets()
vertexDescriptor.setPackedStrides()

关于ios - 从自定义数据建模 I/O 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45500838/

相关文章:

ios - SceneKit NSNode 拆分部分

ios - 通过自定义 UITableViewCell 上的 UISwipeGestureRecognizer 更新 CoreData?

ios - 将标题 View 添加到 WKWebView ScrollView

ios - 用户界面测试 : Two elements w/same accessibilityTitle

swift - SceneKit SCNPhysics车辆车轮指向车辆中心

ios - [Swift]加载运行时下载的 scn 文件时为 nil

ios - Obj-c - 使用更新的 NSMutableArray 重新加载 tableView

ios - Hashable == 方法无法快速检测两个对象之间的差异

ios - Google Plus 按钮在 Swift iOS 中不起作用

swift - RealityKit 和 ARKit 的挑战