www.pudn.com > OpenGLLoad3DS.zip > 3DS.H


// 3ds.h: interface for the CLoad3DS class. 
// 
////////////////////////////////////////////////////////////////////// 
 
 
#if !defined(AFX_3DS_H__2B775F31_E9BD_4994_8B95_D486EB51145C__INCLUDED_) 
#define AFX_3DS_H__2B775F31_E9BD_4994_8B95_D486EB51145C__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
//>------ Primary Chunk, at the beginning of each file 
#define PRIMARY       0x4D4D 
 
//>------ Main Chunks 
#define OBJECTINFO    0x3D3D				// This gives the version of the mesh and is found right before the material and object information 
#define VERSION       0x0002				// This gives the version of the .3ds file 
#define EDITKEYFRAME  0xB000				// This is the header for all of the key frame info 
 
//>------ sub defines of OBJECTINFO 
#define MATERIAL	  0xAFFF				// This stored the texture info 
#define OBJECT		  0x4000				// This stores the faces, vertices, etc... 
 
//>------ sub defines of MATERIAL 
#define MATNAME       0xA000				// This holds the material name 
#define MATDIFFUSE    0xA020				// This holds the color of the object/material 
#define MATMAP        0xA200				// This is a header for a new material 
#define MATMAPFILE    0xA300				// This holds the file name of the texture 
 
#define OBJECT_MESH   0x4100				// This lets us know that we are reading a new object 
 
//>------ sub defines of OBJECT_MESH 
#define OBJECT_VERTICES     0x4110			// The objects vertices 
#define OBJECT_FACES		0x4120			// The objects faces 
#define OBJECT_MATERIAL		0x4130			// This is found if the object has a material, either texture map or color 
#define OBJECT_UV			0x4140			// The UV texture coordinates 
 
 
// Here is our structure for our 3DS indicies (since .3DS stores 4 unsigned shorts) 
struct tIndices {							 
 
	unsigned short a, b, c, bVisible;		// This will hold point1, 2, and 3 index's into the vertex array plus a visible flag 
}; 
 
// This holds the chunk info 
struct tChunk 
{ 
	unsigned short int ID;					// The chunk's ID		 
	unsigned int length;					// The length of the chunk 
	unsigned int bytesRead;					// The amount of bytes read within that chunk 
}; 
 
 
class CLoad3DS   
{ 
public: 
	CLoad3DS();								// This inits the data members 
 
	// This is the function that you call to load the 3DS 
	bool Import3DS(t3DModel *pModel, char *strFileName); 
 
private: 
	// This reads in a string and saves it in the char array passed in 
	int GetString(char *); 
 
	// This reads the next chunk 
	void ReadChunk(tChunk *); 
 
	// This reads the next large chunk 
	void ProcessNextChunk(t3DModel *pModel, tChunk *); 
 
	// This reads the object chunks 
	void ProcessNextObjectChunk(t3DModel *pModel, t3DObject *pObject, tChunk *); 
 
	// This reads the material chunks 
	void ProcessNextMaterialChunk(t3DModel *pModel, tChunk *); 
 
	// This reads the RGB value for the object's color 
	void ReadColorChunk(tMaterialInfo *pMaterial, tChunk *pChunk); 
 
	// This reads the objects vertices 
	void ReadVertices(t3DObject *pObject, tChunk *); 
 
	// This reads the objects face information 
	void ReadVertexIndices(t3DObject *pObject, tChunk *); 
 
	// This reads the texture coodinates of the object 
	void ReadUVCoordinates(t3DObject *pObject, tChunk *); 
 
	// This reads in the material name assigned to the object and sets the materialID 
	void ReadObjectMaterial(t3DModel *pModel, t3DObject *pObject, tChunk *pPreviousChunk); 
	 
	// This computes the vertex normals for the object (used for lighting) 
	void ComputeNormals(t3DModel *pModel); 
 
	// This frees memory and closes the file 
	void CleanUp(); 
	 
	// The file pointer 
	FILE *m_FilePointer; 
	 
	// These are used through the loading process to hold the chunk information 
	tChunk *m_CurrentChunk; 
	tChunk *m_TempChunk; 
 
}; 
 
#endif // !defined(AFX_3DS_H__2B775F31_E9BD_4994_8B95_D486EB51145C__INCLUDED_)