| nisalon_caje | Salut, j'ai encore un problème et comme d'habitude je trouve pas la solution : mon problème c'est que j'ai une brique qui clignote anormalement : de temps en temps elle semble s'éteindre !!!
 Voici la source :
 
 | Code : 
 #include <stdio.h>#include <stdlib.h>#include <GL/glut.h>#include <math.h>#define PI 3.14159265int theta=50;void changePerspective();void display();void brique(void);void calcTableCosSin();void rotation();float ang=0;float inca=4;int rotation_act=1;float Sin[360],Cos[360];/* Paramètres de lumière */GLfloat L0pos[]={-4.0,4.0,3.0};GLfloat L0dif[]={ 1.0,1.0,1.0};GLfloat L1pos[]={ 1.7,4.5,2.0};GLfloat L1dif[]={ 1.0,1.0,1.0};GLfloat Mspec[]={ 0.7,0.7,0.7};GLfloat Mshiny=5;/* Fin paramètres de lumière */int main(int argc,char **argv) {// Initialisation d'OpenGL
glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);glutInitWindowPosition(200,200);glutInitWindowSize(640,480);glutCreateWindow("essd" );calcTableCosSin();glClearColor(0.0,0.0,0.0,0.0);glPointSize(1.0);glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST);/* Paramétrage des lumières */glShadeModel(GL_SMOOTH);glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);glLightfv(GL_LIGHT0,GL_DIFFUSE,L0dif);glLightfv(GL_LIGHT0,GL_SPECULAR,L0dif);glLightfv(GL_LIGHT1,GL_DIFFUSE,L1dif);glLightfv(GL_LIGHT1,GL_SPECULAR,L1dif);/* Paramétrage du matériau */glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,Mspec);glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,Mshiny);changePerspective();glMatrixMode(GL_MODELVIEW);// Fonctions de rappel
glutDisplayFunc(display);// Entrée dans la boucle principale
glutMainLoop();return 0;}void changePerspective(){  glMatrixMode(GL_PROJECTION);  glLoadIdentity();  gluPerspective(theta,1.0,0.1,40.0);  glMatrixMode(GL_MODELVIEW);}void display(){/* effacement de l'image avec la couleur de fond */glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();/*Application des transfos de visualisation *//*CAMERA*/glTranslatef(-0.5,-0.75,-4.0);glRotated(20.0,0.60,-1.0,-0.06);/*CAMERA FIN *//*LUMIERES*/glLightfv(GL_LIGHT0,GL_POSITION,L0pos);glLightfv(GL_LIGHT1,GL_POSITION,L1pos);/*LUMIERES FIN*/glPushMatrix();if(rotation_act==1)glutTimerFunc(30,rotation,0);/* Dessin de la brique tournante */glLoadIdentity();glPopMatrix();glPushMatrix();glRotatef(ang,0.0,1.0,0.0);brique();glFlush();/* On echange les buffers */glutSwapBuffers();}void brique(void) {// Fonction permettant de dessiner une brique
float tl2=25/100+.2;glBegin(GL_POLYGON);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2, 0.2, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2, 0.0, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2, 0.0, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2, 0.2, tl2);  glEnd();  glBegin(GL_POLYGON);   glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0.2, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0.0, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0.0,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0.2,-tl2);  glEnd();  glBegin(GL_POLYGON);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0.2,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0.0,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0.0,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0.2 ,-tl2);  glEnd();  glBegin(GL_POLYGON);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0.2 ,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0.0,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0.0, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0.2 , tl2);  glEnd();  glBegin(GL_POLYGON);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2, 0.2 ,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2, 0.2 , tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2, 0.2 , tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2, 0.2 ,-tl2);  glEnd();   glBegin(GL_POLYGON);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0,-tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f(-tl2,0, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0, tl2);  glColor3f(1.0,1.0,1.0);   glVertex3f( tl2,0,-tl2);  glEnd();}void calcTableCosSin(){  /* calcul du tableau des sinus et cosinus */  int i;  for (i=0;i<360;i++) {    Cos[i]=cos(((float)i)/180.0*PI);    Sin[i]=sin(((float)i)/180.0*PI);  }}void rotation(){  ang=ang+inca;  if (ang>360)    ang=ang-360;    glutPostRedisplay();}
 | 
 
 Voila, merci de me dire où ca ne va pas et aussi dites moi si mon utilisation de gluttimerfunc est correcte
 
 NC
   Message édité par nisalon_caje le 17-02-2006 à 14:45:37
 |