Bonjour.
Je cherche simplement à afficher un polyhèdre dans une fenêtre.
Pour une raison que je ne comprends pas, l'aspect de celui-ci dépend des valeurs données à la fonction gluLookAt(...). Ainsi, lorsque je veux afficher un cube et que je choisis des valeurs plus grandes que 1.0 pour la position de la caméra, la fenètre n'affiche rien, reste noire. Lorsque je mets des valeurs <1.0, il m'affiche mon cube mais celui-ci est tronqué, ou carrément buggé. Je tiens a préciser que mon cube est petit (~1.5 de côté), qu'il est centré en (0,0,0) tout comme le point visé par la caméra.
Je ne suis qu'une débutante avec Opengl et Glut, j'ai sûrement fait des erreurs basiques...
Voici une partie de mon code:
Dans mon fichier principal:
Et dans les fonctions de la classe Polytope:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <iostream> #include <GL/glut.h> #include "Vertex.h" #include "Facets.h" #include "Polytope.h" using namespace std; void dessine() { Polytope poly("cube3.ext","cube3.ine", "cube3.ead"); poly.order_vertex(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(0.8,-0.8,-0.8,0,0,0,0,1,0); poly.dessine(); glutSwapBuffers(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(800,800); glutCreateWindow("Polytopes"); glutDisplayFunc(dessine); glutMainLoop(); }
Ne faîtes pas trop attention à mon implémentation des classes, les fonctions et les passages ont été vérifiés par ailleurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void Polytope::dessineface(Facets f) { vector<Vertex> adj; int n=f.adj_vertices.size(); for(int i=0;i<n;i++) { adj.push_back(find_vertex(f.adj_vertices[i])); } glBegin(GL_POLYGON); for(int i=0;i<n;i++) { glVertex3f(adj[i].x/3.,adj[i].y/3.,adj[i].z/3.); } glEnd(); glFlush(); } void Polytope::dessine() { glClear(GL_COLOR_BUFFER_BIT); for(int i=0;i<nb_facets;i++) { glColor4f(facets[i].a1/10.0 +0.5,facets[i].a2/10.0+0.5,facets[i].a3/10.0+0.5,1.0); dessineface(facets[i]); } glFlush(); }
Voilà, en espérant que j'ai été assez claire...
Partager