Drzewo BSP

ADuch
  • Rejestracja: dni
  • Ostatnio: dni
0

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:

Kopiuj
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:

Kopiuj
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;
 }
AklimX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1218
ADuch
  • Rejestracja: dni
  • Ostatnio: dni
0

Już wiem co było nie tak =D przy fopen zmieniłem "w" na "wb", podobnie przy "r", i jeszcze wróciłem do poprzedniej wersji nagłówka funkcji odczytującej tzn. zamiast BSP_NODE *node, dałem BSP_NODE **node :D i wszystko gra...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.