📄 3ds.h
字号:
//////////////////////////////////////////////////////////////////////////
// CLoad3DS类,载入3DS模型
//
// 3ds.h: CLoad3DS类的声明
//////////////////////////////////////////////////////////////////////////
#ifndef __3DS_H_INCLUDED__
#define __3DS_H_INCLUDED__
//------------------------------------------------------------
// 一些文件格式的宏定义
//------------------------------------------------------------
#define PRIMARY 0x4D4D
#define OBJECTINFO 0x3D3D
#define VERSION 0x0002
#define EDITKEYFRAME 0xB000
#define MATERIAL 0xAFFF
#define OBJECT 0x4000
#define MATNAME 0xA000
#define MATDIFFUSE 0xA020
#define MATMAP 0xA200
#define MATMAPFILE 0xA300
#define OBJECT_MESH 0x4100
#define OBJECT_VERTICES 0x4110
#define OBJECT_FACES 0x4120
#define OBJECT_MATERIAL 0x4130
#define OBJECT_UV 0x4140
//-------------------------------------------------------------------------------
// 文件格式的3D顶点定义
//-------------------------------------------------------------------------------
class CVector3
{
public:
float x, y, z;
};
//-------------------------------------------------------------------------------
// 文件格式的2D顶点定义
//-------------------------------------------------------------------------------
class CVector2
{
public:
float x, y;
};
//-------------------------------------------------------------------------------
// 文件格式的多边形面定义
//-------------------------------------------------------------------------------
struct tFace
{
int vertIndex[3]; // 顶点索引
int coordIndex[3]; // 纹理坐标索引
};
//-------------------------------------------------------------------------------
// 文件格式的材质信息定义
//-------------------------------------------------------------------------------
struct tMaterialInfo
{
char strName[255];
char strFile[255];
BYTE color[3];
int texureId;
float uTile;
float vTile;
float uOffset;
float vOffset;
} ;
//-------------------------------------------------------------------------------
// 文件格式的3D物体定义
//-------------------------------------------------------------------------------
struct t3DObject
{
t3DObject();
~t3DObject();
int numOfVerts; // 顶点数量
int numOfFaces; // 多边形数量
int numTexVertex; // 纹理坐标数量
int materialID; // 材质ID
bool bHasTexture; // 有纹理吗?
char strName[255]; // 名字
CVector3 *pVerts; // 顶点数组
CVector3 *pNormals; // 法线数组
CVector2 *pTexVerts; // 纹理坐标数组
tFace *pFaces; // 多边形数组
};
//-------------------------------------------------------------------------------
// 文件格式的3D模型定义
//-------------------------------------------------------------------------------
struct t3DModel
{
// 构造函数
t3DModel() : numOfObjects(0), numOfMaterials(0) {}
int numOfObjects; // 物体数
int numOfMaterials; // 材质数
vector<tMaterialInfo> pMaterials; // 材质数组
vector<t3DObject> pObject; // 物体数组
};
//-------------------------------------------------------------------------------
// 文件索引
//-------------------------------------------------------------------------------
struct tIndices
{
unsigned short a, b, c, bVisible;
};
//-------------------------------------------------------------------------------
// 文件块
//-------------------------------------------------------------------------------
struct tChunk
{
unsigned short int ID;
unsigned int length;
size_t bytesRead;
};
//-------------------------------------------------------------------------------
// 3DS文件载入类
//-------------------------------------------------------------------------------
class CLoad3DS
{
public:
// 构造函数
CLoad3DS();
// 加载模型
bool Import3DS(t3DModel *pModel, const char *strFileName);
private:
// 帮助函数
// 获取字符串
int GetString(char *);
// 读取文件块
void ReadChunk(tChunk *);
// 处理下一块
void ProcessNextChunk(t3DModel *pModel, tChunk *);
// 处理下一个物体块
void ProcessNextObjectChunk(t3DModel *pModel, t3DObject *pObject, tChunk *);
// 处理下一个材质块
void ProcessNextMaterialChunk(t3DModel *pModel, tChunk *);
// 读取颜色块
void ReadColorChunk(tMaterialInfo *pMaterial, tChunk *pChunk);
// 读取顶点
void ReadVertices(t3DObject *pObject, tChunk *);
// 读取顶点索引
void ReadVertexIndices(t3DObject *pObject, tChunk *);
// 读取纹理坐标
void ReadUVCoordinates(t3DObject *pObject, tChunk *);
// 读取材质
void ReadObjectMaterial(t3DModel *pModel, t3DObject *pObject, tChunk *pPreviousChunk);
// 清空资源
void CleanUp();
FILE *m_FilePointer; // 文件指针
tChunk *m_CurrentChunk; // 当前块
tChunk *m_TempChunk; // 临时块
};
//-------------------------------------------------------------------------------
// 3DS文件载入全局单件对象
//-------------------------------------------------------------------------------
extern CLoad3DS g_Load3DS;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -