فایل PLY چیست؟
PLY، فرمت فایل چند ضلعی، فرمت فایل سه بعدی را نشان می دهد که اشیاء گرافیکی توصیف شده به عنوان مجموعه ای از چند ضلعی ها را ذخیره می کند. هدف از این فرمت فایل ایجاد یک نوع فایل ساده و آسان بود که به اندازه کافی عمومی باشد تا برای طیف گسترده ای از مدل ها مفید باشد. فرمت فایل PLY به عنوان ASCII و همچنین فرمت باینری برای ذخیره سازی فشرده و برای ذخیره و بارگذاری سریع ارائه می شود. فرمت فایل توسط برنامه های مختلف استفاده می شود که از خواندن فایل های سه بعدی پشتیبانی می کنند.
اشیاء در قالب 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 با کلمه کلیدی نظر در ابتدای هر خط نظر شروع می شود.
کلمه کلیدی عنصر
سپس کلمه کلیدی عنصر به آنچه در داخل فایل است می گوید. به دنبال آن خواص برای آن نوع عنصر خاص وجود دارد که در آن هر ویژگی دارای نوع خاصیت و ترتیب آن است که در زیر نشان داده شده است:
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 |کوتاه|عدد صحیح کوتاه بدون علامت|2 |int|عدد صحیح|4 |uint|عدد صحیح بدون علامت|4 | شناور | شناور تک دقیق|4 |دوبل|دقیق دوگانه شناور|8
List: شکل خاصی از تعاریف ویژگی وجود دارد که از نوع داده لیست استفاده می کند. نمونه ای از این از فایل مکعب بالا است:
فهرست ویژگی uchar int vertex_index.
این به این معنی است که ویژگی vertex_index ابتدا شامل یک کاراکتر بدون علامت است که نشان می دهد این ویژگی دارای چند شاخص است و به دنبال آن لیستی حاوی این تعداد اعداد صحیح است. هر عدد صحیح در این لیست با طول متغیر، یک شاخص برای یک راس است.