obj.h------obj模型格式解析
2011-02-18 10:08
148 查看
#ifndef _OBJ_H #define _OBJ_H #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <fstream> #include <vector> using namespace std; #define MAX_TEXTURES 100 // 最大的纹理数目 // 定义3D点的类,用于保存模型中的顶点 class CVector3 { public: float x, y, z; }; // 定义2D点类,用于保存模型的UV纹理坐标 class CVector2 { public: float x, y; }; // 面的结构定义 struct tFace { int vertIndex[4]; // 顶点索引 int coordIndex[4]; // 纹理坐标索引 }; // 材质信息结构体 struct tMaterialInfo { char strName[255]; // 材质名称 char strFile[255]; // 如果存在纹理映射,则表示纹理文件名称 BYTE color[3]; // 对象的RGB颜色 int texureId; // 纹理ID float uTile; // u 重复 float vTile; // v 重复 float uOffset; // u 纹理偏移 float vOffset; // v 纹理偏移 } ; // 对象信息结构体 struct t3DObject { int numOfVerts; // 模型中顶点的数目 int numOfFaces; // 模型中面的数目 int numTexVertex; // 模型中纹理坐标的数目 int materialID; // 纹理ID bool bHasTexture; // 是否具有纹理映射 char strName[255]; // 对象的名称 CVector3 *pVerts; // 对象的顶点 CVector3 *pNormals; // 对象的法向量 CVector2 *pTexVerts; // 纹理UV坐标 tFace *pFaces; // 对象的面信息 }; // 模型信息结构体 struct t3DModel { int numOfObjects; // 模型中对象的数目 int numOfMaterials; // 模型中材质的数目 vector<tMaterialInfo> pMaterials; // 材质链表信息 vector<t3DObject> pObject; // 模型中对象链表信息 }; // 下面是读入obj文件的类 class CLoadObj { public: CLoadObj(); ~CLoadObj() {}; public: // 将obj文件中的信息读入到模型中 bool ImportObj(t3DModel *pModel, char *strFileName); // 由于在obj文件中没有纹理/材质名称,只能手动设置 // materialID是在模型材质列表中的索引号 void SetObjectMaterial(t3DModel *pModel, int whichObject, int materialID); // 添加材质 void AddMaterial(t3DModel *pModel, char *strName, char *strFile, int r = 255, int g = 255, int b = 255); protected: // 读入对象,在ImportObj()中将调用该函数 void ReadObjFile(t3DModel *pModel); // 读入顶点信息,在ReadObjFile()中调用该函数 void ReadVertexInfo(); // 读入面信息,在ReadObjFile()中调用该函数 void ReadFaceInfo(); //获取每一行开头的关键字 void GetKeyWord(char* keyword); // 完成面信息的读入之后调用该函数 void FillInObjectInfo(t3DModel *pModel); // 计算顶点的法向量 void ComputeNormals(t3DModel *pModel); private: // 需要读入的文件指针 FILE *m_FilePointer; // 顶点链表 vector<CVector3> m_pVertices; // 面链表 vector<tFace> m_pFaces; // UV坐标链表 vector<CVector2> m_pTextureCoords; // 当前对象是否具有纹理坐标 bool m_bObjectHasUV; // 当前读入的对象是否是面 bool m_bJustReadAFace; }; #endif http://hi.baidu.com/lvsekafen/blog/item/f8799223f03beaa84623e894.html |
相关文章推荐
- 3D模型中obj文件格式解析
- GLTF数据格式解析,自制模型转换工具
- opengles加载obj格式3D模型含光照和纹理
- OpenGL ES 学习教程(六) 使用开源库 Assimp 将 Obj 模型 转换成自己的格式
- obj.cpp---------obj格式解析
- flash画图API:解析obj格式
- pcd,obj,mtl文件格式解析
- flash绘图API:解析obj格式
- Obj格式解析以及在Unity3D下导入测试
- 读取Obj格式的模型文件(Dx10)
- OBJ(3D模型)文件格式
- Obj格式模型 读取
- pcl:三维模型obj格式转成pcl常用点云处理格式.pcd+matlab:.ply<->.pcd+其他.stl,.obj,.ply等三维格式互相转化方法
- OpenGL ES 学习教程(六) 使用开源库 Assimp 将 Obj 模型 转换成自己的格式
- Mac下OpenGL环境搭建以及OpenGL解析渲染OBJ模型
- 解析OBJ模型并将其加载到Unity3D场景中
- Open GL es 2.0 简单加载Obj格式的模型文件
- 3D模型文件格式之OBJ详解
- 模型文件格式:off stl obj
- C#软渲染中导入obj格式模型