#include #include #include "dff.h" void ReadBinMeshPC(geometry *geo, FILE *dff) { int i, j, k; int index; split *cursplit; fread(&geo->facetype, 4, 1, dff); fread(&geo->splitcount, 4, 1, dff); fread(&geo->indexcount, 4, 1, dff); /* Loop through splits. * PS2 Version doesn't use indices here. */ geo->splt = (split *) malloc(geo->splitcount*sizeof(split)); for (i = 0; i < geo->splitcount; i++) { cursplit = &geo->splt[i]; fread(&cursplit->indexcount, 4, 1, dff); fread(&cursplit->matindex, 4, 1, dff); cursplit->indices = (int *)malloc(cursplit->indexcount*4); cursplit->vertices = (float **) malloc(cursplit->indexcount*4); for (k = 0; k < geo->newuvsets; k++) cursplit->uv[k] = (float **) malloc(cursplit->indexcount*4); cursplit->vc =(unsigned char **)malloc(cursplit->indexcount*4); cursplit->normals = (float **) malloc(cursplit->indexcount*4); for (j = 0; j < cursplit->indexcount; j++) { cursplit->vertices[j] = (float *) malloc(3*4); for (k = 0; k < geo->newuvsets; k++) cursplit->uv[k][j] = (float *) malloc(2*4); cursplit->vc[j] = (unsigned char *) malloc(1*4); cursplit->normals[j] = (float *) malloc(3*4); /* Read index and copy vertex information to * split structure to be PS2 compatible. */ fread(&index, 4, 1, dff); cursplit->vertices[j][X] = geo->vertices[index][X]; cursplit->vertices[j][Y] = geo->vertices[index][Y]; cursplit->vertices[j][Z] = geo->vertices[index][Z]; for (k = 0; k < geo->newuvsets; k++) { cursplit->uv[k][j][U] = geo->uv[0][index][U]; cursplit->uv[k][j][V] = geo->uv[0][index][V]; } cursplit->vc[j][R] = geo->vc[index][R]; cursplit->vc[j][G] = geo->vc[index][G]; cursplit->vc[j][B] = geo->vc[index][B]; cursplit->vc[j][A] = geo->vc[index][A]; cursplit->normals[j][X] = geo->normals[index][X]; cursplit->normals[j][Y] = geo->normals[index][Y]; cursplit->normals[j][Z] = geo->normals[index][Z]; } cursplit->vertexcount = cursplit->indexcount; } }