OpenGL et C++ : tampon d'identifiants
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:
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 :
Code:
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;}; |
mais, les instructions :
Code:
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. |
Bref, je suis clouée.
Merci pour votre aide,
Audrey
legeaiau@etu.utc.fr