私は発見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)")
}
}
出力は次のとおりです。
属性名: position、形式 786435
属性名: normal、形式 786435
属性名: textureCoordinate、形式 786434
属性名: 、形式 0 属性名: 、形式 0
属性名: 、形式 0 属性名: 、 of形式 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 のままです。