Τι είναι ένα αρχείο PLY;
Το PLY, Polygon File Format, αντιπροσωπεύει τη μορφή αρχείου 3D που αποθηκεύει γραφικά αντικείμενα που περιγράφονται ως μια συλλογή πολυγώνων. Ο σκοπός αυτής της μορφής αρχείου ήταν να δημιουργήσει έναν απλό και εύκολο τύπο αρχείου που να είναι αρκετά γενικός ώστε να είναι χρήσιμος για ένα ευρύ φάσμα μοντέλων. Η μορφή αρχείου PLY διατίθεται σε μορφή ASCII καθώς και σε δυαδική μορφή για συμπαγή αποθήκευση και για γρήγορη αποθήκευση και φόρτωση. Η μορφή αρχείου χρησιμοποιείται από διαφορετικές εφαρμογές που παρέχουν υποστήριξη για ανάγνωση τρισδιάστατων αρχείων.
Τα αντικείμενα σε μορφή PLY περιγράφονται από μια συλλογή κορυφών, όψεων και άλλων στοιχείων, μαζί με ιδιότητες όπως το χρώμα και την κανονική κατεύθυνση που μπορούν να προσαρτηθούν σε αυτά τα στοιχεία. Άλλες ιδιότητες που μπορούν επίσης να αποθηκευτούν με το αντικείμενο περιλαμβάνουν:
- Κανονικές επιφάνειες
- συντεταγμένες υφής
- διαφάνεια
- Εμπιστοσύνη δεδομένων εύρους
- ιδιότητες για το μπροστινό και το πίσω μέρος ενός πολυγώνου
Ένα αντικείμενο που αντιπροσωπεύεται με μορφή PLY μπορεί να είναι το αποτέλεσμα διαφόρων πηγών, όπως αντικείμενα ψηφιοποιημένα με το χέρι, αντικείμενα πολυγώνων από εφαρμογές μοντελοποίησης, δεδομένα εμβέλειας, τρίγωνα από κύβους πορείας, δεδομένα εδάφους και μοντέλα ραδιοσυχνοτήτων.
Σύντομη Ιστορία
Η μορφή PLY αναπτύχθηκε τη δεκαετία του 1990 από τον Greg Turk και άλλους στο εργαστήριο γραφικών του Stanford και γι’ αυτό είναι επίσης γνωστή ως Stanford Triangle Format. Η μορφή αρχείου έχει έκδοση 1.0 από τότε και δεν έγιναν άλλες τροποποιήσεις.
Μορφή αρχείου PLY
Ένα απλό αντικείμενο PLY αποτελείται από συλλογή στοιχείων για την αναπαράσταση του αντικειμένου. Αποτελείται από μια λίστα (x,y,z) τριπλών κορυφών και μια λίστα όψεων που είναι στην πραγματικότητα δείκτες στη λίστα κορυφών. Οι κορυφές και οι όψεις είναι δύο παραδείγματα στοιχείων και το μεγαλύτερο μέρος του αρχείου PLY αποτελείται από αυτά τα δύο στοιχεία. Μπορούν επίσης να δημιουργηθούν και να προσαρτηθούν νέες ιδιότητες στα στοιχεία ενός αντικειμένου, αλλά αυτές θα πρέπει να προστεθούν με τέτοιο τρόπο ώστε τα παλιά προγράμματα να μην διακόπτονται όταν συναντώνται αυτές οι νέες ιδιότητες. Τέτοιες ιδιότητες μπορούν να απορριφθούν με την ανάγνωση εφαρμογών επίσης. Επιπλέον, μπορούν να δημιουργηθούν νέα στοιχεία και να οριστούν ιδιότητες και με αυτό το στοιχείο.
Δομή αρχείου
Η δομή του αρχείου μιας μορφής αρχείου PLY είναι η εξής:
Πεδίο |
---|
Κεφαλίδα αρχείου |
Λίστα κορυφής |
Λίστα προσώπων |
Κατάλογος άλλων στοιχείων |
Παράδειγμα Δομής
Θα χρησιμοποιήσουμε το ακόλουθο παράδειγμα παρακάτω στην επόμενη συζήτησή μας για διάφορα μέρη μιας μορφής αρχείου PLY.
ply
format ascii 1.0 { ascii/binary, format version number }
comment made by Greg Turk { comments keyword specified, like all lines }
comment this file is a cube
element vertex 8 { define "vertex" element, 8 of them in file }
property float x { vertex contains float "x" coordinate }
property float y { y coordinate is also a vertex property }
property float z { z coordinate, too }
element face 6 { there are 6 "face" elements in the file }
property list uchar int vertex_index { "vertex_indices" is a list of ints }
end_header { delimits the end of the header }
0 0 0 { start of vertex list }
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
4 0 1 2 3 { start of face list }
4 7 6 5 4
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0
Κεφαλίδα αρχείου
Η κεφαλίδα μορφής αρχείου PLY αποτελείται από κείμενο ASCII τόσο για τη μορφή ASCII όσο και για τη δυαδική μορφή. Η αρχή και το τέλος της ενότητας κεφαλίδας προσδιορίζονται από λέξεις-κλειδιά πτυχής και τέλους κεφαλίδας. Η αρχή της κεφαλίδας έχει τη μαγική λέξη ply που χρησιμοποιείται για την αναγνώριση της μορφής αρχείου PLY από τους αναγνώστες. Η επόμενη γραμμή δείχνει τον αριθμό έκδοσης για αυτό το αρχείο. Τα σχόλια σε μορφή αρχείου PLY ξεκινούν με τη λέξη-κλειδί σχολίου στην αρχή κάθε γραμμής σχολίου.
Στοιχείο Λέξη-κλειδί
Στη συνέχεια, η λέξη-κλειδί στοιχείου λέει τι υπάρχει μέσα στο αρχείο. Ακολουθείται από ιδιότητες για τον συγκεκριμένο τύπο στοιχείου όπου κάθε ιδιότητα έχει τον τύπο και τη σειρά ιδιότητάς της που καθορίζονται όπως φαίνεται παρακάτω:
element vertex 8 { define "vertex" element, 8 of them in file }
property float x { vertex contains float "x" coordinate }
property float y { y coordinate is also a vertex property }
property float z { z coordinate, too }
Σε αυτό το συγκεκριμένο παράδειγμα, το συγκεκριμένο στοιχείο κορυφής έχει 3 ιδιότητες τύπου float με καθορισμένη τη σειρά τους.
Τύποι τύπων δεδομένων
Υπάρχουν δύο τύποι τύπων δεδομένων που μπορεί να έχει μια ιδιότητα.
Scalar
: Οι βαθμωτοί τύποι δεδομένων είναι όπως φαίνεται παρακάτω:
|#Όνομα|#Τύπος|#Αριθμός Byte |χαρακτήρας|χαρακτήρας|1 |uchar|ανυπόγραφος χαρακτήρας|1 |σύντομος|σύντομος ακέραιος|2 |short|ανυπόγραφο σύντομο ακέραιος|2 |int|Ακέραιος|4 |uint|ανυπόγραφο Ακέραιος|4 |πλωτής|πλωτήρας μίας ακρίβειας|4 |διπλός|πλωτήρας διπλής ακρίβειας|8
Λίστα
: Υπάρχει μια ειδική μορφή ορισμών ιδιοτήτων που χρησιμοποιεί τον τύπο δεδομένων λίστας. Ένα παράδειγμα αυτού είναι από το αρχείο κύβου παραπάνω:
λίστα ιδιοτήτων uchar int vertex_index
Αυτό σημαίνει ότι η ιδιότητα “vertex_index” περιέχει πρώτα έναν ανυπόγραφο χαρακτήρα που λέει πόσους δείκτες περιέχει η ιδιότητα, ακολουθούμενο από μια λίστα που περιέχει τόσους πολλούς ακέραιους αριθμούς. Κάθε ακέραιος σε αυτήν τη λίστα μεταβλητού μήκους είναι ένας δείκτης σε μια κορυφή.