Hallo, ich mal wieder,
ich bastel gerade an einem kleinen eigenen binären 3D Modellformat, da ply nicht das kann was ich brauche und es ASCII ist.
Jetzt habe ich immerhin einen Konverter der korrekt von ply nach "bbm" (Name für mein Format) konvertieren kann, das heißt es werden die Daten (Vertices, TextKoords, Normalen und Indices) ausgelesen und im bbm abgespeichert. Vor den Daten hängt noch ein Header der wie folgt aussieht:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
struct bbmHeader{
char signatur[3]; // "bbm"
char version; // 1
unsigned int dataCount; // für Vertices, TexKoords, Normalen (immer gleiche Anzahl)
unsigned int indicesCount; // für Indices
char boneUse; // 0/1 | noch nicht eingebaut
char boneCount; // pro vertex, sollte > 0 sein wenn boneUse = 1 | noch nicht eingebaut
};
|
Jetzt versuche ich die Daten wieder auszulesen (
vertex, texCoord structs):
|
C-/C++-Quelltext
|
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
|
bool bbmFile::load(string path){
ifstream file(path);
if(!file.good()){
return false;
}
// Header
file.read(reinterpret_cast<char*>(&m_header), sizeof(bbmHeader));
if(m_header.signatur[0] != 'b' || m_header.signatur[1] != 'b' || m_header.signatur[2] != 'm' || m_header.version != 1){
return false;
}
// Daten
m_vertices.resize(m_header.dataCount);
m_texCoords.resize(m_header.dataCount);
m_normals.resize(m_header.dataCount);
m_indices.resize(m_header.indicesCount);
file.read(reinterpret_cast<char*>(&m_vertices[0]), sizeof(vertex)*m_header.dataCount);
file.read(reinterpret_cast<char*>(&m_texCoords[0]), sizeof(texCoord)*m_header.dataCount);
file.read(reinterpret_cast<char*>(&m_normals[0]), sizeof(vertex)*m_header.dataCount);
file.read(reinterpret_cast<char*>(&m_indices[0]), sizeof(unsigned int)*m_header.indicesCount);
file.close();
return true;
}
|
Und stelle fest das die letzten paar Indices fehlen (ich habe das testweise ausgeben lassen)! Im ply file (die 3 am Anfang ignorieren):
|
Quellcode
|
1
2
3
4
5
6
|
3 0 1 2
3 3 4 5
3 6 7 8
3 9 10 11
3 12 13 14
3 15 0 2
|
Und in der Ausgabe:
|
Quellcode
|
1
2
3
4
5
6
|
0 1 2
3 4 5
6 7 8
9 10 11
12 0 0
0 0 0
|
Die Daten in der Datei stimmen, das habe ich mit einem Hex Editor geprüft (letzten paar Werte mit ply Datei verglichen). Daraus folgt das es auch nicht am ply loader liegen kann (den ich sowieso schon ewig benutze und funktioniert).
Es werden auch die restlichen Daten komplett eingelesen, also in m_vertices, m_normals, m_texCoords stehen die korrekten Werte. Der "indicesCount" im Header passt auch zu dem im ply file.
Also: wo liegt der Fehler? Ich seh ihn nicht...