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

dletozeun 546 Messages postés vendredi 13 février 2004Date d'inscription 9 janvier 2008 Dernière intervention - 17 déc. 2005 à 20:08 - Dernière réponse : dletozeun 546 Messages postés vendredi 13 février 2004Date d'inscription 9 janvier 2008 Dernière intervention
- 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
dletozeun 546 Messages postés vendredi 13 février 2004Date d'inscription 9 janvier 2008 Dernière intervention - 19 déc. 2005 à 16:21
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! :)

Merci dletozeun 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

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