OpenGL comment effacer une partie de l'ecran en gardant ce qu'il y a derriere? [Résolu]

Messages postés
546
Date d'inscription
vendredi 13 février 2004
Dernière intervention
9 janvier 2008
- - Dernière réponse : dletozeun
Messages postés
546
Date d'inscription
vendredi 13 février 2004
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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Dernière intervention
9 janvier 2008
1
3
Merci
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! :)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dletozeun
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Dernière intervention
9 avril 2008
0
Merci
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.
Commenter la réponse de Galmiza
Messages postés
65
Date d'inscription
dimanche 27 juillet 2003
Dernière intervention
21 avril 2006
0
Merci
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, @+
Commenter la réponse de kortin
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
5
0
Merci
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.
Commenter la réponse de luhtor
Messages postés
65
Date d'inscription
dimanche 27 juillet 2003
Dernière intervention
21 avril 2006
0
Merci
oups, j'ai dit une bétise. Désolé.
Commenter la réponse de kortin
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Dernière intervention
17 juin 2008
1
0
Merci
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
Commenter la réponse de Pamaury
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Dernière intervention
9 janvier 2008
1
0
Merci
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!!
Commenter la réponse de dletozeun

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.