Pisze gre 3D, i już kończe pisanie enginu graficznego, mam jedynie problem z zapisem/odczytem drzewa BSP z pliku. Drzewo generowane jest 100% poprawnie.
Poniżej zamieszczam te procedury, może ktoś wie co jest nie tak :/
Zapis:
void zapiszNODE(FILE *f, BSP_NODE *node)
{
FACE_LIST *temp;
long int ile_w=0;
long int tmp;
fwrite(node, sizeof(BSP_NODE), 1, f);
temp=node->onplane; // liczy ile scian jest w NODE -> lista jednokierunkowa
while (temp!=NULL){
ile_w++;
temp=temp->next;
}
fwrite(&ile_w, 4, 1, f); // zapisz ile scian
temp=node->onplane; // zapisuje all sciany
for (int i=0; i<ile_w; i++)
{
fwrite(temp->face, sizeof(FACE), 1, f);
temp=temp->next;
}
tmp=1;
if (node->front==NULL) tmp=0;
fwrite(&tmp, 4, 1, f);
tmp=1;
if (node->back==NULL) tmp=0;
fwrite(&tmp, 4, 1, f); // po ścianach zapisujemy czy są gałęzie (PRZÓD, TYŁ)
if (node->front!=NULL) zapiszNODE(f, node->front); // \
if (node->back !=NULL) zapiszNODE(f, node->back); // / Zapisujemy gałęzie
}
void zapisz(void)
{
FILE *file;
file = fopen("mapa.bsp", "w"); // otwieramy plik do zapisu
zapiszNODE(file, tree->root); // wywołujemy zapis
fclose(file); // zamykamy plik
}
Odczyt:
void LOAD_NODE(FILE *f, BSP_NODE *node)
{
long int ile_w,front,back;
FACE *temp;
node=(BSP_NODE*)malloc(sizeof(BSP_NODE));
fread(node, sizeof(BSP_NODE), 1, f);
node->onplane = NULL;
node->front=NULL;
node->back=NULL;
fread(&ile_w, 4, 1, f);
for (int i=0; i<ile_w; i++)
{
temp = NULL;
temp = (FACE*)malloc(sizeof(FACE));
fread(temp, sizeof(FACE), 1, f);
add_node(temp, &tree->face);
add_node(temp, &node->onplane);
}
fread(&front, 4, 1, f);
fread(&back, 4, 1, f);
if (front==1) LOAD_NODE(f, node->front);
if (back==1) LOAD_NODE(f, node->back);
}
int Load_bsp(void)
{
FILE *file;
file = fopen("mapa.bsp", "r");
if(file==NULL) return FALSE;
tree=(BSP_TREE*)malloc(sizeof(BSP_TREE));
tree->root=NULL;
tree->face=NULL;
LOAD_NODE(file, tree->root);
fclose(file);
return TRUE;
}