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_)