Bonjour,
j'aimerais savoir quel est la methode pour detecter un clic dans un sprite, un polygone texturé avec une image TGA qui comporte des parties transparentes.
j'arrive parfaitement a detecter un clic dans un polygone, avec la methode de picking.
exemple :
je fais des boutons (polygone rectangle + texture), la texture est chargée depuis une image au format TGA, cette image comporte de partie transparente.
comment detecter si le clic a eut lieu dans une partie du sprite ?
j'ai eut l'idee suivante :
je detecte si le clic a eut lieu dans le polygone avec la methode picking.
je connais donc le polygone qui a ete touché,
je vide le tampon GL_AUX0 avec du blanc par exemple.
je trace ce polygone texturé dans le tampon GL_AUX0
et je fais un glReadPixels(x, y, 1, 1,GL_RGBA, GL_UNSIGNED_BYTE, pixel);
x et y etant les coordonnées de la souris au moment du clic
puis si le pixel lu est a blanc, (de la couleur de vidange du tampon) c'est que le clic n'a pas eut lieu dans le "sprite"
sinon le clic a eut lieu dans le sprite.
je choisirais une couleur de vidange particuliere, car si le blanc est utilisé dans le sprite...
mais voila ça ne marche pas !
j'ai l'impression de ne pas lire le bon buffer !
je travaille en bouble buffer.
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
CODE:
/* je sauvegarde les buffers courant */
glGetIntegerv(GL_DRAW_BUFFER, drawBuffer);
glGetIntegerv(GL_READ_BUFFER, readBuffer);
/* je dessine dans le buffer auxiliere*/
glDrawBuffer(GL_AUX0);
/* couleur de vidange */
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
/* vider le tampon */
glClear(GL_AUX0);
/* afficher le polygone texturé */
lb[numEl].afficherElementGraphique();
/* je lit dans le buffer auxiliere */
glReadBuffer(GL_AUX0);
/* lire la couleur du pixel au coordonnée x,y */
glReadPixels(x, y, 1, 1,GL_RGB, GL_UNSIGNED_BYTE, pixel);
/* je restore les buffer courant
glDrawBuffer(*drawBuffer);
glReadBuffer(*readBuffer);
if (pixel[0] == 255 && pixel[1] == 255 && pixel[2] == 255)
{
"non - touché"
}
else
{
"touché !"
}
j'ai l'impression de ne pas lire le tampon GL_AUX0 ?
le pricipe est 'il bon ?
kawito