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 :

Probleme d'affichage OPENGL/SDL


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 41
    Points
    41
    Par défaut Probleme d'affichage OPENGL/SDL
    Hello,
    Je n'arrive plus a affiché dans ma fenetre.

    Il y a une fonction init SDL et une init OPENGL
    puis j'affiche l'habituel cube.

    mais la rien ne se passe et ca m'enerve car je ne trouve pas pourquoi.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
     
    /////////////////////////////////////////////////////
    ///                  Main
    /////////////////////////////////////////////////////
    ///     - Fichier principale du projet
    /////////////////////////////////////////////////////
    ///     - boucle principale du projet
    /////////////////////////////////////////////////////
     
    /////////////////////////////////////////////////////
    ///                  include
    /////////////////////////////////////////////////////
    #include "Main.h"
     
    /////////////////////////////////////////////////////
    ///                  declaration
    /////////////////////////////////////////////////////
    // affichage
    void affichage () ;
    void reajusterTailleEcran (int largeur , int hauteur) ;
    void initOpenGL (int largeur, int hauteur) ;
    void initSDL(const char* titre, int largeur, int hauteur, int profondeur, bool plein_ecran);
     
    /////////////////////////////////////////////////////
    ///                  variables globales
    /////////////////////////////////////////////////////
    // Surface de l'ecran
    SDL_Surface* fenetre;
     
    /////////////////////////////////////////////////////
    ///                  Fonction principale
    /////////////////////////////////////////////////////
     
    int main(int argc, char* argv[])
    {
    	// Toujours initialiser SDL avant OpenGL
    	initSDL("essai 0.1", 640, 480, 16, false);
    	initOpenGL(640,480);
        // Reajuste la taille de la fenetre
    	reajusterTailleEcran (LARGEUR,HAUTEUR);
     
    	// Boucle d'evenement
    	bool quit = false;
    	while(!quit)
    	{
    		SDL_Event event;
    		if(SDL_PollEvent(&event))
    		{
    			switch(event.type)
    			{
    				// quitte l'application
                    case SDL_QUIT:
                        quit = true;
                        break;
     
                    // Ajuste le rapport entre les objets OpenGL et la taille de la fenetre
                    case SDL_VIDEORESIZE:
                        reajusterTailleEcran (event.resize.w,event.resize.h);
    			}
    		}
     
    		// affichage
    		affichage();
    	}
     
    	return 0;
    }
     
    void affichage ()
    {
        /// debut d'un cycle
        // preparation de l'affichage
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
        // place la couleur a blanc
        glColor3f ( 1.0f , 1.0f , 1.0f ) ;
        // debut du dessin
        glEnable(GL_TEXTURE_2D) ;
     
     
     
     
        glBegin ( GL_QUADS ) ;
    	glColor3d(1.,0.,0.);
    	glVertex3i(1,1,1);
    	glVertex3i(1,-1,1);
    	glVertex3i(-1,-1,1);
    	glVertex3i(-1,1,1);
     
    	glColor3d(0.,1.,0.);
    	glVertex3i(1,1,-1);
    	glVertex3i(1,-1,-1);
    	glVertex3i(-1,-1,-1);
    	glVertex3i(-1,1,-1);
     
    	glColor3d(0.,0.,1.);
    	glVertex3i(1,1,1);
    	glVertex3i(1,-1,1);
    	glVertex3i(1,-1,-1);
    	glVertex3i(1,1,-1);
     
    	glColor3d(0.,1.,1.);
    	glVertex3i(-1,1,1);
    	glVertex3i(-1,-1,1);
    	glVertex3i(-1,-1,-1);
    	glVertex3i(-1,1,-1);
     
    	glColor3d(1.,1.,0.);
    	glVertex3i(-1,1,-1);
    	glVertex3i(-1,1,1);
    	glVertex3i(1,1,1);
    	glVertex3i(1,1,-1);
     
    	glColor3d(1.,0.,1.);
    	glVertex3i(-1,-1,-1);
    	glVertex3i(-1,-1,1);
    	glVertex3i(1,-1,1);
    	glVertex3i(1,-1,-1);
        glEnd();
     
        /// fin d'un cycle
        // fin du dessin
        //glDisable(GL_TEXTURE_2D);
        // swap
    	SDL_GL_SwapBuffers();
    }
     
    void reajusterTailleEcran (int largeur, int hauteur)
    {
    	// indique la taille de la fenetre de dessin (coord depart <-> coord arrive)
    	glViewport(0,0,largeur,hauteur);
    	// passe en matrix de PROJECTION
    	glMatrixMode(GL_PROJECTION);
    	// vide la matrice modifiable et prepare a la projection
    	glLoadIdentity();
    	// specifie l'angle de champs de vision
    	gluPerspective(45.0, (float) largeur/hauteur, 1.0, 10.0);
        // passe en matrix de MODELISATION - VISUALISATION
    	glMatrixMode(GL_MODELVIEW);
    	// vide la matrice modifiable et prepare a la modelisation - visualisation
    	glLoadIdentity();
    }
     
    void initOpenGL(int largeur, int hauteur)
    {
        // vide le tampon chromatique (arriere plan <- noir)
    	glClearColor(0.0,0.0,0.0,0.0);
    	// vide le tampon chromatique
    	glClearDepth(1.0);
        // on active le blending
        glEnable(GL_BLEND) ;
        //glBlendFunc(GL_SRC_ALPHA,GL_ONE) ;
        glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    	// active la projection
    	glMatrixMode(GL_PROJECTION ) ;
        glLoadIdentity() ;
    	gluOrtho2D ( 0.0 , (GLdouble)largeur , 0.0 , (GLdouble)hauteur ) ;
         //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);   // Définit la magnification
         //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);   // Définit la minification
    	glMatrixMode(GL_MODELVIEW);
    }
     
    void initSDL (const char* titre, int largeur, int hauteur, int profondeur, bool plein_ecran)
    {
        int flags = 0 ;
        //flags = flags | SDL_GL_DOUBLEBUFFER | SDL_RESIZABLE | SDL_SWSURFACE ;
        flags = flags | SDL_OPENGL | SDL_RESIZABLE | SDL_SWSURFACE ;
    	// initialise la partie video de SDL
    	SDL_Init(SDL_INIT_VIDEO);
        // Ferme SDL en sortie de programme
        atexit(SDL_Quit);
        // titre de la fenetre
    	SDL_WM_SetCaption(titre, titre);
    	// Indique a OpenGL que le double buffering est active
    	SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
    	// Indique la taille du buffer de profondeur
    	SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, profondeur);
    	// indique si le flag PLEIN ECRAN est activé
        if ( plein_ecran )
            flags = flags | SDL_FULLSCREEN ;
        // initialisation du mode video de SDL
    	fenetre = SDL_SetVideoMode(largeur,hauteur,profondeur, flags) ;
    }
     
     
    void stopSDL()
    {
       SDL_Quit () ;
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    j'ai une erreur tres etrange :

    ceci fonctionne

    glBindTexture (GL_TEXTURE_2D, text);
    glBegin ( GL_QUADS ) ;
    glTexCoord2f ( 0 , 0) ; glVertex2i ( 0 , 100 ) ;
    glTexCoord2f ( 0 , 1) ; glVertex2i ( 0 , 0 ) ;
    glTexCoord2f ( 1 , 1) ; glVertex2i ( 100 , 0 ) ;
    glTexCoord2f ( 1 , 0) ; glVertex2i ( 100 , 100 ) ;
    glEnd();

    mais ca non :

    glBegin(GL_QUADS);
    glColor3i (1,0,0);
    glVertex2i ( 0 , 100 );
    glVertex2i ( 0 , 0 ) ;
    glVertex2i ( 100 , 0 ) ;
    glVertex2i ( 100 , 100 ) ;
    glEnd();

  3. #3
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Qu'est ce que tu entends par "fonctionne / fonctionne pas" ?

    ça compile ? ça plante ? ça n'affiche pas ce que tu veux ?
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  4. #4
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    glBegin ( GL_QUADS ) ;
    	glColor3d(1.,0.,0.);
    	glVertex3i(1,1,1);
    	glVertex3i(1,-1,1);
    	glVertex3i(-1,-1,1);
    	glVertex3i(-1,1,1);
     
    	glColor3d(0.,1.,0.);
    	glVertex3i(1,1,-1);
    	glVertex3i(1,-1,-1);
    	glVertex3i(-1,-1,-1);
    	glVertex3i(-1,1,-1);
     
    	glColor3d(0.,0.,1.);
    	glVertex3i(1,1,1);
    	glVertex3i(1,-1,1);
    	glVertex3i(1,-1,-1);
    	glVertex3i(1,1,-1);
     
    	glColor3d(0.,1.,1.);
    	glVertex3i(-1,1,1);
    	glVertex3i(-1,-1,1);
    	glVertex3i(-1,-1,-1);
    	glVertex3i(-1,1,-1);
     
    	glColor3d(1.,1.,0.);
    	glVertex3i(-1,1,-1);
    	glVertex3i(-1,1,1);
    	glVertex3i(1,1,1);
    	glVertex3i(1,1,-1);
     
    	glColor3d(1.,0.,1.);
    	glVertex3i(-1,-1,-1);
    	glVertex3i(-1,-1,1);
    	glVertex3i(1,-1,1);
    	glVertex3i(1,-1,-1);
        glEnd();
    On a le droit de faire ca??? Je croyais que , pour dessiner un quads par ex, il fallait encapsulé 4 glVertex entre le glBegin et le glEnd??????



    Sinon pour ton bug, dis nous exactement ce qui ne marche pas .

    Essaye p-e de définir la couleur avant de commencer a déssiner ton quads.

  5. #5
    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
    Citation Envoyé par gamerome
    On a le droit de faire ca??? Je croyais que , pour dessiner un quads par ex, il fallait encapsulé 4 glVertex entre le glBegin et le glEnd??????
    on a parfaitement le droit, ce que fait le GL_QUADS, c'est de dire que des que le drivers recoit 4 vertex, il lance l'operation de rendu d'un quad donc si tu envoi 12 vertex, il dessinera 3 quads, c'est tout...
    * 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

Discussions similaires

  1. Probleme d'affichage image OpenGL
    Par nonolerobot77 dans le forum GLUT
    Réponses: 2
    Dernier message: 22/02/2008, 11h54
  2. [Qt Opengl] Probleme d'affichage
    Par .:dev:. dans le forum OpenGL
    Réponses: 4
    Dernier message: 28/11/2007, 11h59
  3. probleme d'affichage avec sdl
    Par Asmod_D dans le forum SDL
    Réponses: 5
    Dernier message: 12/02/2007, 18h11
  4. [SDL] probleme d'affichage
    Par .:dev:. dans le forum SDL
    Réponses: 2
    Dernier message: 26/07/2006, 16h33
  5. Problème d'affichage d'un sprite avec SDL
    Par youp_db dans le forum SDL
    Réponses: 1
    Dernier message: 11/02/2006, 18h08

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