PLY — это формат компьютерных файлов, известный как Polygon File Format или Stanford Triangle Format . Он был разработан в первую очередь для хранения трехмерных данных с 3D-сканеров. Формат хранения данных поддерживает относительно простое описание одного объекта в виде списка номинально плоских полигонов. Можно сохранять различные свойства, включая цвет и прозрачность, нормали поверхности, координаты текстуры и значения достоверности данных. Формат позволяет иметь разные свойства для передней и задней части полигона.
Существует две версии формата файла : одна в ASCII , другая в двоичном формате .
Файл Ply начинается с атрибута "header", который определяет элементы сетки и их типы, за которым следует список самих элементов. Элементы обычно являются вершинами и гранями, но могут включать и другие сущности, такие как ребра, образцы карт диапазонов и полосы треугольников.
Заголовок как ASCII-файлов, так и двоичных файлов представляет собой текст ASCII. Только числовые данные, следующие за заголовком, различаются между двумя версиями. Заголовок всегда начинается с " магического числа ", строки, содержащей:
слой
который идентифицирует файл как файл PLY. Вторая строка указывает, какой это вариант формата PLY. Он должен быть одним из следующих:
формат ascii 1.0формат binary_little_endian 1.0формат binary_big_endian 1.0
В будущих версиях стандарта номер редакции в конце будет изменен, но в настоящее время используется только версия 1.0.
Комментарии можно размещать в заголовке, используя слово comment
в начале строки. Все, что находится от этого места до конца строки, следует игнорировать. Например:
комментарий Это комментарий!
Ключевое element
слово вводит описание того, как хранятся некоторые конкретные элементы данных и сколько их там. Таким образом, в файле, где есть 12 вершин, каждая из которых представлена как тройка с плавающей точкой (X,Y,Z), можно было бы ожидать увидеть:
элемент вершина 12свойство float xсвойство float yсвойство float z
Другие property
строки могут указывать, что цвета или другие элементы данных хранятся в каждой вершине, и указывать тип данных этой информации. Что касается типа данных, то существует два варианта в зависимости от источника файла ply. Тип может быть указан одним из char uchar short ushort int uint float double
, или одним из int8 uint8 int16 uint16 int32 uint32 float32 float64
. Для объекта с десятью многоугольными гранями можно увидеть:
элемент грань 10список свойств uchar int vertex_index
Реализации PLY сильно различаются по именам свойств. vertex_indices
используется чаще, чем vertex_index
, например, в Blender и VTK . Расширенная спецификация содержит «Основной список (обязательный)», «Второй список (часто используемый)» и «Третий список (предлагаемые расширения)» имен свойств. [2]
Слово list
указывает на то, что данные представляют собой список значений, первое из которых — это количество записей в списке (в данном случае представленное как 'uchar'). В этом примере каждая запись списка представлена как 'int'. В конце заголовка всегда должна быть строка:
конец_заголовка
В версии ASCII формата вершины и грани описываются по одной в строке с числами, разделенными пробелами. В двоичной версии данные просто упаковываются близко друг к другу в endianness
указанном в заголовке и с типами данных, указанными в записях property
. Для общего property list...
представления для многоугольников первое число для этого элемента — это число вершин, которые имеет многоугольник, а остальные числа — это индексы этих вершин в предыдущем списке вершин.
Формат PLY был разработан в середине 90-х годов Грегом Турком и другими в графической лаборатории Стэнфорда под руководством Марка Левоя. Его дизайн был вдохновлен форматом Wavefront .obj . Однако формат Obj не обладал расширяемостью для произвольных свойств и группировок, поэтому были придуманы ключевые слова property
и element
для обобщения понятий вершин, граней, связанных данных и других групп.
Ниже приведен полный пример файла PLY, описывающего кубическую сетку, экспортированную из Blender версии 4.0.2:
слойформат ascii 1.0комментарий Создано в Blender версии 4.0.2элемент вершина 14свойство float xсвойство float yсвойство float zсвойство float nxнедвижимость плавает nyнедвижимость плавает nzсвойство плавает sсвойство плавать тэлемент грань 6список свойств uchar uint vertex_indicesконец_заголовка1 1 1 0,5773503 0,5773503 0,5773503 0,625 0,5-1 1 1 -0,5773503 0,5773503 0,5773503 0,875 0,5-1 -1 1 -0,5773503 -0,5773503 0,5773503 0,875 0,751 -1 1 0,5773503 -0,5773503 0,5773503 0,625 0,751 -1 -1 0,5773503 -0,5773503 -0,5773503 0,375 0,75-1 -1 1 -0,5773503 -0,5773503 0,5773503 0,625 1-1 -1 -1 -0,5773503 -0,5773503 -0,5773503 0,375 1-1 -1 -1 -0,5773503 -0,5773503 -0,5773503 0,375 0-1 -1 1 -0,5773503 -0,5773503 0,5773503 0,625 0-1 1 1 -0,5773503 0,5773503 0,5773503 0,625 0,25-1 1 -1 -0,5773503 0,5773503 -0,5773503 0,375 0,25-1 1 -1 -0,5773503 0,5773503 -0,5773503 0,125 0,51 1 -1 0,5773503 0,5773503 -0,5773503 0,375 0,5-1 -1 -1 -0,5773503 -0,5773503 -0,5773503 0,125 0,754 0 1 2 34 4 3 5 64 7 8 9 104 11 12 4 134 12 0 3 44 10 9 0 12
Файл начинается с заголовка, который определяет файл в формате ASCII. Всего имеется 14 вершин (6 граней * 4 вершины - 10 вершин, сохраненных из-за слияния) и 6 граней. После заголовка перечислены данные вершин и граней. Список вершин содержит положение (x,y,z), нормали (nx,ny,nz) и координаты текстуры (s,t) для каждой из 14 вершин. Список граней содержит количество вершин (4) и индексы вершин для каждой из 6 четырехугольных граней.