# Polygon File Format

Das Polygon File Format (kurz PLY oder auch bekannt als Stanford Triangle Format) ist ein Dateiformat zur Speicherung dreidimensionaler Daten, das ursprünglich zur Verwendung mit 3D-Scannern konzipiert wurde.
Das Format zeichnet sich durch eine einfache Beschreibung einzelner Objekte als Listen von Polygonen aus. Für die Vorder- und Rückseite eines Polygons können unterschiedliche Attribute definiert werden, wie zum Beispiel Farbe, Transparenz, Oberflächen-Normalen, Textur-Koordinaten oder Konfidenz-Werte gemessener Daten.
Eine PLY-Datei kann im ASCII-Format oder als Binärdatei gespeichert werden.

## Dateistruktur

Die Dateien beginnen mit einem Header, der die Elemente des Polygonnetzes und ihre Typen spezifiziert. Die auf den Header folgende Liste enthält Elemente wie Vertices, Dreiecke (Faces) und Kanten.
Sowohl in der ASCII- als auch in der Binär-Version der Datei besteht der Header immer aus ASCII-Zeichen; lediglich der numerische Teil der Datei wird unterschiedlich abgespeichert. Die erste Zeile des Headers besteht nur aus der Magischen Zahl:
Die zweite Zeile spezifiziert das Format der Datei und sollte einer der folgenden entsprechen:
Die Kennzeichnung 1.0 bezieht sich auf die Versionsnummer des verwendeten Standards. 1.0 ist allerdings die einzige derzeit verwendete Version.
Das Wort comment zu Beginn einer Zeile ermöglicht es, Kommentare einzufügen, alles Nachfolgende in der Zeile wird ignoriert:
Mit dem element Keyword beginnt die Beschreibung verwendeter Elemente, gefolgt von deren Anzahl.
Folgendes steht zum Beispiel in einer Datei, die 12 Vertices enthält, die jeweils als Zahlentripel aus (X,Y,Z) Floats definiert sind.
Weitere property-Zeilen eines Elements könnten außerdem noch andere Daten wie beispielsweise Farbwerte beschreiben. Das sieht dann zum Beispiel so aus:
Beachten Sie hierbei bitte, dass Farben typischerweise den Datentyp uchar (unsigned char, also Ganzzahlen mit dem Wertebereich von 0 bis 255) haben. Wenn Farben im Header erwähnt werden, enthält jede Zeile nicht nur das Zahlentripel (X,Y,Z) für die Vertexposition, sondern zusätzlich auch noch ein Zahlentripel für die Farben (R, G, B).
Für Datentypen bestehen zwei verschiedene Notationen, die wie oben als Skalare Variablen oder als Liste angegeben werden.
char, uchar, short, ushort, int, uint, float, double sind Datentypen, die für die Skalar-Notation verwendet werden können.
Für die Listen-Notation kann aus den rein numerischen Typen int8, uint8, int16, uint16, int32, uint32, float32, float64 gewählt werden.
Ein Objekt mit zehn Polygon Faces kann mit der Listen-Notation wie folgt beschrieben werden:
Mit dem Wort list wird der Beginn einer Liste signalisiert, erster Eintrag der Liste (in diesem Fall vom Type uchar) beinhaltet die Anzahl an Elementen der Liste. Alle folgenden Einträge sind vom Typ int.
Folgende Zeile schließt den Header ab und wird gefolgt vom eigentlichen Inhalt der Datei:

### Beispiel

Folgendes beschreibt einen einfachen Würfel in einer PLY-Datei im ASCII Format und stammt aus der originalen Dateistruktur Definition von Greg Turk.

## ASCII- oder Binär-Format

In der ASCII-Version des Formats werden Vertices und Faces jeweils in einer Zeile beschrieben, Zahlenwerte werden durch Leerzeichen getrennt. Im Binär-Format werden die numerischen Werte einfach nur kompakter zusammengefasst, durch den im Header spezifizierten endian und gegebene Datentypen der property-Attribute können die Werte so weiterhin einzeln interpretiert werden. Die property list-Notation für Polygone sieht für beide Versionen vor, dass die erste Zahl die Vertex-Anzahl des Polygons angibt und die darauf folgende Liste dann die Vertex-Indexe aufreiht.

## Entstehung

Das PLY-Format wurde Mitte der 1990er von Greg Turk und anderen unter der Leitung von Marc Levoy an der Stanford University entwickelt. Die grundlegende Struktur war inspiriert vom Wavefront-OBJ-Format, das aber nicht die gewünschte Flexibilität bot, diverse Zusatzinformationen oder Gruppierungen zu formulieren. Daraufhin wurden die property- und element-Keywords eingeführt, die die Beschreibung von Vertices, Polygonen, assoziierten Daten und anderen Gruppierungen generalisieren sollten.

## Verwandte Dateiformate

* OBJ – von Wavefront Technologies
* STL – Standard Triangulation/Tesselation Language
* OFF – Object File Format

## Wissenschaftliche Software

für unstrukturierte Dreiecksgitter im PLY-Format:
* GigaMesh Software Framework
* Mathematica

## Programmbibliotheken und Quelltexte

* PLY – Polygon File Format
* Sammlung von Tools zur Verarbeitung von PLY-Dateien (C-Code)
* rply – ANSI-C-Bibliothek zum Lesen und Schreiben von PLY-Dateien (MIT license)
* libply – C++-Bibliothek zum Lesen und Schreiben von PLY-Dateien (GNU license)
* C++-Bibliothek zum Lesen und Schreiben von PLY-Dateien (GPL 3.0 license)

## Datensammlungen

* The Stanford 3D Scanning Repository – Sammlung von verschiedenen 3D-Modellen im PLY-Format
* HeiCuBeDa – Sammlung von 1977 Keilschrifttafeln als 3D-Scans in hoher Auflösung zum bulk download im PLY-Format
* HeiCu3Da – Durchsuchbare Version von HeiCuBeDa mit Voransicht der Keilschrifttafeln und der Möglichkeit einzelne PLYs abzurufen