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 :

[Débutant] Affichage d'une grille


Sujet :

OpenGL

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut [Débutant] Affichage d'une grille
    bonsoir,
    je ne demande pas grand chose
    juste afficher une sorte de grille avec des case de 1 x 1
    donc voila
    j'utilise GLU SDL OPENGL

    dans mon main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main(int argc, char *argv[])
    {
            Moteur3D moteur;
     
            moteur.initialiserAffichage();
            moteur.afficherScene();
     
            SDL_Delay(3000);
            return 0;
    }
    dans mon Moteur3D.cpp
    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
     
    void Moteur3D::initialiserAffichage()
    {
            if(SDL_Init(SDL_INIT_VIDEO)!=0)
            {
                    printf("Initialisation de la vidéo via SDl                              [ERREUR]\n");
                    SDL_Quit();
                    exit(1);
            }
            else
            {
                    printf("Initialisation de la vidéo via SDl                              [OK]\n");
            }
     
            ecran=SDL_SetVideoMode(resX,resY,nbBitParPixel,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN|SDL_OPENGL|SDL_NOFRAME);
     
     
            SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );          // tell SDL that the GL drawing is going to be double buffered
            SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE,   24);          // size of depth buffer
            SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 0);           // we aren't going to use the stencil buffer
            SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, 0);     // this and the next three lines set the bits allocated per pixel -
            SDL_GL_SetAttribute( SDL_GL_ACCUM_GREEN_SIZE, 0);   // - for the accumulation buffer to 0
            SDL_GL_SetAttribute( SDL_GL_ACCUM_BLUE_SIZE, 0);
            SDL_GL_SetAttribute( SDL_GL_ACCUM_ALPHA_SIZE, 0);
     
            if(ecran==NULL)
            {
                    printf("Création de la fenêtre %d x %d x %d                             [ERREUR]\n",resX,resY,nbBitParPixel);
                    SDL_Quit();
                    exit(1);
            }
            else
            {
                    printf("Création de la fenêtre %d x %d x %d                             [OK]\n",resX,resY,nbBitParPixel);
            }
            SDL_WM_SetCaption("Dungeon Hunter","Dungeon Hunter");
     
     
     
            //Vider les buffer
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glLoadIdentity();
            //Définir la vue de départ
            gluLookAt(0, 0, -3, 0, -1, 1, 0, 1, 0);
     
     
    }
    et

    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 Moteur3D::afficherScene()
    {
            dessinerGrille(4);
            //Changer de buffer
            SDL_GL_SwapBuffers();
     
    }
     
    void Moteur3D::dessinerGrille(int largeur)
    {
            for(int x=-largeur;x<=largeur;x++)
            {
                    glBegin(GL_LINES);
                            glColor4i(255,0,0,0);
                            glVertex3d(x,0,-largeur);
                            glVertex3d(x,0,largeur);
     
                            glVertex3d(-largeur,0,x);
                            glVertex3d(largeur,0,x);
                    glEnd();
                    printf("affichage de la grille :  %d  \n",x);
            }
    }
    j'ai surement du oublier un truc ou mal configurer

    qu'en pensez vous ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    j'ai oublié de préciser le problème

    - Compilation et linkage impécable
    mais
    - Rien ne s'affiche

  3. #3
    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
    fait un SDL_getError pour voir si le probleme ne vient pas de l'initialisation...

    deja tu utilise un depth buffer de 24 sans verifier si ta cate le supporte et tu ne lui specifie pas d'attribut pour les couleur rouge verte et bleu... si les attributs par defaut sont a 0 c'est normal que tu ne voit riens...
    * 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

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    ma carte doit supporter le 24 bits

    car mon bureau est en 24 bits et pis elle est récente donc ca doit pas être le probleme

    peut on mettre 32 bits sous linux ?

    j'ai essayé avec 8 pour R G B et A
    mais ca ne change rien

  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
    c'est pas parceque ton bureau est en 24 bit que l'acceleration materiel 3D le supporte pour le DEPTH BUFFER... qui n'a rien a voir avec le COLOR BUFFER...

    et essaye quand même de voir les erreures que te donne la SDL...
    * 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

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    donc apres le SDL_SetVideoMode

    tu veux que j'essaye

    printf("%s",SDL_GetErrors())

    ?

  7. #7
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    plusieurs choses :
    1) teste ton écran juste aprés SDL_SetVideoMode(...), avant de faire des SDL_GL_SetAttribute()
    2) SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ) est inutile, tu l'as déja specifier avec SDL_DOUBLEBUF dans ton SDL_SetVideoMode(...)
    3) tu dessine avec GL_LINES, le mieux et donc de passer en GL_COLOR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glDisable(GL_COLOR_MATERIAL);
    glEnable(GL_COLOR);
    4) si tu fait pas le 3) , le mieux est d'allumer une lampe aprés l'avoir positionnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float pos[4] = { 0,5,0,0};
    glLightfv(GL_LIGHT0,pos);
    glEnable(GL_LIGHT0);
    5) c'est quoi ton SDL_Delay(3000) : tu attend 3 s et tu quitte : : : : c'est peut-être un peu chaud pour voir quelques chose
    Conseil : met une boucle infinie style
    , sa plantera quand tu quitte mais ta une chance de voir quelquechose
    6) vérifie bien que ta caméra pointe dans le bon sens, essaye d'autre valeur, puisque tu ne peut pas la bouger

    c tout ce que j'ai à dire, bonne chance à toi

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Merci beaucoup
    j'essayerai ca :-)

    juste une derinère ptite question

    l'affichage de la grille
    je le met dans la boucle infinie ou avant ?

  9. #9
    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 jbx2004
    2) SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ) est inutile, tu l'as déja specifier avec SDL_DOUBLEBUF dans ton SDL_SetVideoMode(...)
    avec openGL et SDL il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ) ;
    et surtout ne pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_SetVideoMode(SDL_DOUBLEBUF);
    car le double buffering SDL n'est absolument pas le même que celui d'openGL...
    sinon pour l'affichage normalement ca devrait pouvoir marché mais tu ne pourra rien afficher de dynamique avec ca... il faut faire en gros

    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
     
    bool loop = true; // variable globale par exemple
    affichage()
    {
        glClear(...);
        glLoadIdentity();
        gluLookAt(...);
        // affichage de tout ca que tu veut
        swapBuffer();
    }
    init()
    {
        // mise en place de la projection et des different etats (couleur, lumiere etc...)
    }
     
    chekKey()
    {
        // ici tu verifie quels evenement sont apparut
        // par exemple si la touche echape a été appuyé, mettre la variable globale loop a false
    }
     
    main()
    {
        SDL_init(...);
        // toute l'initialisation de la SDL....
       init(); // initialise l'affichage openGL
     
        while (loop)
        {
            chekKey();
            affichage();
        }    
    }
    comme ca ca devrai a peut pres bien marcher...
    * 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

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    ok
    donc pour avoir la meilleur accélération possible
    je met ca

    ecran=SDL_SetVideoMode(resX,resY,nbBitParPixel,SDL_HWSURFACE|SDL_FULLSCREEN|SDL_OPENGL|SDL_NOFRAME);

    et je spécifie le double buff par opengl ?

    merci beaucoup de ton aide
    elle m'est très pprécieuse

  11. #11
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    [petit hors sujet]
    ah merci bafman, mais si je spécifie SDL_DOUBLEBUF dans mon SDL_SetVideoMode(), tu veu dire que mon double buffering ne sera pas activé :.Ou seulement celui de SDL et pas celui d'OpenGL : C'est bizard, ça veut dire que mon moteur tourne en simple buffering depuis le début . Explique toi, j'ai pas bien compris.
    [/petit hors sujet]

  12. #12
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    [autre petite question au passage]
    à quoi sert SDL_NOFRAME (je sais je pourrai googlelifié mais je profite que tout le monde à la forme ce matin )
    [/autre petite question au passage]

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    t pas vraiment hors sujet :-)
    ca m'interresse aussi grandement

  14. #14
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    SDL_NOFRAME sert a spécifié que tu veut pas la barre en haut
    avec le nom de l'application , la croix et tout ...
    la bare de titre quoi

  15. #15
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    merci , mais alors quelle utilitée en plein - écran :

  16. #16
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    j'en sait rien
    lol
    aucun surement

    mais vu que je débute
    j'ai essayé les différentes options voire le résultat :-)

  17. #17
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    ça peut peut-être servir si tu fait une touche de sélection(ou un menu) plein-écran/pas plein écran

  18. #18
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    oui oui
    surement

  19. #19
    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
    pour le coup du double buffer il suffit de lire la doc de la SDL, c'est ecrit dedans noir sur blanc. par contre je ne pense pas qu'il utilise le double buffering SDL dans ce cas la. le double buffering openGL est un double bufering hardware specifique a openGL .

    sinon pour le coup du NO_FRAME je ne pense pas que ca serve a grand chose quand on est en fullscreen.
    * 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

  20. #20
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Points
    1 787
    Par défaut
    Ok merci, je vais tester les pour voir les différences de fps en essayant toutes les possibilités

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. (débutant) aFfichage d'une fenetre en attente
    Par Asnidren dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 17/10/2006, 11h32
  2. [Débutant]Affichage d'une liste de n'importe quoi?
    Par bubu251 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 03/10/2006, 09h57
  3. Réponses: 2
    Dernier message: 20/07/2006, 19h40
  4. Réponses: 3
    Dernier message: 19/07/2006, 10h16
  5. Réponses: 4
    Dernier message: 28/02/2006, 14h25

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