.PLY вариант №
PLY, формат файла полигонов, представляет собой формат 3D-файла, в котором хранятся графические объекты, описываемые как набор полигонов. Цель этого формата файла состояла в том, чтобы создать простой и удобный тип файла, который является достаточно общим, чтобы его можно было использовать для широкого спектра моделей. Формат файла PLY поставляется как в формате ASCII, так и в двоичном формате для компактного хранения и быстрого сохранения и загрузки. Формат файла используется различными приложениями, поддерживающими чтение 3D-файлов.
Объекты в формате PLY описываются набором вершин, граней и других элементов, а также такими свойствами, как цвет и направление нормали, которые можно присвоить этим элементам. Другие свойства, которые также могут быть сохранены вместе с объектом, включают:
- Нормали поверхности
- координаты текстуры
- прозрачность
- достоверность данных диапазона
- свойства для передней и задней части многоугольника
Объект, представленный в формате PLY, может быть результатом различных источников, таких как объекты, оцифрованные вручную, полигональные объекты из приложений для моделирования, данные о дальности, треугольники из марширующих кубов, данные о местности и модели радиосити.
Краткая история
Формат PLY был разработан в 1990-х годах Грегом Турком и другими в графической лаборатории Стэнфорда, поэтому он также известен как формат Стэнфордского треугольника. С тех пор формат файла имеет версию 1.0, и никаких дальнейших изменений не производилось.
PLY Формат файла
Простой объект PLY состоит из набора элементов для представления объекта. Он состоит из списка (x, y, z) троек вершин и списка граней, которые на самом деле являются индексами в списке вершин. Вершины и грани — это два примера элементов, и большая часть файла 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 |целое|целое|4 |uint|целое без знака|4 |с плавающей запятой|с плавающей запятой одинарной точности|4 |double|двойная точность с плавающей запятой|8
Список
: существует особая форма определения свойств, в которой используется тип данных списка. Пример этого из файла куба выше:
список свойств uchar int vertex_index
Это означает, что свойство “vertex_index” содержит сначала символ без знака, указывающий, сколько индексов содержит свойство, за которым следует список, содержащий такое количество целых чисел. Каждое целое число в этом списке переменной длины является индексом вершины.