here is the piece of my md2.cpp
Code:
// CMD2Model::LoadModel()
// access: public
// desc: loads model from file
int CMD2Model::LoadModel(char *modelFile)
{
FILE *filePtr; // file pointer
int fileLen; // length of model file
char *buffer; // file buffer
modelHeader_t *modelHeader; // model header
stIndex_t *stPtr; // texture data
frame_t *frame; // frame data
vector_t *vertexListPtr; // index variable
mesh_t *triIndex, *bufIndexPtr; // index variables
int i, j; // index variables
// open the model file
filePtr = fopen(modelFile, "rb");
if (filePtr == NULL)
return FALSE;
// find length of file
fseek(filePtr, 0, SEEK_END);
fileLen = ftell(filePtr);
fseek(filePtr, 0, SEEK_SET);
// read entire file into buffer
buffer = new char [fileLen+1];
fread(buffer, sizeof(char), fileLen, filePtr);
// extract model file header from buffer
modelHeader = (modelHeader_t*)buffer;
// allocate vertex list
vertexList = new vector_t [modelHeader->numXYZ * modelHeader->numFrames];
numVertices = modelHeader->numXYZ;
numFrames = modelHeader->numFrames;
frameSize = modelHeader->framesize;
for (j = 0; j < numFrames; j++)
{
frame = (frame_t*)&buffer[modelHeader->offsetFrames + frameSize * j];
vertexListPtr = (vector_t*)&vertexList[numVertices * j];
for (i = 0; i < numVertices; i++)
{
vertexListPtr[i].point[0] = frame->scale[0] * frame->fp[i].v[0] + frame->translate[0];
vertexListPtr[i].point[1] = frame->scale[1] * frame->fp[i].v[1] + frame->translate[1];
vertexListPtr[i].point[2] = frame->scale[2] * frame->fp[i].v[2] + frame->translate[2];
}
}
numST = modelHeader->numST;
st = new texCoord_t [numST];
stPtr = (stIndex_t*)&buffer[modelHeader->offsetST];
for (i = 0; i < numST; i++)
{
st[i].s = 0.0;
st[i].t = 0.0;
}
numTriangles = modelHeader->numTris;
triIndex = new mesh_t [numTriangles];
// point to triangle indexes in buffer
bufIndexPtr = (mesh_t*)&buffer[modelHeader->offsetTris];
// create a mesh (triangle) list
for (j = 0; j < numFrames; j++)
{
// for all triangles in each frame
for(i = 0; i < numTriangles; i++)
{
triIndex[i].meshIndex[0] = bufIndexPtr[i].meshIndex[0];
triIndex[i].meshIndex[1] = bufIndexPtr[i].meshIndex[1];
triIndex[i].meshIndex[2] = bufIndexPtr[i].meshIndex[2];
triIndex[i].stIndex[0] = bufIndexPtr[i].stIndex[0];
triIndex[i].stIndex[1] = bufIndexPtr[i].stIndex[1];
triIndex[i].stIndex[2] = bufIndexPtr[i].stIndex[2];
}
}
// close file and free memory
fclose(filePtr);
delete buffer;
modelTex = NULL;
currentFrame = 0;
nextFrame = 1;
interpol = 0.0;
return 0;
}