ply格式相關內容5頁_第1頁
ply格式相關內容5頁_第2頁
ply格式相關內容5頁_第3頁
ply格式相關內容5頁_第4頁
ply格式相關內容5頁_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、ply格式總結一、 ply格式簡介PLY文件格式是Stanford大學開發(fā)的一套三維mesh模型數據格式,圖形學領域內很多著名的模型數據,比如Stanford的三維掃描數據庫(其中包括很多文章中會見到的Happy Buddha, Dragon, Bunny兔子),Geogia Tech的大型幾何模型庫,北卡(UNC)的電廠模型等,最初的模型都是基于這個格式的。PLY作為一種多邊形模型數據格式,不同于三維引擎中常用的場景圖文件格式和腳本文件,每個PLY文件只用于描述一個多邊形模型對象(Object),該模型對象可以通過諸如頂點、面等數據進行描述,每一類這樣的數據被稱作一種元素(Element)。

2、二、 ply格式1、PLY的文件結構簡單:文件頭加上元素數據列表。其中文件頭中以行為單位描述文件類型、格式與版本、元素類型、元素的屬性等,然后就根據在文件頭中所列出元素類型的順序及其屬性,依次記錄各個元素的屬性數據。2、典型的PLY文件結構: 頭部 頂點列表 面片列表 (其他元素列表)3、舉例ply 頭部的開始,是文件的識別字符format ascii 1.0 關鍵詞format,特定的ascii或二進制格式(見說明1),版本號comment made by anonymous 關鍵詞comment,要注釋的內容。comment this file is a cube 注釋內容可有可無elem

3、ent vertex 8 描述一個元素開始:關鍵詞element,元素名,元素在文件中的個數property float32 x 元素屬性:關鍵詞property,數據類型(見說明2),屬性名property float32 y property float32 z element face 6 第二個元素property list uint8 int32 vertex_index 列表數據類型,見說明3end_header 結尾,與ply呼應以上是 頭部 的全部內容頂點列表開始0 0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 0 面片列表開始:頂點個

4、數,頂點索引號4 0 1 2 3 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說明:1. 例子中文件使用的是ascii,二進制版本頭部的唯一不同是用詞“binary_little_endian”或者“binary_big_endian”替換詞“ascii”。2. 屬性可能具有的標量數據類型列表如下: 名稱 類型 字節(jié)數 - int8 字符 1 uint8 非負字符 1 int16 短整型 2 uint16 非負短整型 2 int32 整型 4 uint32 非負整型 4 float32 單精度浮點數 4 float64 雙精度浮點數 83.

5、 列表數據類型的屬性定義有一種特殊的格式: property list 這種格式的一類例子是上面文件中的: property list uint8 int32 vertex_index 這表示屬性“vertex_index”首先包含一個非負字符報蘇在屬性里包含多少索引,接下來是一個列表包含許多整數。在這個邊長列表里的每個整數都是一個頂點的索引。三、 ply格式的讀寫1. 首先是所需數據結構的定義(1)點結構struct Point3dpublic: float X;float Y;float Z; Point3d(float x, float y, float z)this-X=x;this-

6、Y=y;this-Z=z; (2)三角形結構三角形結構按常理理解應該是包含了3個Point3d,不過這里有兩種方式來定義這個Triangle結構。 一種是采用點地址:struct Trianglepublic : Point3d* P0; Point3d* P1; Point3d* P2; Triangle(Point3d* p0, Point3d* p1, Point3d* p2) this-P0=p0;this-P1=p1;this-P2=p2; ;第二種是使用索引:struct Trianglepublic : int P0Index; int P1Index; int P2Index;

7、 Triangle(int p0index, int p1index, int p2index) this-P0Index=p0index; this-P1Index=p1index; this-P2Index=p2index; ; (3)mesh結構class Meshpublic: std:vector Vertices; std:vector Faces; Mesh(); Mesh(); void AddVertex(Point3d* toAdd); void AddFace(Triangle* tri);class Meshpublic: std:vector Vertices; st

8、d:vector Faces; Mesh(); Mesh(); void AddVertex(Point3d& toAdd); void AddFace(Triangle& tri);2. 使用這里定義的Mesh類,使用C+語言讀寫.ply文件的函數如下:(1)ply文件的讀void ReadFile(Mesh& mesh,const char* fileName) int vcount=0; int fcount=0; FILE * nfile = fopen(fileName,r); fscanf(nfile,plynformat ascii 1.0ncomment VCGLIB gene

9、ratednelement vertex %dn,&vcount); fscanf(nfile,property float xnproperty float ynproperty float znproperty uchar rednproperty uchar greennproperty uchar bluenelement face %dn,&fcount); fscanf(nfile,property list int int vertex_indicesnend_headern); float v1=0,v2=0,v3=0; int r=0,g=0,b=0; int i1=0,i2

10、=0,i3=0; for(int i=0;ivcount;i+) fscanf(nfile,%f %f %f %d %d %dn,&v1,&v2,&v3,&r,&g,&b); Point3d p3d(v1,v2,v3); mesh.AddVertex(p3d); for(int j=0;jfcount;j+) fscanf(nfile,3 %d %d %dn,&i1,&i2,&i3); Triangle t(i1,i2,i3); mesh.AddFace(t); fclose(nfile); (2)ply文件的寫void Output(Mesh& mesh,const char* filena

11、me) FILE * nfile = fopen(filename,wb); fprintf(nfile,plyn); fprintf(nfile,format ascii 1.0n); fprintf(nfile,comment VCGLIB generatedn); fprintf(nfile,element vertex %dn,mesh.Vertices.size(); fprintf(nfile,property float xn); fprintf(nfile,property float yn); fprintf(nfile,property float zn); fprintf

12、(nfile,property uchar redn); fprintf(nfile,property uchar greenn); fprintf(nfile,property uchar bluen); fprintf(nfile,element face %dn,mesh.Faces.size(); fprintf(nfile,property list int int vertex_indicesn); fprintf(nfile,end_headern); for(size_t i=0;imesh.Vertices.size();i+) fprintf(nfile,%.2f %.2f %.2f %d %d %dn,mesh.Verticesi.Data0,mesh.Ver

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論