Ich programmiere mir gerade einen 3D modelleditor. Nur leider macht die Exportfunktion schwierigkeiten:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
void CPartlist::ExportToFile(LPCSTR Filename)
{
//Als erstes die Gesamtzahl der Vertices/Indices ermitteln
int iNumVertices=0;
int iNumIndices=0;
m_PartIt=m_Partliste.begin();
for(int i=0; i<m_Partliste.size(); i++)
{
iNumVertices+=(*m_PartIt)->GetNumVertices();
iNumIndices+=(*m_PartIt)->GetNumIndices();
m_PartIt++;
}
//Jetzt entsprechene Speicher reservieren, die V und I kopieren und in eine SDatei schreiben!
TexturedVertex* Vertices=new TexturedVertex[iNumVertices];
TexturedVertex* pVertices=Vertices;//Schreibcursor für die Schleife
//Aus vielen kleinen Vertexfelder ein großes machen:
unsigned short* Indices=new unsigned short[iNumIndices];
unsigned short* pIndices=Indices;//s. o.
//Jetzt in einer Schleiffe alle VertexDaten in Vertices kopeiren
int iTempNumIndices=0;
m_PartIt=m_Partliste.begin();
for(i=0; i<m_Partliste.size(); i++)
{
memcpy(pVertices, (*m_PartIt)->GetVertices(), sizeof(TexturedVertex)*(*m_PartIt)->GetNumVertices());
pVertices+=(*m_PartIt)->GetNumVertices();
memcpy(pIndices, (*m_PartIt)->GetIndices(), sizeof(unsigned short)*(*m_PartIt)->GetNumIndices());
//Die Indices sind ja alle relativ, Dehalb müssen sie alle hochgezählt werden
for(int i2=0; i<(*m_PartIt)->GetNumIndices(); i++)
{
pIndices[i2]+=iTempNumIndices;
}
iTempNumIndices+=(*m_PartIt)->GetNumVertices();
pIndices+=(*m_PartIt)->GetNumIndices();//Den Schreibcursor weiter setzten
m_PartIt++;
}
//Jetzt alle Vertices und Indices in die Datei schreiben
char cDateiname[16], cTexturname[16];
sprintf(cTexturname, "default.png");
sprintf(cDateiname, "%s.c3m", Filename);
FILE* Datei=fopen(cDateiname, "w");
fwrite(&iNumVertices, sizeof(int), 1, Datei);
fwrite(Vertices, sizeof(TexturedVertex), iNumVertices, Datei);
fwrite(&iNumIndices, sizeof(int), 1, Datei);
fwrite(Indices, sizeof(unsigned short), iNumIndices, Datei);
fwrite(cTexturname, sizeof(char), 16, Datei);
fclose(Datei);
//Den temporären Speicher wieder freigeben
delete[] Vertices;
delete[] Indices;
}
|
Wenn ich die ein Modell exportiere, und anschließend verscuh zu laden, stimmen die Daten nicht mehr. Komischerweise sind die Vertexdaten bis zu einem bestimmetne Punkt richtig, danach enthalten sie nur noch Quatsch. Bei den Indexdaten ist es genau das selbe.
Der Texturname kann allerdings fehlerfrei gelesen weden.
Es scheint also so, als ob die Schleife, die die Speicherbereich zusammenkopieren soll, bei den ersten 2 Durchgängen funktioniert und ab dann nicht mehr. Hat jemand ne Ahnung woran das liegen könnte?
Wie man sehen kann, hab ich versucht für den neuen Speicherbereich so ne Art Schreibcursor zu benutzen. Gerade bei einem Test, konnte er die erste Gruppe problemlos schreiben, bei der 2 waren alle Werte nur noch Blödsinn. Liegt es also evtl. am Schreibcursor?