gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:04:44 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com