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();
}
|