Формат PLY

Формат 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».

float вершина [1] .x

float вершина [1] .y

float вершина [1] .z

float вершина [2] .x

float вершина [2] .y

float вершина [2] .z

...

float вершина [9200] .x

float вершина [9200] .y

float вершина [9200] .z

В целом, данные о свойствах для каждого элемента сохраняются по одному элементу за раз.

< свойство 1 > < свойство 2 >... < свойство N > элемент [1]

< свойство 1 > < свойство 2 >... < свойство N > элемент [2]

...

Свойства типа списка хранятся, начиная с счетчика и заканчивая списком скаляров. Для примера тип элемента «face» имеет список свойство «vertex_indices» с типом uchar count и int скаляра.

uchar количество

int грань [1] .vertex _ индексы [1]

int грань [1] .vertex _ индексы [2]

int грань [1] .vertex _ индексы [3]

...

int грань [1] .vertex _ indices [count]

uchar количество

int грань [2] .vertex _ индексы [1]

int грань [2] .vertex _ индексы [2]

int грань [2] .vertex _ индексы [3]

...

int грань [2] .vertex _ indices [count]

...

Общие элементы и свойства

В то время как формат PLY имеет гибкость для определения многих типов элементов и свойств, общий набор элементов понимается между программами, чтобы передать общие типы 3-D данных. Turk предлагает элементы и имена свойства, которые программы должны пытаться сделать стандартными.

Необходимое свойство ядраЭлементСвойствоТип данныхОписание свойства
вершинаxfloatx, y z координаты
 yfloat 
 zfloat 
  nxfloatx, y, z нормальной
  nyfloat 
  nzfloat 
  красныйucharцвет вершины
  зеленыйuchar 
  синийuchar 
  альфаucharколичество прозрачности
  material_indexintиндекс к списку материалов
лицоvertex_indicesсписок intиндексы в вершины
  back_red ucharцвет задней стороны
  back_greenuchar 
  back_blueuchar 
 реброvertex1intиндекс в вершину
  vertex2intиндекс к другой вершине
  crease_tagucharсгиб на поверхности подразделения
 материалкрасныйucharцвет материала
  зеленыйuchar 
  синийuchar 
  альфаucharколичество прозрачности
  reflect_coefffloatколичество отраженного света
  refract_coefffloatколичество преломленного света
  refract_indexfloatиндекс преломления
  extinct_coefffloatкоэффициент вымирания

См. также

|