IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

stopper glColor4f


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 34
    Points
    34
    Par défaut stopper glColor4f
    Me taper pas svp

    J'ai un pb avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    glLoadIdentity( );
    	glEnable(GL_BLEND);
    	glBegin(GL_QUADS);
    		glColor4f(0,0,255,(float)deg_trans/255);
    		glVertex2f(get_realcoor_x(),get_realcoor_y());
    		glVertex2f(get_realcoor_x()+largeur,get_realcoor_y());
    		glVertex2f(get_realcoor_x()+largeur,get_realcoor_y()+hauteur);
    		glVertex2f(get_realcoor_x(),get_realcoor_y()+hauteur);
    	glEnd( );
    	glDisable(GL_BLEND);
     
    	glLoadIdentity( );
    	glEnable(GL_BLEND);
    	glBegin(GL_QUADS);
    		glVertex2f(get_realcoor_x()+100,get_realcoor_y()+100);
    		glVertex2f(get_realcoor_x()+largeur+100,get_realcoor_y()+100);
    		glVertex2f(get_realcoor_x()+largeur+100,get_realcoor_y()+hauteur+100);
    		glVertex2f(get_realcoor_x()+100,get_realcoor_y()+hauteur+100);
    	glEnd( );
    	glDisable(GL_BLEND);
    Le deuxieme objet est aussi bleu, comment je dois faire pour qu'il n'ai pas de couleur? (donc la couleur par defaut)

    Ne me dite pas de mettre la couleur par defaut, le pb est plus complexe, en faite ce deuxieme objet contient une texture et donc il ne doit pas avoir de couleur particuliere.

    pour info: ceux qui doivent comprendre comprendrons , je suis en trai n de passer ma bibliotheque graphique en opengl, sans asser par plein de surface sdl.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Re: stopper glColor4f
    Citation Envoyé par ffomnislash
    Me taper pas svp

    J'ai un pb avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glLoadIdentity( );
    	glEnable(GL_BLEND);
    	glBegin(GL_QUADS);
    		glColor4f(0,0,255,(float)deg_trans/255);
    		glVertex2f(get_realcoor_x(),get_realcoor_y());
    		glVertex2f(get_realcoor_x()+largeur,get_realcoor_y());
    		glVertex2f(get_realcoor_x()+largeur,get_realcoor_y()+hauteur);
    		glVertex2f(get_realcoor_x(),get_realcoor_y()+hauteur);
    glColor4f(1,1,1,1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	glEnd( );
    	glDisable(GL_BLEND);
     
    	glLoadIdentity( );
    	glEnable(GL_BLEND);
    	glBegin(GL_QUADS);
    		glVertex2f(get_realcoor_x()+100,get_realcoor_y()+100);
    		glVertex2f(get_realcoor_x()+largeur+100,get_realcoor_y()+100);
    		glVertex2f(get_realcoor_x()+largeur+100,get_realcoor_y()+hauteur+100);
    		glVertex2f(get_realcoor_x()+100,get_realcoor_y()+hauteur+100);
    	glEnd( );
    	glDisable(GL_BLEND);
    Le deuxieme objet est aussi bleu, comment je dois faire pour qu'il n'ai pas de couleur? (donc la couleur par defaut)

    Ne me dite pas de mettre la couleur par defaut, le pb est plus complexe, en faite ce deuxieme objet contient une texture et donc il ne doit pas avoir de couleur particuliere.

    pour info: ceux qui doivent comprendre comprendrons , je suis en trai n de passer ma bibliotheque graphique en opengl, sans asser par plein de surface sdl.
    Il faut remettre la couleur en blanc sans transparence. Par contre je n'ai pas compris pourquoi tu passe 255 a glColor4f .. J'etais persuade qu'il fallait un float entre 0 et 1. Bref sur le principe c ca! :-)
    ++ fat

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 34
    Points
    34
    Par défaut
    ok merci , je dois dire que je m'attendais plutot un truc du genre disabled

    Pour le 255 c'est en effet un float compris entre 0 et 1 qu'il faut passer. J'ai mis 255 par reflexe, je sais pas trop pourquoi De toute facon cette ligne ne va pas rester telle quel

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    une autre solution nettement plus gourmandes mais qui peut parfois etre utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glPushAttrib(GL_ALL_ATTIBS_BITS);
    // code qui effectue plein de super trucs
    glPopAttrib();
    bien entendu il y a moyen de ne sauvegarder que les attibuts qui sont modifié mais ca depend de chaque cas...

    par contre il faut bien faire attention car cette methode peut aussi sauvegarder certains buffer genre stencil ou autre... si on en abuse on explose inutilement la memoire de la carte graphique...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par bafman
    une autre solution nettement plus gourmandes mais qui peut parfois etre utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glPushAttrib(GL_ALL_ATTIBS_BITS);
    // code qui effectue plein de super trucs
    glPopAttrib();
    bien entendu il y a moyen de ne sauvegarder que les attibuts qui sont modifié mais ca depend de chaque cas...

    par contre il faut bien faire attention car cette methode peut aussi sauvegarder certains buffer genre stencil ou autre... si on en abuse on explose inutilement la memoire de la carte graphique...
    J'y connait pas grand chose encore dans tous ces buffers alors je vais utiliser la 1ere methode.

    J'ai un autre probleme du meme genere, j'ai un affichage qui n'est ppas normal, a priori ce n'est pas ce que je devrait avoir. Si je met en commentaire un glbindtexture l'affichage est normal (avec la texture en moins).
    Le code n'est pas tout simple alors je ne peut pas vraiment expliqué plus. Je me demandais juste si il etait possible et necessaire de desactiver un glbindtexture apres avoir créé l'objet? (je ne veut pas decharger la texture de la memoire)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Le plus simple pour afficher une texture c'est d'activer les texture, de binder la texture, de dessiner ta forme et ensuite de desactiver les textures.

    glEnable(GL_TEXTURE_2D)
    glBindTexture(...)
    glBegin(...
    ...
    geEnd();
    glDisable(GL_TEXTURE_2D);

    Le fait de faire un glBindTexture ne fait que dire à OpenGL d'utiliser cette texture lors des prochains appels. Ca ne concerne en rien la mise en mémoire ou le clean de la mémoire.

    ++ fat

    (si jdis une connerie me le dire!!) :-)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 34
    Points
    34
    Par défaut
    merci c'est impec, en faite j'avais mal compris l'utilite de glEnable(GL_TEXTURE_2D) .
    Je pensais qu'il fallait le faire une fois pour toute a l'initialiseation pour ensuite pouvoir utiliser des textures.

    En faite c'est le tuto de nehe qui le met dans init_opengl() qui ma induit en erreur ...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 34
    Points
    34
    Par défaut
    Me revoici avec un autre probleme byzarre (pour moi ), un probleme avec le redimenssionement de la fenetre.

    J' utilise la bibliotheque sdl pour creer la fenetre et gerer les evenments.
    Voici ma boucle des evenments (un peu simplifié)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    void fenetre::boucle()
    {
    	SDL_Event Evenement;
    	SDL_Event Copy;
    	bool ya_event;
    	while(SDL_WaitEvent(&Evenement))
    	{
    		Copy=Evenement;
    		if(Evenement.type==SDL_QUIT)
    			exit(0);
    		else if(Evenement.type==SDL_ACTIVEEVENT)
    			actualiser_fenetre();
    		else if(Evenement.type==SDL_VIDEORESIZE)
    		{
    			largeur=Evenement.resize.w;
    			hauteur=Evenement.resize.h;
    			SDL_FreeSurface(surface);
    			surface = SDL_SetVideoMode(largeur,hauteur, 32,flags);
    			resizeWindow(largeur,hauteur);
    			affichage_fenetre();
    		}
    		else
    			evenement(Copy);
    }
    Lors de l'evenement resize je met a jour les variables contenant la largeur et la hauteur de la fenetre.
    Ensuite je recré la fenetre puis j'appelle la fonction resize. Cette derniere a deja été appellé apres avoir créé la fenetre la premiere fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int resizeWindow( int width, int height )
    {
        printf("%d	%d\n",width,height);
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity( );
        gluOrtho2D(0,width,height,0);
        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity( );
     
        return( true );
    }
    Le probleme est que lors du redimenssionnement de la fenetre mon affichage se retrouve centre verticalement et écrasé horyzontalement.
    J'ai donc regardé ce qui se passer si je n'appeler resizeWindow lors du redimmensionnement de la fenetre, et il se passe exactement la même chose.
    La fonction resizeWindow recoit bien les nouveau width et height

    J'en ai donc conclu que le nouveau repere defini par gluOrtho2D(0,width,height,0); n'est pas pris en compte :/

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Etant débutant aussi en OpenGL je ne sais pas te dire pk ca ne marche pas. Par contre je peut te filer le code de mon redimensionement qui marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    glViewport(0, 0, Size.Width, Size.Height);				glMatrixMode(GL.GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(Conf.angleVision, (float)Size.Width / (float)Size.Height, Conf.nearClippingPlane, Conf.farClippingPlane);
    glMatrixMode(GL.GL_MODELVIEW);
    glLoadIdentity();
    Par rapport à mon code, il te manque juste le glViewPort ... cela me parait normal que lors du redimenssionement tu ai des pb d'affichage!

    Vla I hope this will help you!

    ++ fat

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Points : 34
    Points
    34
    Par défaut
    Il me manquait le GLViewPort()

    Ah ces tutos qui mette des fonctions important la ou il faut pas

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ffomnislash
    Il me manquait le GLViewPort()

    Ah ces tutos qui mette des fonctions important la ou il faut pas
    Craches pas trop sur la soupe! :-) Sans les tutos ce serait un peu plus complexe des fois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Stopper plein de processus
    Par tomsoyer dans le forum Linux
    Réponses: 1
    Dernier message: 30/11/2004, 19h16
  2. Réponses: 17
    Dernier message: 19/10/2004, 09h05
  3. Stopper le port d'écoute 8081
    Par vbcasimir dans le forum Réseau
    Réponses: 2
    Dernier message: 28/09/2004, 13h37
  4. [NVidia] Démarrer ou stopper sortie Tv
    Par nico-21 dans le forum DirectX
    Réponses: 2
    Dernier message: 31/05/2004, 11h59
  5. Stopper la répétition du clavier
    Par Chris89 dans le forum Assembleur
    Réponses: 6
    Dernier message: 17/10/2003, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo