OpenGL comment effacer une partie de l'ecran en gardant ce qu'il y a derriere?

Résolu
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 17 déc. 2005 à 20:08
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 19 déc. 2005 à 16:21
Bonjour

Oui ma question est loin d'etre clair!
Donc je precise:
En fait j'affiche une map en 3D sous opengl avec devant une interface graphique elle meme codéé avec opengl
En fait j'aimerais savoir comment je peux effacer une partie de l'interface apres avoir tout dessiner a l'ecran, pour faire apparaitre la map a la place, tel que dans photoshop lorsque l'on utilise les calques!
Peut faut t'il créer des calques: 1 pour la scene, 1 pour l'interface mais je ne vois pas comment...
Ou alors sinon peut etre y a t'il moyen apres avoir dessiner la scene, de donner a opengl les zones dans lesquelles l'interface ne doit pas etre dessinée?

Merci.

7 réponses

dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
19 déc. 2005 à 16:21
Bon voila ca marche...
Le code ci-dessus est bien correct il fallait juste prciser a windows que j'utilise le stencil buffer pour qu'il créé un emplacement memoire pour celui ci! Bref c'est tout con , il fallait juste remplacer un 0 par un 1!

Merci Luhtor! :)
3
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
17 déc. 2005 à 22:48
Bah une fois que ton back buffer est modifié, il est modifié, tu ne peux pas revenir en arriere.

Une solution est de réafficher la scene puis la partie que tu veux garder de l'interface.

Sinon, tu fais 2 rendus, un pour la scene l'autre pour l'interface, et
tu peux modifier à ta guise le rendu de l'interface avant de l'afficher
par dessus la scene.



Je ne peux que te conseiller la premiere.
0
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 avril 2006
17 déc. 2005 à 23:08
Je n'ai jamais essayer ce genre de chose, mais il me semble que le tampon stencil est fait pour ça !



Regardes sur google, et donnes des nouvelles.



bonne progr, @+
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
17 déc. 2005 à 23:24
Utilise le test de scissor, si ta zone est rectangulaire.



void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)



A chaque fois que tu demandes un affichage ou un effacement le test de
scissor est effectué. Donc tu peux effectuer un glClear apres ca, ca
n'affectera que la zone rectangulaire définie.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 avril 2006
17 déc. 2005 à 23:31
oups, j'ai dit une bétise. Désolé.
0
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
18 déc. 2005 à 10:22
Non tu n'a pas dit une bétise: j'ai déjà fait çà avec le tampon stencil, d'ailleurs c'est le même principe que pour les réflexion:
tu configure le stencil
tu dessine dans la zone où tu veux autoriser l'affichage
tu reconfigure le stencil
tu affiches
C'est vrai que c'est plus complexe
Pour le glScissor je n'y avait pas pensé

A m a u r y
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
18 déc. 2005 à 12:12
j'essaies de metre en place le stencil buffer mais ca marche pas pas et ca rame a max!!!
voila ce que je fait:(avant bien sur , j'efface le stencil buffer avec glClear dans la fct de dessin principale)

//ici je dessine la zone qui peut etre remplie, dans le stencil buffer
glColorMask(0, 0, 0, 0);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glBegin(GL_QUADS);
glTexCoord2d(0.1f,0.0f); glVertex2f(0.1f,0.72f);
glTexCoord2d(0.1f,0.17f); glVertex2f(0.1f,0.90f);
glTexCoord2d(0.2f,0.17f); glVertex2f(0.2f,0.90f);
glTexCoord2d(0.2f,0.0f); glVertex2f(0.2f,0.72f);
glEnd();

//ici je dessine un polygone par dessus qui empiete sur cette zone, il doit donc etre en partie effacé
glColorMask(1, 1, 1, 1);
glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glColor4f(0.8,0.8,0.8,0.9);
glBindTexture(GL_TEXTURE_2D,interElem[0]);
glBegin(GL_QUADS);
glTexCoord2d(0.0f,1.0f); glVertex2f(0.0f,1.0f);
glTexCoord2d(0.0f,0.0f); glVertex2f(0.0f,0.75f);
glTexCoord2d(1.0f,0.0f); glVertex2f(1.0f,0.75f);
glTexCoord2d(1.0f,1.0f); glVertex2f(1.0f,1.0f);
glEnd();
glDisable(GL_STENCIL_TEST);

// ensuite je dessine normalement sans le stencil buffer les autres objets...

Mais ca marche pas , ca donne aucun resultat ( meme resultat que sans stencil buffer) et en plus ca ralenti a fond : 2 fps!!
0
Rejoignez-nous