Що таке файл PLY?
PLY, Polygon File Format, представляє формат файлу 3D, який зберігає графічні об’єкти, описані як набір багатокутників. Метою цього формату файлу було створення простого та легкого типу файлу, який є достатньо загальним, щоб бути корисним для широкого діапазону моделей. Формат файлу PLY доступний як ASCII, так і двійковий формат для компактного зберігання та швидкого збереження та завантаження. Формат файлу використовується різними програмами, які підтримують читання 3D-файлів.
Об’єкти у форматі PLY описуються набором вершин, граней та інших елементів разом із такими властивостями, як колір і напрямок нормалі, які можна прикріпити до цих елементів. Інші властивості, які також можна зберігати разом з об’єктом, включають:
- Нормалі до поверхні
- координати текстури
- прозорість
- достовірність даних діапазону
- властивості для передньої та задньої частин багатокутника
Об’єкт, представлений у форматі PLY, може бути результатом різних джерел, таких як оцифровані вручну об’єкти, багатокутні об’єкти з додатків моделювання, дані діапазону, трикутники з маршових кубів, дані рельєфу та моделі радіації.
Коротка історія
Формат PLY був розроблений у 1990-х роках Грегом Терком та іншими співробітниками Стенфордської графічної лабораторії, тому він також відомий як Стенфордський трикутний формат. Відтоді формат файлу має версію 1.0, і подальші зміни не вносилися.
Формат файлу PLY
Простий об’єкт PLY складається з набору елементів для представлення об’єкта. Він складається зі списку (x,y,z) трійок вершин a і списку граней, які фактично є індексами в списку вершин. Вершини та грані є двома прикладами елементів, і більшість файлу 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 і end-header. На початку заголовка є магічне слово ply, яке використовується для розпізнавання формату файлу PLY читачами. У наступному рядку показано номер версії цього файлу. Коментарі у форматі файлу PLY починаються з ключового слова comment на початку кожного рядка коментаря.
Ключове слово елемента
Потім ключове слово element повідомляє, що знаходиться всередині файлу. За ним йдуть властивості для цього конкретного типу елемента, де кожна властивість має свій тип властивості та порядок, указаний, як показано нижче:
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
: скалярні типи даних, як показано нижче:
|#Назва|#Тип|#Кількість байтів |символ|символ|1 |uchar|беззнаковий символ|1 |коротке|коротке ціле|2 |ushort|коротке ціле беззнакове|2 |int|Ціле|4 |uint|беззнакове ціле число|4 |float|float одинарної точності|4 |double|поплавок подвійної точності|8
Список
: існує спеціальна форма визначень властивостей, яка використовує тип даних списку. Прикладом цього є файл куба вище:
список властивостей uchar int vertex_index
Це означає, що властивість “vertex_index” спочатку містить беззнаковий символ, який повідомляє, скільки індексів містить властивість, а потім список, що містить таку кількість цілих чисел. Кожне ціле число в цьому списку змінної довжини є індексом вершини.