2016-06-30 6 views
1

ich Model I/O bin zu entdecken, und ich möchte es benutzen Ecken zu erzeugen, um eine Kugel zu schaffen, so habe ich eine MDLMesh Objekt dieser Klasse Methode:Warum hat MDLMesh ungenannte Standardattribute?

let sphere = MDLMesh.newEllipsoidWithRadii(vector_float3(1, 1, 1), radialSegments: 300, verticalSegments: 300, geometryType: MDLGeometryType.KindTriangles, inwardNormals: false, hemisphere: false, allocator: MTKMeshBufferAllocator(device: device)) 

Dann, um zu verstehen, wie es funktioniert, möchte ich die Attribute meiner dieser MDLMesh inspizieren, damit ich sie auf diese Weise lese:

for attribute in sphere.vertexDescriptor.attributes { 
      if let vertexAttribute = attribute as? MDLVertexAttribute { 
       print("Attribute named : \(vertexAttribute.name), of format \(vertexAttribute.format.rawValue)") 
      } 
     } 

Hier ist die Ausgabe:

Attribut genannt: Position von Format 786.435
namens Attribut: normal, Format 786.435
Attribut mit dem Namen: textureCoordinate, Format 786.434
Attribut mit dem Namen:, von Attribut-Format 0 genannt:, Format 0
Attribut mit dem Namen:, von Format 0 Attribut mit dem Namen:, Format 0
Attribut mit dem Namen:, Format 0 Attributs mit dem Namen:, Format 0
Attribut mit dem Namen:, Format 0 Attributs mit dem Namen:, Format 0
Attribut mit dem Namen:, Format 0 Attribut mit dem Namen:, des Formats 0
Attribut namens:, des Formats 0 Attribut benannt:, der Form bei 0
Attribut mit dem Namen:, Format 0 Attribut mit dem Namen:, Format 0
Attribut mit dem Namen:, Format 0 Attribut mit dem Namen:, Format 0
Attribut mit dem Namen:, Format 0 Attribut mit dem Namen:, Format 0
Attribut mit dem Namen:, Format 0 Attributs mit dem Namen:, Format 0
Attribut mit dem Namen:, von Attribut-Format 0 genannt:, Format 0
Attribut mit dem Namen:, von Attribut-Format 0 genannt:, Format 0
Attribut mit dem Namen:, des Formats 0 Attribut mit dem Namen:, des Formats 0
Attributname:, des Formats 0 Attributname:, der Form bei 0

Ich glaube, Position und Normalen wurden automatisch generiert, aber warum gibt es eine Textur-Koordinate? Mit welchen Regeln wurden diese generiert? Vor allem, warum gibt es all diese unbenannten Attribute ungültigen Formats?

Danke

EDIT: Es scheint, dass es eine feste Anzahl von Attributen (31 in meinem Fall), denn selbst wenn ich hinzufügen neue, benutzerdefinierte Attribute (zum Beispiel durch Erzeugen von Normalen), die Attribute, die wurden ungültig mit diesen neuen Attributen ersetzt und die Gesamtzahl der Attribute ist noch 31.

Antwort

1

Es scheint, Apple konfiguriert die Standard vertexDescriptor erstellt mit diesen ersten 3 Attribute bereit für Sie zu verwenden. Sie sind auch die häufigsten Attribute, die man verwenden muss. Sie haben 28 weitere Attribut "Inhaber" für den Fall, dass Sie mehr als diese 3. Btw verwenden müssen, sind sie nicht von ungültigem Format, sie belegen gerade 0 Bytes derzeit, weil sie noch nicht erstellt und benannt wurden. Insgesamt gibt es 15 Arten von Vertex-Attributen, die Sie erstellen können, und Sie können bei Bedarf auch mehr vom gleichen Typ haben. Weitere Informationen zu name und format finden Sie im Dokument MDLVertexAttribute Class Reference.

+0

Oh ich sehe, danke! –