www.pudn.com > 3dsMFCRender.rar > glStructures.h, change:1998-05-23,size:4562b
//////////////////////////////////////////////////////////////////////
//
// glstructures.h: definitions for the C3dsReader, TriObject and TriList class.
// glstructures definitions version 1.5
// Sivert L. Nielsen
// (C) 1998 - Sivert L. Nielsen (sivni@qeocities.com)
// This code may be freely distributed and used in programs so long
// as this notice appears in the code.
//
// One world, one mind.
//
//
//////////////////////////////////////////////////////////////////////
#ifndef GLSTRUCTURES_H
#define GLSTRUCTURES_H
const long SizeofChunk = sizeof(unsigned short)+sizeof(long);
//PI
#define M_PI 3.141592653589
#define M_2PI 6.283185307178
// Declare Chunk structure
typedef struct {
unsigned short id;
long len;
} Chunk3DS;
// Declare Chunk Identifiers
const unsigned short M3DMAGIC = 0x4d4d;
const unsigned short CMAGIC = 0xc23d;
const unsigned short M3D_VERSION = 0x0002;
const unsigned short MDATA = 0x3d3d;
const unsigned short MESH_VERSION = 0x3d3e;
const unsigned short MAT_ENTRY = 0xafff;
const unsigned short MASTER_SCALE = 0x0100;
const unsigned short NAMED_OBJECT = 0x4000;
const unsigned short MAT_NAME = 0xa000;
const unsigned short MAT_AMBIENT = 0xa010;
const unsigned short MAT_DIFFUSE = 0xa020;
const unsigned short MAT_SPECULAR = 0xa030;
const unsigned short MAT_SHININESS = 0xa040;
const unsigned short MAT_TRANSPARENCY = 0xa050;
const unsigned short MAT_SHADING = 0xa100;
const unsigned short N_TRI_OBJECT = 0x4100;
const unsigned short POINT_ARRAY = 0x4110;
const unsigned short FACE_ARRAY = 0x4120;
const unsigned short MSH_MAT_GROUP = 0x4130;
const unsigned short SMOOTH_GROUP = 0x4150;
const unsigned short MESH_MATRIX = 0x4160;
const unsigned short COLOR_24 = 0x0011;
const unsigned short LIN_COLOR_24 = 0x0012;
const unsigned short COLOR_F = 0x0010;
const unsigned short INT_PERCENTAGE = 0x0030;
const unsigned short FLOAT_PERCENTAGE = 0x0031;
const unsigned short N_DIRECT_LIGHT = 0x4600;
const unsigned short N_CAMERA = 0x4700;
const unsigned short KFDATA = 0xb000;
const unsigned short KFHDR = 0xb00a;
const unsigned short KFSEG = 0xb008;
const unsigned short OBJECT_NODE_TAG = 0xb002;
const unsigned short NODE_ID = 0xb030;
const unsigned short NODE_HDR = 0xb010;
const unsigned short PIVOT = 0xb013;
const unsigned short POS_TRACK_TAG = 0xb020;
const unsigned short ROT_TRACK_TAG = 0xb021;
const unsigned short SCL_TRACK_TAG = 0xb022;
#define W_TENS 1
#define W_CONT (1<<1)
#define W_BIAS (1<<2)
#define W_EASETO (1<<3)
#define W_EASEFROM (1<<4)
//One material
struct tMaterial {
float ambientColor[3];
float diffuseColor[3];
float specularColor[3];
float emissiveColor[3];
float shininess;
float transparency;
};
// Define a material symbol table
const int MaxMaterialDictEntries = 256;
class MaterialDict {
private:
char* m_name[MaxMaterialDictEntries];
long m_count;
tMaterial m_material[MaxMaterialDictEntries];
public:
void Clear(void)
{
for (int i = 0; i m_count; i++) {
if (m_name[i] != NULL) {
delete [] m_name[i];
}
}
m_count = 0;
}
MaterialDict(void)
{
m_count = 0;
for (int i = 0; i MaxMaterialDictEntries; i++) {
m_name[i] = NULL;
}
}
~MaterialDict(void)
{
Clear();
}
tMaterial* Lookup(char* name)
{
for (long i = 0; i m_count; i++) {
if (strcmp(name, m_name[i]) == 0) {
return &m_material[i];
}
}
return NULL;
}
void Add(char* name, tMaterial& material)
{
if (Lookup(name) == NULL) {
m_name[m_count] = new char[strlen(name)+1];
strcpy(m_name[m_count], name);
m_material[m_count++] = material;
}
}
tMaterial* operator[](int index)
{
if (index >= 0 && index m_count) {
return &m_material[index];
}
return NULL;
}
};
struct tVector //tVector
{
float x,y,z;
};
struct tVectorRGBA //tVectorRGBA
{
float r,g,b,a;
};
struct tQuaternion //tQuaternion
{
float x,y,z,a;
};
struct Key //Key
{
float tension;
float continuity;
float bias;
float easeto;
float easefrom;
long time;
};
struct Poskey //Poskey
{
float tension;
float continuity;
float bias;
float easeto;
float easefrom;
long time;
float pos[3];
};
struct Rotkey //Rotkey
{
float tension;
float continuity;
float bias;
float easeto;
float easefrom;
long time;
float angle;
float axis[3];
};
#endif