**位於vcglib\wrap\io_trimesh(注:為meshlab中vcg的源**)
static int open( openmeshtype &m, const char * filename, info &oi)
if (oi.mask == 0)
loadmask(filename, oi);
meshlab在open之前有單獨呼叫loadmask
大致流程如下:
1.獲取檔案長度,初始化各種標誌
2.遍歷每一行,統計頂點數量、法線數量、紋理座標數量、面數量,同時修改部分標記量的值
3.根據統計的資訊開啟部分表計量,比如如果頂點數量與紋理座標數量一致,開啟iom_verttexcoord標記等
接著將通過檔案分析得到的mask與mesh本身設定的mask統一
mask::clampmask(m,oi.mask);
1.根據點的數量分配記憶體
vertexiterator vi = vcg::tri
::allocator
::addvertices(m,oi.numvertices);
2.解析以v開頭的行,讀取點的座標資訊,如果有顏色就讀取顏色
解析以vt開頭的行,先將紋理座標資料存放在臨時的vector中std::vectortexcoords;
解析以vn開頭的行,先將法線資訊存放在臨時的vector中std::vectornormals
解析以f或者q開頭的行,此處以常規的f為例,也就是trimesh mesh
1.
std::vector
> polygonvect(1) 多邊形容器
2.std::vector
indexvvect(vertexespe***ce) 頂點序號
3.std::vector
indexnvect(vertexespe***ce); 法線序號
4.std::vector
indextvect(vertexespe***ce); 紋理座標序號
5.std::vector
indextriangulatedvect; 三角形序號
解析面資料的序號資訊//分別解析頂點 法線 紋理的序號
splittoken(tokens[pi+1], indexvvect[pi],indexnvect[pi],indextvect[pi], inputmask);
//確保序號正確
goodobjindex(indexvvect[pi],numvertices);
goodobjindex(indextvect[pi],oi.numtexcoords);
//根據之前讀取的定點資料獲取頂點座標
polygonvect[0][pi].import(m.vert[indexvvect[pi]].cp());
三角化
根據面的定點數對面進行三角化,獲取三角形的頂點序號。一般mesh資料是三個點,那麼這種情況下只是簡單的獲取了序號
處理每個三角形
根據三角化之後的頂點序號處理每乙個三角形
//首先獲取面上每個點的頂點序號、紋理序號、法線序號
//三角化之後每個頂點的相對序號,也就是在當前面頂點中的序號
locind[iii]=indextriangulatedvect[pi+iii];
//根據相對序號獲取絕對序號,也就是在所有頂點中的序號
ff.v[iii]=indexvvect[ locind[iii] ];
ff.n[iii]=indexnvect[ locind[iii] ];
ff.t[iii]=indextvect[ locind[iii] ];
獲取面使用的紋理的序號
ff.tind=materials[currentmaterialidx].index
;
判斷頂點是否重複
if ((ff.v[0] == ff.v[1]) || (ff.v[0] == ff.v[2]) || (ff.v[1] == ff.v[2]))
將麵資訊新增到cmesho
之前解析的面資訊都在std::vectorindexedfaces
中,所有的面解析完成之後,通過該容器建立面。
//分配記憶體
vcg::tri::allocator::addfaces(m,num********s);
//填寫面資訊
for(unsigned
int j=0;j.v
.size();++j)
*******
什麼是obj檔案
程式編譯時生成的中間 檔案。目標檔案,一般是程式編譯後的二進位制檔案,再通過鏈結器 link.exe 和資源檔案鏈結就成可執行檔案了。obj只給出了程式的相對位址,而可執行檔案是絕對位址。1 這個問題不是很簡單,你只看到了檔案從源 到exe檔案這個流程中的一小部分。要詳細的深究這個問題,需要很多時間...
OpenGL匯入的obj模型透明問題
在利用opengl匯入obj模型後,發現模型是透明的,在旋轉過程中特別難看,於是需要設定成非透明的實體模型。下面的圖是模型為透明的時候,看起來就讓人感覺很亂 由於一開始我們利用 glclear gl color buffer bit gl depth buffer bit 清除了緩衝區,所以只要設定...
OpenGL讀取Obj模型檔案
想要順利讀取obj模型檔案,先要了解這種檔案的格式,obj檔案格式是非常簡單的。這種檔案以純文字的形式儲存了模型的頂點 法線和紋理座標和材質使用資訊。obj檔案的每一行,都有極其相似的格式。在obj檔案中,每行的格式如下 字首 引數1 引數2 引數3 其中,字首標識了這一行所儲存的資訊型別。引數則是...