Формат PLY версии 1.0, также известный как Stanford Triangle Format, определяет гибкую и систематическую схему хранения 3D данных. Заголовок ASCII указывает, какие данные находятся в файле, определяя «элементы» каждый с набором «свойств». Многие файлы PLY имеют только данные вершин и граней, однако можно также включить другие данные, такие как информация о цвете, нормали вершин или свойства, специфичные для приложения.
Примечание
Функции данных облака точек Computer Vision Toolbox™ поддерживают только координаты (x, y, z), нормали и свойства цвета.
Пример заголовка (курсивом является комментарий):
сгиб | идентификатор файла |
формат binary_big_endian 1.0 | укажите формат и версию данных |
вершина элемента 9200 | определить элемент «vertex» |
свойство float x | |
свойство float y | |
свойство float z | |
грань элемента 18000 | определить элемент «face» |
список свойств uchar int vertex_indices | |
end_header | данные начинаются после этой строки |
Файл начинается с «слой» и определяет, что это файл PLY. Заголовок также должен содержать строку формата с синтаксисом
format < формат данных > < Версия PLY > |
Поддерживаемые форматы данных - «ascii» для данных, хранящихся в виде текста, и «binary_little_endian» и «binary_big_endian» для двоичных данных (где little/big endian относится к порядку байтов многобайтовых данных). Определения элементов начинаются со строки «element», за которой следуют определения свойств элементов
элемент < имя элемента > < номер в файле > | |
свойство < тип данных > < имя свойства 1 > | |
свойство < тип данных > < имя свойства 2 > | |
свойство < тип данных > < имя свойства 3 > | |
| ... |
Например, «element vertex 9200» определяет элемент «vertex» и указывает, что 9200 вершин хранятся в файле. За каждым определением элемента следует список свойств этого элемента. Существует два вида свойств: скалярный и список. Определение скалярного свойства имеет синтаксис
свойство < тип данных > < имя свойства > |
где < тип данных >
| Имя | Напечатать |
|---|---|
| случайная работа | (8-битный) символ |
| uchar | (8-битный) символ без знака |
| короткий | (16-разрядное) короткое целое число |
| ushort | (16-разрядное) беззнаковое короткое целое число |
| интервал | (32-разрядное) целое число |
| uint | (32-разрядное) целое число без знака |
| плавание | (32-разрядный) поплавок с одинарной точностью |
| дважды | (64-разрядный) поплавок с двойной точностью |
Для обеспечения совместимости между системами следует отметить, что количество битов в каждом типе данных должно быть согласованным. Тип списка сохраняется со счетом, за которым следует список скаляров. Синтаксис определения для свойства списка:
список свойств < count data type > < тип данных > < имя свойства > |
Например,
список свойств uchar int vertex_index |
определяет, vertex_index свойства хранятся, начиная с числа байтов, за которым следуют целочисленные значения. Это полезно для сохранения полигональной связности, поскольку она обладает гибкостью для задания переменного числа индексов вершин в каждой грани.
Заголовок также может содержать комментарии. Синтаксис комментария - это просто строка, начинающаяся с «comment», за которой следует однострочный комментарий:
комментарий < текст комментария > |
В комментариях могут содержаться такие сведения о данных, как автор файла, описание данных, источник данных и другие текстовые данные.
После заголовка данные элемента сохраняются как ASCII или двоичные данные (как указано строкой формата в заголовке). После заголовка данные сохраняются в порядке, в котором были определены элементы и свойства. Сначала сохраняются все данные для первого типа элемента. В заголовке примера первым типом элемента является «vertex» с 9200 вершинами в файле и со свойствами float «x», «y» и «z».
|
|
|
|
|
|
| ... |
|
|
|
В общем, данные свойств для каждого элемента хранятся по одному элементу за раз.
< свойство 1 > < свойство 2 >... < свойство N > элемент [1] |
< свойство 1 > < свойство 2 >... < свойство N > элемент [2] |
... |
Свойства типа списка сохраняются, начиная со счетчика и далее следует список скаляров. Например, тип элемента «face» имеет свойство list «vertex_indices» со значением uchar count и int scalar type.
|
|
|
|
| ... |
|
|
|
|
|
| ... |
|
| ... |
В то время как формат PLY обладает гибкостью для определения многих типов элементов и свойств, общий набор элементов понимается между программами для передачи общих 3-D типов данных. Turk предлагает элементы и имена свойств, которые программы должны попытаться сделать стандартными.
| Требуемое свойство ядра | Элемент | Собственность | Тип данных | Описание свойства |
|---|---|---|---|---|
| ✓ | вершина | x | float | координаты x, y, z |
| ✓ | y | float | ||
| ✓ | z | float | ||
| nx | float | x, y, z нормального | ||
| ny | float | |||
| nz | float | |||
| красный | uchar | цвет вершины | ||
| зеленый | uchar | |||
| синий | uchar | |||
| альфа | uchar | объем прозрачности | ||
| material_index | int | индекс к списку материалов | ||
| лицо | vertex_indices | список int | индексы к вершинам | |
| back_red | uchar | цвет задней стороны | ||
| back_green | uchar | |||
| back_blue | uchar | |||
| край | vertex1 | int | индекс в вершину | |
| vertex2 | int | индекс в другую вершину | ||
| crease_tag | uchar | сгиб в поверхности подразделения | ||
| материал | красный | uchar | цвет материала | |
| зеленый | uchar | |||
| синий | uchar | |||
| альфа | uchar | объем прозрачности | ||
| reflect_coeff | float | количество отраженного света | ||
| refract_coeff | float | количество преломленного света | ||
| refract_index | float | показатель преломления | ||
| extinct_coeff | float | коэффициент вымирания |