obj.h------obj模型格式解析
来源:互联网 发布:js onchange事件失效 编辑:程序博客网 时间:2024/05/10 18:26
using namespace std; #define MAX_TEXTURES 100 // 最大的纹理数目 // 定义3D点的类,用于保存模型中的顶点 // 定义2D点类,用于保存模型的UV纹理坐标 // 面的结构定义 // 材质信息结构体 // 对象信息结构体 // 模型信息结构体 // 读入顶点信息,在ReadObjFile()中调用该函数 // 读入面信息,在ReadObjFile()中调用该函数 //获取每一行开头的关键字 // 完成面信息的读入之后调用该函数 // 计算顶点的法向量 http://hi.baidu.com/lvsekafen/blog/item/f8799223f03beaa84623e894.html
#ifndef _OBJ_H
#define _OBJ_H
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fstream>
#include <vector>
class CVector3
{
public:
float x, y, z;
};
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);
void ReadVertexInfo();
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
- obj.h------obj模型格式解析
- obj.cpp---------obj格式解析
- opengl解析obj模型文件
- obj模型
- 读取Obj格式的模型文件(Dx10)
- C++读入obj格式模型文件
- flash绘图API:解析obj格式
- 3D模型中obj文件格式解析
- 网格模型obj文件及其纹理解析
- obj
- 将OBJ模型转换为.h文件给Xcode使用
- obj格式简介(转)
- OBJ格式详解
- obj格式简介
- obj格式简介
- obj格式介绍
- unity导出obj格式
- obj + mtl 格式说明
- Cookie注入是怎样产生的
- Cookie注入是怎样产生的
- 据说,证监会已承认证券交易所选址时没看好风水...
- 电子档案管理系统
- ISE打开verilog工程无法显示源文件问题
- obj.h------obj模型格式解析
- 解决Error executing aapt.
- 跨站脚本执行漏洞详解
- Java中的volatile关键字
- HTTP协议之请求
- 解决局域网共享文件无权访问
- obj模型显示示例
- C#中的数组谈
- oracle存储过程语法