glm庫 使用說明

OBJ文件:
 這裏的OBJ文件是Wavefront公司的一種3D模型文件,不是VC在連接過程中產生的OBJ文件。GLM實現了用C語言對OBJ文件的常用操作,用於簡單的3D遊戲編程應該足夠了。3DS MAX,MAYA都可以把模型以OBJ文件格式導出。OBJ文件中包含模型的頂點,面,三角形,法向,紋理座標等數據,但是其中不包含紋理和材質。材質可以放在OBJ文件中指定一個材質庫文件中,使用時材質庫文件一般和OBJ文件放在一起。紋理圖形就要自己想辦法了。
//數據模型結構
struct GLMmodel{
 char* pathname; //模型文件和材質庫的路徑
 char* mtllibname; //材質庫名
 
 GLuint numvertices; //頂點數
 GLfloat* vertices; //儲存頂點的向量
 
 GLuint numnormals; //模型法向數
 GLfloat* normals; //儲存法向的向量
 
 GLuint numtexcoords; //紋理座標數
 GLfloat* texcoords; //儲存紋理座標的向量
 
 GLuint numfacetnorms; //規則平面數
 GLfloat* facetnorms; //儲存規則平面的向量
 
 GLuint numtriangles; //三角形數
 GLMtriangle* triangles; //儲存三角形的向量
 
 GLuint nummaterials; //材質數
 GLMmaterial* materials; //儲存材質的向量
 
 GLuint numgroups;//圖元組數
 GLMgroup* groups;//儲存圖元組的向量
 
 GLfloat position[3];//模型的位置


 
瞭解這個模型數據結構主要用於自己擴充操作,以下是glm提供的相關操作:
//單位化模型model並返回縮放比例因子
單位化就是把模型通過平移和縮放變換限制到3維座標系中點爲中心的一個單位正方體區域內
GLfloat glmUnitize(GLMmodel* model);

//計算模型的寬,高,深尺寸,結果保存在dimensions所指的3元素數組中
GLvoid glmDimensions(GLMmodel* model, GLfloat* dimensions);

//按比例參數縮放模型,參數大於1放大,大於0小於1縮小,小於0反射,等於0縮小到0
GLvoid glmScale(GLMmodel* model, GLfloat scale);

//反轉模型的多邊形頂點順序,同時反轉法向量,默認多邊形頂點順序是逆時針的。
GLvoid glmReverseWinding(GLMmodel* model);

//計算模型面的法向(假定多邊形頂點順序爲逆時針)
GLvoid glmFacetNormals(GLMmodel* model);

//計算模型的平滑頂點法向,angle參數爲平滑交叉的最大角度(角度制)
GLvoid glmVertexNormals(GLMmodel* model, GLfloat angle);

//按線性投影產生紋理座標,它把頂點線性映射到矩形上
GLvoid glmLinearTexture(GLMmodel* model);

//按球形映射產生紋理座標
GLvoid glmSpheremapTexture(GLMmodel* model);

//從內存中釋放模型
GLvoid glmDelete(GLMmodel* model);

//從Wavefront公司標準的.OBJ文件中讀取模型
GLMmodel* glmReadOBJ(char* filename);


//將模型按Wavefront .OBJ文件格式寫入文件,文件名由filename參數指定
//mode指定寫入方式,此參數爲取或(“|”)的位聯合:
//GLM_NONE    - 只按頂點處理
//GLM_FLAT    - 按面計算法向
//GLM_SMOOTH - 按頂點計算法向
//GLM_TEXTURE - 包含紋理座標
//GLM_COLOR    - 只包含顏色信息(純色材質)
//GLM_MATERIAL - 包含材質信息
//其中GLM_FLAT和GLM_SMOOTH不能同時指定
//GLM_COLOR和GLM_MATERIAL也不能同時指定
GLvoid glmWriteOBJ(GLMmodel* model, char* filename, GLuint mode);

//按mode指定模式使用當前的OPENGL繪製上下文(context)繪製模型
//mode參數同glmReadOBJ中的mode參數
GLvoid glmDraw(GLMmodel* model, GLuint mode);

//由模型生成OPENGL顯示列表並返回顯示列表索引號
//其中mode參數同glmWriteOBJ和glmDraw中的mode參數
GLuint glmList(GLMmodel* model, GLuint mode);

//合併模型中差別很小的頂點,epsilon參數指定要合併頂點間的最大差距
//推薦epsilon參數0.00001爲焊接模型的起點
GLvoid glmWeld(GLMmodel* model, GLfloat epsilon);

//讀取PPM格式的圖形文件
//返回一個24位色的圖象指針(可用於OPENGL紋理映射和圖象繪製函數)
//同時圖象尺寸存儲在width,height指針參數指定的地址中
glmReadPPM(char* filename, int* width, int* height);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章