Какво е PLY файл?
PLY, Polygon File Format, представлява 3D файлов формат, който съхранява графични обекти, описани като колекция от многоъгълници. Целта на този файлов формат беше да създаде прост и лесен файлов тип, който е достатъчно общ, за да бъде полезен за широк набор от модели. Файловият формат PLY идва като ASCII, както и като двоичен формат за компактно съхранение и за бързо запазване и зареждане. Файловият формат се използва от различни приложения, които осигуряват поддръжка за четене на 3D файлове.
Обектите в PLY формат се описват от колекция от върхове, лица и други елементи, заедно със свойства като цвят и нормална посока, които могат да бъдат прикрепени към тези елементи. Други свойства, които също могат да се съхраняват с обекта, включват:
- Повърхностни нормали
- текстурни координати
- прозрачност
- увереност на данните за диапазона
- свойства за предната и задната част на многоъгълник
Обект, представен от PLY формат, може да бъде резултат от различни източници, като например ръчно дигитализирани обекти, многоъгълни обекти от приложения за моделиране, данни за обхват, триъгълници от маршируващи кубове, данни за терена и модели на излъчване.
Кратка история
Форматът PLY е разработен през 1990 г. от Грег Търк и други в графичната лаборатория на Станфорд и затова е известен още като формат на триъгълника на Станфорд. Оттогава файловият формат има версия 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
: Скаларните типове данни са както е показано по-долу:
|#Име|#Тип|#Брой байтове |char|символ|1 |uchar|знак без знак|1 |кратко|кратко цяло число|2 |ushort|кратко цяло число без знак|2 |int|Цяло число|4 |uint|беззнаково цяло число|4 |float|float с единична точност|4 |double|double precision float|8
Списък
: Има специална форма на дефиниции на свойства, която използва типа данни списък. Пример за това е от кубичния файл по-горе:
списък със свойства uchar int vertex_index
Това означава, че свойството “vertex_index” съдържа първо неподписан знак, показващ колко индекса съдържа свойството, последвано от списък, съдържащ толкова много цели числа. Всяко цяло число в този списък с променлива дължина е индекс на връх.