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

Résolu
Signaler
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
-
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
-
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

Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
1
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! :)
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
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.
Messages postés
65
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
21 avril 2006

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, @+
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
65
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
21 avril 2006

oups, j'ai dit une bétise. Désolé.
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
3
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
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
1
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!!