Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Daten werden nicht richtig in die Datei geschrieben
Hi
Ich programmiere zur Zeit eine kleine Engine. Nun bin ich dran mit dem eigenen Modelformat. Ich habe dafür einen eigenen Formatkonverter geschrieben. Und in der Engine habe ich den Loader des Modelformates programmiert.
Doch nun werden die Daten falsch in die Datei geschrieben, ich weiss leider nicht wieso.
Hier ist ein Codeausschnitt des Formatkonverters:
C-/C++-Quelltext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Mit dem Schreiben beginnen
m_File.write(reinterpret_cast<char*>(&m_NumMeshes), sizeof(unsignedint));
for(unsignedint i =0; i < m_NumMeshes; ++i)
{
m_File.write(reinterpret_cast<char*>(&m_ModelData.NumVertices[i]), sizeof(unsignedint));
for(unsignedint v =0; v < m_ModelData.NumVertices[i]; ++v)
{
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].posx), sizeof(float));
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].posy), sizeof(float));
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].posz), sizeof(float));
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].normalx), sizeof(float));
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].normaly), sizeof(float));
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].normalz), sizeof(float));
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].texx), sizeof(float));
m_File.write(reinterpret_cast<char*>(&m_Model[i].Vertices[v].texy), sizeof(float));
}
}
Hier ist ein Codeausschnitt des Loadercodes für das Modelformat:
Beim Auslesen der Datei wird der Vector NumVertices nur mit den Daten 3624 gefüllt. Diese Anzahl von Vertices entspricht der Anzahl der Vertices des ersten Meshes des Models.
Ich nehme an, dass das der Fehler ist, dass das Model nicht richtig angezeigt wird.
Hier noch ein Bild von dem gerndertem Model, welches nicht vollständig angezeigt wird. Es sollte eine Kugel darstellen.
Tatsächlich, ich habe die Datei mit ios:in geöffnet.
Doch wenn ich nun die Datei so öffne, wird nichts gerendert, kommt lediglich ein weisser Bildschirm.
C-/C++-Quelltext
1
m_File.open(Filename, ios::binary);
Die Datei beim Konverter habe ich zuvor ebenfalls mit ios:out geöffnet und dann hineingeschrieben. Das habe ich nun ebenfalls geändert, doch es funktioniert immer noch nicht, kommt ebenfalls noch ein weisser Bildschirm, warum?
Nutz doch mal spasseshalber den << bzw >> Operator zum Lesen un Schreiben. Sprich statt "m_File.read(reinterpret_cast<char*>(&m_NumMeshes), sizeof(unsigned int));" sowas wie "m_File >> m_NumMeshes;" (übrigens kann man mehrere >> bzw. << "hintereinander" packen).
Was kann falsch sein, wenn der Wert von m_NumVertices plötzlich auf 3270754304 steigt? Der Wert sollte jedoch 378 aufweisen.
Ok mache ich mal, wird dieser Code ebenfalls in einer Binären Datei angezeigt? mit m_File << "" << m_NumVertices << endl;?
Ich geh mal davon aus dass du nun sowohl binär schreibst als auch liest!? Schau mal was in der Datei an der Stelle für ein Wert steht und überprüf ob dein Programm auch von der richtigen Stelle in der Datei liest.