langage : C++, OpenGL
environnement : cygwin
compilateur : g++
----------------------------
Bonjour,
Je m'arrache les cheveux depuis deux jours sur un bug fantôme. J'ai mis
presque toute mon équipe à contribution, en vain. Peut être que vous pourrez m'aider.
J'ai un vecteur de segments. Je voudrais afficher chacun avec une couleur qui l'identifie de façon unique. Voici mon code :
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
33
34
35 // Conversion de mon identifiant en valeurs rgb : void id2rgb(const unsigned int &id, unsigned char &r, unsigned char &g, unsigned char &b){ unsigned int rfilter = 0x000000FF; unsigned int gfilter = 0x0000FF00; unsigned int bfilter = 0x00FF0000; unsigned int rint = rfilter & id; unsigned int gint = gfilter & id; gint = gint>>8; unsigned int bint = bfilter & id; bint = bint>>16; r = (unsigned char)rint; g = (unsigned char)gint; b = (unsigned char)bint;}; //affichage de mon tampon : unsigned char r, g, b; glDrawBuffer(GL_BACK); for(unsigned int i=0; i<_segments.size(); i++){ // parcours de tous les //segments, leur numéro // dans le vecteur est leur //identifiant if(i<16777215) {// correspondant à l'identifiant maximal pouvant être //contenue dans les valeurs (r,g,b) id2rgb(i, r, g, b); glLineWidth(1.); glShadeModel(GL_FLAT); glBegin(GL_LINES); glColor3ub(r,g,b); glVertex3f( _segments[i]._debut.get_x(), _segments[i]._debut.get_y(), _segments[i]. _debut.get_z()); glVertex3f( _segments[i]._fin.get_x(), _segments[i]._fin.get_y(), _segments[i]._fin.get_z()); glEnd();}} glutSwapBuffers();
Or, dans l'image que j'obtiens, il existe plusieurs segments avec le même identifiant !!! J'ai évidemment écrit la fonction inverse de id2rgb :
mais, les instructions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void rgb2id(const unsigned char &r, const unsigned char &g, const unsigned char &b, unsigned int &id){ unsigned int rint = (int)r; unsigned int gint = (int)g; unsigned int bint = (int)b; gint= gint<<8; bint= bint<<16; id= rint+gint+bint;};
Bref, je suis clouée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int a, b; cin >> a; id2rgb(a,r,g,b); rgb2id(r,g,b,b); cout <<b; //me renvoie toujours un b identique à a.
Merci pour votre aide,
Audrey
legeaiau@etu.utc.fr
Partager