1

私は発見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 のままです。

4

1 に答える 1

1

Apple は、vertexDescriptorすぐに使用できる最初の 3 つの属性で作成されるようにデフォルトを設定したようです。これらは、使用する必要がある最も一般的な属性でもあります。これらの 3 つ以上を使用する必要がある場合に備えて、さらに 28 個の属性「ホルダー」があります。ところで、それらは無効な形式で0はありません。まだ作成および名前が付けられていないため、現在バイトを占有しているだけです。合計で 15 種類の頂点アトリビュートを作成でき、必要に応じて同じタイプをさらに追加することもできます。nameおよびの詳細についてはformatMDLVertexAttribute クラス リファレンスドキュメントを参照してください。

于 2016-06-30T18:17:01.077 に答える