Problème :certains de mes triangles disparaissent

Signaler
Messages postés
9
Date d'inscription
vendredi 24 avril 2009
Statut
Membre
Dernière intervention
18 mai 2009
-
Messages postés
5
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2009
-
bonjour
je dois
représenter une surface avec opengl ,j'ai déjà réussi à fabriquer les
triangles qui forment la surface,j'ai rajouté une lumière qui bouge avec la caméra.Le problème c'est que quand je bouge la caméra certain de mes triangles qui forment la surface disparaissent(pas toujours les mêmes triangles) et du coup on voit ce qui se trouve derrière et le rendu est très mauvais.Si quelqu'un sait pourquoi je lui serait très reconnaissante!!

6 réponses

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
Il s'agit apriori d'un problème de vecteur normal.
Il faut mettre des glNormal3f devant la définition des triangles.
Messages postés
9
Date d'inscription
vendredi 24 avril 2009
Statut
Membre
Dernière intervention
18 mai 2009

non les normales de mes triangles sont bien définies,et quand je n'utilise pas la caméra(je ne fait qu'un gllookat) ça marche bien, c'est quand je fait bouger ma caméra que le problème se manifeste.c'est peut être un problème de transparence quand on regarde les objets sous un certain angle???Aidez moi!!!
Messages postés
23
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
17 mai 2009

Les triangles disparaissent-ils entièrement ?
Messages postés
9
Date d'inscription
vendredi 24 avril 2009
Statut
Membre
Dernière intervention
18 mai 2009

oui ,certains triangles sont dessinés et d'autres pas
Messages postés
9
Date d'inscription
vendredi 24 avril 2009
Statut
Membre
Dernière intervention
18 mai 2009

je suis désolée je n'avais pas internet pendant le week end ;mais la question reste posée alors:AU SECOURS!!!!!!!!!(ce n'est pas forcément des triangles qui disparaissent mais des fois des bouts de la surface,je précise que quand je n'utlise pas la caméra(mais un glulookat) il n'y a pas de soucis

voici ce que j'ai programmé:
//methode dans la classe triangle pour le dessiner:

void Triangle::Dessiner(){
    normal();//calcule les composantes du vecteur normal aux sommets du triangle:nx,ny,nz.
    glBegin(GL_TRIANGLES) ;

    glNormal3d(nx,ny,nz);
    glColor3ub(0,255,0);
    glVertex3d(x1,y1,z1);
    glVertex3d(x2,y2,z2);
    glVertex3d(x3,y3,z3);
    glEnd();

 }

///puis dans ma fonction DRaw j'ai ça:
{glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity( );
    camera->look();
//ensuite je crée mes triangles et je fais appel à la méthode dessiner de la classe triangle:cf+haut

glFlush();
SDL_GL_SwapBuffers();
}

//et enfin dans mon main j'ai ça:
SDL_Event event;
    unsigned int width = LARGEUR_FENETRE;
    unsigned int height = HAUTEUR_FENETRE;

    Uint32 last_time,current_time,elapsed_time;
    Uint32 start_time,stop_time;

    SDL_Init(SDL_INIT_VIDEO);
    atexit(stop);
    SDL_WM_SetCaption("SDL GL Application", NULL);
    SDL_SetVideoMode(width, height, 32, SDL_OPENGL);
    glClearColor(1.0,1.0,1.0,1.0);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity( );
    
    GLfloat light_position[4]={0.0,0.0,0.0,1.0};
    
    gluPerspective(90,(double)width/height,0.001,17000);
    
    
    int MatSpec [4]={1,1,1,1};
    glMaterialiv(GL_FRONT_AND_BACK,GL_SPECULAR,MatSpec);
    glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,100);
    
    
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    glLightfv(GL_LIGHT0,GL_POSITION,light_position);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_COLOR_MATERIAL);
    
    
    glEnable(GL_DEPTH_TEST);
    camera = new TrackBallCamera();
    

    last_time = SDL_GetTicks();
    for (;;)  
    {

        start_time = SDL_GetTicks();

        while(SDL_PollEvent(&event))
        {
            switch(event.type)
            {
                case SDL_QUIT:
                exit(0);
                break;
                case SDL_KEYDOWN:
                switch (event.key.keysym.sym)
                {
                    case SDLK_p:
                    takeScreenshot("photo.bmp");
                    break;
                    case SDLK_ESCAPE:
                    exit(0);
                    break;
                    default :
                    camera->OnKeyboard(event.key);
                }
                break;
                case SDL_MOUSEMOTION:
                camera->OnMouseMotion(event.motion);
                break;
                case SDL_MOUSEBUTTONUP:
                case SDL_MOUSEBUTTONDOWN:
                camera->OnMouseButton(event.button);
                break;
            }
        }

        current_time = SDL_GetTicks();
        elapsed_time = current_time - last_time;
        last_time = current_time;

       
        Draw(listCpos,listCneg);
        stop_time = SDL_GetTicks();
        

    }
Messages postés
5
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2009

Peut être un problème de profondeur ( deeph).
A partir d'une certaine distance, les objets ne sont plus dessinés.
Je n'ai aps trouvé de solution pour augmenter le deeph mais peut étre, si tu diminues la taille de tes triangles, ça devrait passer.