Формат PLY версии 1.0, также известный как Формат треугольника Стэнфорда, задает гибкую и систематическую схему хранения 3D данных. Заголовок ASCII определяет, какие данные находятся в файле, определяя «элементы» каждый с набором «свойств». Многие файлы PLY имеют только данные вершин и граней, однако можно также включать другие данные, такие как информация о цвете, нормали вершин или свойства конкретного приложения.
Примечание
Функции Toolbox™ данных облака точек Computer Vision поддерживают только координаты (x, y, z), нормали и свойства цвета.
Пример заголовка (курсивный текст - комментарий):
сгиб | идентификатор файла |
формат binary_big_endian 1.0 | задавать формат и версию данных |
вершина элемента 9200 | задайте элемент «vertex» |
свойство с плавающей точкой x | |
свойство с плавающей точкой y | |
свойство с плавающей точкой z | |
грань элемента 18000 | задайте элемент «face» |
список свойств uchar int vertex_indices | |
end_header | данные начинаются после этой линии |
Файл начинается со «слоя», идентифицируя, что это файл PLY. Заголовок должен также включать линию формата с синтаксисом
формат < формат данных > < версия PLY > |
Поддерживаемые форматы данных являются «ascii» для данных, хранящихся в виде текста, и «binary_little_endian» и «binary_big_endian» для двоичных данных (где little/big endian относится к упорядоченному расположению байтов многобайтовых данных). Определения элемента начинаются с линии «элемент», за которой следуют определения свойств элемента
элемент < имя элемента > < номер в файле > | |
свойство < тип данных > < имя свойства 1 > | |
свойство < тип данных > < имя свойства 2 > | |
свойство < тип данных > < имя свойства 3 > | |
... |
Например, «вершина элемента 9200» задает элемент «вершина» и задает, что 9200 вершин хранятся в файле. За каждым определением элемента следует список свойств этого элемента. Существует два вида свойств, скаляр и список. Определение скалярного свойства имеет синтаксис
свойство < тип данных > < имя свойства > |
где < тип данных >
Имя | Напечатать |
---|---|
char | (8-битный) символ |
uchar | (8-битный) беззнаковый символ |
короткий | (16-битное) короткое целое число |
ushort | (16-битное) беззнаковое короткое целое число |
int | (32-битное) целое число |
uint | (32-битное) беззнаковое целое число |
плавание | (32-битный) с одной точностью с плавающей точностью |
дважды | (64-разрядный) с двойной точностью с плавающей точностью |
Для совместимости между системами обратите внимание, что количество бит в каждом типе данных должно быть допустимым. Тип списка сохраняется с количеством, за которым следует список скаляров. Синтаксис определения свойства list:
список свойств < тип данных счетчика > < тип данных > < имя свойства > |
Для примера,
список свойств uchar int vertex_index |
задает, vertex_index свойства сохраняются, начиная с количества байтов, за которым следуют целочисленные значения. Это полезно для хранения связности многоугольников, поскольку у него есть гибкость задавать переменное количество индексов вершин на каждой грани.
Заголовок также может содержать комментарии. Синтаксис комментария - это просто линия, начинающееся с «комментария», за которым следует комментарий в одну строку:
комментарий < текст комментария > |
Комментарии могут предоставить информацию о данных, таких как автор файла, описание данных, источник данных и другие текстовые данные.
После заголовка данные элемента хранятся в виде либо ASCII, либо двоичных данных (как указано линией формата в заголовке). После заголовка данные хранятся в том же порядке, в котором были определены элементы и свойства. Во-первых, сохраняются все данные для первого типа элемента. В заголовке примера первый тип элемента является «вершиной» с 9200 вершинами в файле и со свойствами с плавающей точкой «x», «y» и «z».
|
|
|
|
|
|
... |
|
|
|
В целом, данные о свойствах для каждого элемента сохраняются по одному элементу за раз.
< свойство 1 > < свойство 2 >... < свойство N > элемент [1] |
< свойство 1 > < свойство 2 >... < свойство N > элемент [2] |
... |
Свойства типа списка хранятся, начиная с счетчика и заканчивая списком скаляров. Для примера тип элемента «face» имеет список свойство «vertex_indices» с типом uchar count и int скаляра.
|
|
|
|
... |
|
|
|
|
|
... |
|
... |
В то время как формат 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 | коэффициент вымирания |