⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3ds.h

📁 3D赛车游戏源代码-用Visual Studio 2005
💻 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 + -