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 :

OpenGL - artefacts ? et diminution de la luminosité. (screen)


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut OpenGL - artefacts ? et diminution de la luminosité. (screen)
    Bonjour,

    J'ai deux soucis:
    1) je fais un dessin d'un cube avec texture et il y a des points rouge/vert et bleu sur les bords.. je ne comprends pas du tout 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
     
    /// ouverture de la texture au format RAW
        char buffer[128*128*3]; 
            FILE *f = fopen("Textures/crate.raw", "rb");
            if (f){
                fread(buffer, 128*128*3, 1, f);
                fclose(f);
                printf("texture chargée\n"); 
            }else printf("Il y a un problème de fichier!!!!\n");
        }
     
        /// texturing
        glColor3ub(255,255,255);
        glGenTextures(1,&Nom);
        glBindTexture ( GL_TEXTURE_2D, Nom );
        glTexImage2D(GL_TEXTURE_2D,0,3, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
        glEnable(GL_TEXTURE_2D);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);     
     
        /// afficher un cube avec les vertex array 
        glEnableClientState( GL_VERTEX_ARRAY ); /// activation du tableau de vertex
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glVertexPointer( 3, GL_FLOAT, 0, VertexArray );///tableau de coordonnées de vertex
        glTexCoordPointer(2, GL_FLOAT, 0, texCoord );///tableau des coordonnées de texture par vertex
        glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, IndiceArray);/// creation de la géométrie
        glDisableClientState( GL_COLOR_ARRAY );///tableau à désactiver
        glDisableClientState( GL_VERTEX_ARRAY );
     
        glFlush();
    }
    2) Ensuite, j'utilise la SDL et dans ma boucle j'ai un switch pour savoir sur quelle touche j'appuie.
    Quand une touche est appuyé, j'envoie la fonction ci dessus, seulement je dois appuyer sur une touche pour que ça se " rafraichisse " et que le cube soit dessiné..
    Et c'est à ce moment là que la luminosité générale baisse ( on le voit gr$ace au repére que je trace )
    Des idées ?

    Donc avant:
    http://imageshack.us/photo/my-images/850/99331499.jpg/
    Aprés:
    http://imageshack.us/photo/my-images/718/nokt.jpg/

    Merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Pour la cas 2, nous ne pouvons pas aider, notamment car vous ne donnez pas assez de code (le code de traitement des évènements). Pour le moment j'imagine que c'est du à l'utilisation de SDL_WaitEvent() à la place de SDL_PollEvent().

    Pour le bug visible dans les captures, c'est un problème d'éclairage ou de matériaux.
    Soit, c'est l'éclairage qui est activé, et alors il faut le désactivé pour avoir la couleur définie avec glColor3f
    Soit il faut activé la coloration des matériaux ( NeHe en parle ici http://nehe.gamedev.net/tutorial/display_lists/15003/ )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glEnable(GL_COLOR_MATERIAL);
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut
    Merci de la réponse,

    Voici la gestion des évenement ( j'ai viré mes appels de fonctions pour clarifier la chose )

    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
    int main(int argc, char *argv[]){
        /// initialisation de la SDL, de la résolution etc
        SDL_Init(SDL_INIT_VIDEO);
        SDL_WM_SetCaption("Gestion des palettes",NULL);
        SDL_SetVideoMode(largeur_ecran, hauteur_ecran, 32, SDL_OPENGL);
        SDL_EnableKeyRepeat(10,10);
        ///initialisation de la scene
        reset_scene();
     
     
        int continuer = TRUE;
        SDL_Event event;
        while (continuer){
     
            Draw_3D();
            //Draw_2D();
     
     
            SDL_WaitEvent(&event);
            switch(event.type){
                case SDL_QUIT:
                    break;
                case SDL_KEYUP:
                    switch (event.key.keysym.sym){
                        case SDLK_ESCAPE:
                            printf("évènement SDL: QUITTER\n");
                            exit(0);
                            break;
                        case SDLK_1:
                            printf("évènement SDL: ajouter une caisse en 1 \n");
                            break;
                        case SDLK_2:
                            printf("évènement SDL: ajouter une caisse en 2 \n");
                            break;
                        case SDLK_3:
                            printf("évènement SDL: ajouter une caisse en 3\n");
                            break;
                        case SDLK_r: printf("reset\n");
                            reset_scene();
                            break;
                        default:
                            break;
                }
            }
     
            SDL_GL_SwapBuffers();
        }
     
        SDL_Quit(); /// arrêt de la SDL
        return 0;
    }
    Pour l'éclairage, j'ai oublié de préciser..
    J'ai fait cette fonction:
    Dans les deux cas, (en l'appelant ou sans l'appeler), j'ai le soucis de baisse de luminosité..

    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
    ///*    fonction gérant l'éclairage de la scéne     *///
    void SetLight(){
        GLfloat ambient[] = {0.35f,0.35f,0.35f,1.0f};
        GLfloat diffuse[] = {0.5f,0.5f,0.5f,1.0f};
        GLfloat light0_position [] = {10,10,10};
        GLfloat specular_reflexion[] = {0.8f,0.8f,0.8f,1.0f};
     
        ///positionnement de la lumière avec les différents paramètres
        glEnable(GL_LIGHTING);
        glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
        glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
        glLightfv(GL_LIGHT0,GL_POSITION,light0_position);
        glEnable(GL_LIGHT0);
     
        ///spécification de la réflexion sur les matériaux
        glEnable(GL_COLOR_MATERIAL);
        glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
        glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,ambient);
        glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,diffuse);
        glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,specular_reflexion);
    }
    edit: Ah non je crois avoir pigé..
    Tu veux dire que pour voir les couleurs avec glColor, il faut désactiver avant, puis réactiver aprés ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Exactement ce que j'avais dit. Remplacer le SDL_WaitEvent() par un SDL_PollEvent(). Cela permettra que le code ne soit pas bloquer par l'attente des évènements.

    Sinon, oui, je disais que pour avoir les couleurs directs, il faut désactiver la lumière.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Exactement ce que j'avais dit. Remplacer le SDL_WaitEvent() par un SDL_PollEvent(). Cela permettra que le code ne soit pas bloquer par l'attente des évènements.

    Sinon, oui, je disais que pour avoir les couleurs directs, il faut désactiver la lumière.

    J'ai testé le pollEvent, ça ne fait pas le même comportement qu'avec le waitevent..
    Donc je peux pas vraiment l'utiliser

    Je viens de résoudre le problème d'éclairage avec
    glDisable(GL_TEXTURE_2D);

    Mise à part ça, une idée pour le problème de texture ?
    Merci

    Merci

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Citation Envoyé par skyzomik Voir le message
    J'ai testé le pollEvent, ça ne fait pas le méme comportement qu'avec le waitevent..
    En même temps, elle n'a pas le même nom

    Mise à part ça, une idée pour le probléme de texture ?
    De quel problème parlez vous ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [opengl] probleme d artefact au placage des textures
    Par ubenz dans le forum Moteurs 3D
    Réponses: 0
    Dernier message: 07/11/2008, 12h23
  2. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29
  3. OpenGL et *.3ds
    Par tintin22 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/05/2002, 13h51
  4. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

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