我正在发现Model I/O
并且我想用它来生成顶点来创建一个球体,所以我MDLMesh
使用这个类方法创建了一个对象:
let sphere = MDLMesh.newEllipsoidWithRadii(vector_float3(1, 1, 1), radialSegments: 300, verticalSegments: 300, geometryType: MDLGeometryType.KindTriangles, inwardNormals: false, hemisphere: false, allocator: MTKMeshBufferAllocator(device: device))
然后,为了了解它是如何工作的,我想检查我的这个 MDLMesh 的属性,所以我以这种方式阅读它们:
for attribute in sphere.vertexDescriptor.attributes {
if let vertexAttribute = attribute as? MDLVertexAttribute {
print("Attribute named : \(vertexAttribute.name), of format \(vertexAttribute.format.rawValue)")
}
}
这是输出:
属性命名:位置,格式 786435
属性命名:正常,格式 786435
属性命名:textureCoordinate,格式 786434
属性命名:,格式 0 属性命名:,格式 0
属性命名:,格式 0 属性命名:,格式格式 0
命名属性:,格式 0 属性命名:,格式 0
属性命名:,格式 0 属性命名:,格式 0
属性命名:,格式 0 属性命名:,格式 0
属性命名:,格式0 属性命名:,格式 0
属性命名:,格式 0 属性命名::,格式 0
属性命名::,格式 0 属性命名::,格式 0
属性命名: , 格式0 属性命名: , 格式0
属性命名: , 格式0 属性命名: , 格式0
属性命名: , 格式0 属性命名: , 格式0
属性命名: , 格式0 属性命名
属性 : , 格式 0 属性命名 : , 格式 0 属性命名 : , 格式 0
属性命名 : , 格式 0 属性命名 : , 格式 0
我相信位置和法线是自动生成的,但为什么会有纹理坐标?使用什么规则来生成这些?最重要的是,为什么会有所有这些无效格式的未命名属性?
谢谢
编辑:似乎有固定数量的属性(在我的情况下为 31 个),因为即使我添加新的自定义属性(例如通过生成法线),无效的属性也会被这些新属性和总数替换属性数仍然是 31。