Hey
Bei der Kompilierung meines Übungsprogramms für OpenGL 2.1 (Jaja
) habe ich einen internen Compilerfehler (EDIT: "Fehlerbehandlungsroutinen doppelt betreten") von g++ bekommen. Ich habe durch Auskommentieren herausgefunden, dass es sich um meine loadMesh-Funktion handelt. Es wäre sehr nett, wenn ihr kurz einen Blick darauf werfen könntet:
|
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
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
|
int loadMesh(const std::string& filename)
{
std::ifstream file(filename);
if(!file.is_open()){
std::cout << "Error: \"" << filename << "\" doesn't exist!" << std::endl;
return -1;
}
int id = glGenLists(1);
std::vector<vec3> vertices;
std::vector<vec3> normals;
std::string line;
vec3 v;
int a, b;
int c, d;
int e, f;
glNewList(id, GL_COMPILE);
glBegin(GL_TRIANGLES);
while(!file.eof()){
std::getline(file, line);
if(line[0] == 'v'){
if(line[1] == 'n'){
std::sscanf(line.c_str(), "vn %f %f %f\n", &v[0], &v[1], &v[2]);
normals.push_back(v);
}
else{
std::sscanf(line.c_str(), "v %f %f %f\n", &v[0], &v[1], &v[2]);
vertices.push_back(v);
}
}
else if(line[0] == 'f'){
std::sscanf(line.c_str(), "f %i//%i %i//%i %i//%i\n", &a, &b, &c, &d, &e, &f);
glVertex3fv(vertices[a - 1]);
glNormal3fv(vertices[b - 1]);
glVertex3fv(vertices[c - 1]);
glNormal3fv(vertices[d - 1]);
glVertex3fv(vertices[e - 1]);
glNormal3fv(vertices[f - 1]);
}
}
glEnd();
glEndList();
file.close();
return id;
}
|
vec3 ist ein einfaches typedef für ein Array aus drei floats.
Das wahrscheinlichste ist entweder die Displayliste oder das sscanf, glaube ich
Danke für jegliche Hilfe
PS: Ich verwende Ubuntu 13.04 mit g++ 4.7.3