Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 13, 2025 09:09

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: C spinnt mal wieder
BeitragVerfasst: Sa Jul 08, 2006 14:19 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich will folgendes Format einlesen:

Code:
  1.  
  2.  
  3. 4 Byte integer = numvertices
  4. 4 Byte integer = numfaces
  5.  
  6. Loop solange bis alle vertices gelesen sind {
  7.   4 byte float = x coord
  8.   4 byte float = y coord
  9.   4 byte float = z coord
  10.  
  11.   4 byte float = nx coord
  12.   4 byte float = ny coord
  13.   4 byte float = nz coord
  14.  
  15.   4 byte float = u coord
  16.   4 byte float = v coord
  17. }
  18.  
  19. Loop solange bis alle faces gelesen sind {
  20.   1 byte char = wirkliche string länge
  21.   Array von 1 byte char * 255 Zeichen = Texture
  22.   4 byte integer = vertice index 0
  23.   4 byte integer = vertice index 1
  24.   4 byte integer = vertice index 2
  25. }
  26.  
  27.  


So versuche ich es verzweifelt zu lesen in C: (nachdem 8 face auslesen, kommen nur noch mülldaten aus dem face)
Code:
  1.  
  2. typedef struct sWorldFileHeader
  3. {
  4.     int numverts;
  5.     int numfaces;
  6. };
  7.  
  8. typedef struct sWorldFileVector
  9. {
  10.     float x;
  11.     float y;
  12.     float z;
  13. };
  14.  
  15. typedef struct sWorldFileTexcoord
  16. {
  17.     float u;
  18.     float v;
  19. };
  20.  
  21. typedef struct sWorldFileVertex
  22. {
  23.     sWorldFileVector Ver;
  24.     sWorldFileVector Nor;
  25.     sWorldFileTexcoord UV;
  26. };
  27.  
  28. typedef struct sWorldFileFace
  29. {
  30.     unsigned char length;
  31.     unsigned char Texture[255];
  32.     int VerIndices[3];
  33. };
  34.  
  35. void loadworld(char* filename)
  36. {
  37.     FILE *pFile = fopen (filename,"r");
  38.     if (pFile != NULL)
  39.     {
  40.         sWorldFileHeader header;
  41.         sWorldFileVertex v;
  42.         sWorldFileFace f;
  43.  
  44.         char vtext[255];
  45.  
  46.         ZeroMemory(&header, sizeof(header));
  47.         fread(&header, sizeof(header), 1, pFile);
  48.         sprintf(vtext, "verts: %d, faces: %d", header.numverts, header.numfaces);
  49.         gLog->WriteLine(vtext);
  50.  
  51.         verts = (sR3DVertex *)malloc(header.numverts*sizeof(sR3DVertex));
  52.         for (int i = 0; i < header.numverts; i++)
  53.         {
  54.             ZeroMemory(&v, sizeof(sWorldFileVertex));
  55.             fread(&v, sizeof(sWorldFileVertex), 1, pFile);
  56.             sprintf(vtext, "ver: %f %f %f, nor: %f %f %f, tex: %f %f", v.Ver.x, v.Ver.y, v.Ver.z, v.Nor.x, v.Nor.y, v.Nor.z, v.UV.u, v.UV.v);
  57.             gLog->WriteLine(vtext);
  58.  
  59.             verts[i].ver.x = v.Ver.x;
  60.             verts[i].ver.y = v.Ver.y;
  61.             verts[i].ver.z = v.Ver.z;
  62.             verts[i].normal.x = v.Nor.x;
  63.             verts[i].normal.y = v.Nor.y;
  64.             verts[i].normal.z = v.Nor.z;
  65.             verts[i].texcoord.s = v.UV.u;
  66.             verts[i].texcoord.t = v.UV.v;
  67.         }
  68.  
  69.         for (int i = 0; i < header.numfaces; i++)
  70.         {
  71.             ZeroMemory(&f, sizeof(sWorldFileFace));
  72.             fread(&f, sizeof(sWorldFileFace), 1, pFile);
  73.             sprintf(vtext, "texture: %s, indices: %d %d %d", f.Texture, f.VerIndices[0], f.VerIndices[1], f.VerIndices[2]);
  74.             gLog->WriteLine(vtext);
  75.  
  76.             sR3DFace *newface = new sR3DFace();
  77.             newface->vertindices[0] = &verts[f.VerIndices[2]];
  78.             newface->vertindices[1] = &verts[f.VerIndices[1]];
  79.             newface->vertindices[2] = &verts[f.VerIndices[0]];
  80.             faces->Add(newface);
  81.         }
  82.  
  83.         fclose(pFile);
  84.     }
  85. }
  86.  


Und so in Delphi welches einwandfrei funzt:

Code:
  1.  
  2. procedure TForm1.LoadWorld(filename:String);
  3. type
  4.   TWorldFileHeader = packed record
  5.     NumVerts,
  6.     NumFaces : Integer;
  7.   end;
  8.  
  9.   TWorldFileVector = packed record
  10.     X, Y, Z : Single;
  11.   end;
  12.  
  13.   TWorldFileTexcoord = packed record
  14.     U, V : Single;
  15.   end;
  16.  
  17.   TWorldFileVertex = packed record
  18.     Ver : TWorldFileVector;
  19.     Nor : TWorldFileVector;
  20.     UV  : TWorldFileTexcoord;
  21.   end;
  22.  
  23.   TWorldFileFace = packed record
  24.     Texture    : String[255];
  25.     VerIndices : array [0..2] of Integer;
  26.   end;
  27.  
  28.   function WorldFileVectorToTVector(_V : TWorldFileVector) : TVertex;
  29.   begin
  30.     Result.x := _V.X / 100;
  31.     Result.y := _V.y / 100;
  32.     Result.z := _V.z / 100;
  33.   end;
  34. var
  35.   F : File;
  36.   Header : TWorldFileHeader;
  37.   I      : INteger;
  38.   Ver    : TWorldFileVertex;
  39.   fac    : TWorldFileFace;
  40. begin
  41.   AssignFile(F, filename);
  42.   Reset(f, 1);
  43.  
  44.   Memo1.Lines.Clear;
  45.  
  46.   BlockRead(F, header, SizeOf(Header));
  47.  
  48.   Memo1.Lines.Add(Format('verts: %d, faces: %d',[header.numverts, header.numfaces]));
  49.  
  50.   SetLength(verts, header.numverts);
  51.   SetLength(faces, header.numfaces);
  52.   For I := 0 to header.numverts-1 do
  53.   begin
  54.     BlockRead(F, ver, SizeOf(ver));
  55.  
  56.     Memo1.Lines.Add(Format('ver: %f %f %f, nor: %f %f %f, tex: %f %f',[ver.ver.x, ver.ver.y, ver.ver.z, ver.nor.x, ver.nor.y, ver.nor.z, ver.UV.u, ver.UV.v]));
  57.  
  58.     verts[I].ver := WorldFileVectorToTVector(ver.ver);
  59.     verts[I].n := WorldFileVectorToTVector(ver.nor);
  60.     verts[I].u := ver.UV.U;
  61.     verts[I].v := ver.UV.V;
  62.   end;
  63.   For I := 0 to header.numfaces-1 do
  64.   begin
  65.     BlockRead(F, fac, SizeOf(fac));
  66.  
  67.     Memo1.Lines.Add(Format('shadername: %d:%s, indices: %d %d %d',[length(fac.Texture), fac.Texture, fac.VerIndices[0], fac.VerIndices[1], fac.VerIndices[2]]));
  68.  
  69.     faces[i].v[0] := @verts[fac.VerIndices[0]];
  70.     faces[i].v[1] := @verts[fac.VerIndices[1]];
  71.     faces[i].v[2] := @verts[fac.VerIndices[2]];
  72.   end;
  73.  
  74.   CloseFile(F);
  75. end;
  76.  
  77.  


Die datei zum lesen ist vollkommen in ordnung, hab sogar nochmal extra alles mitem hex editor überprüft.
Und wie gesagt, delphi liesst es einwandfrei... nur in C macht das mucken.

hat da wer ne idee, was da faul ist ?[/code]


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 08, 2006 15:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
was müssen denn für Daten korrekt rauskommen?
Auf den ersten Blick sieht es bei mir vernünftig aus.

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 08, 2006 16:16 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012


Leute es hat sich erledigt, ich hab ein dummes "b" vergessen.
Man sollte die datei auch binär öffnen :p



Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]