[OpenGL] Problème de tache spéculaire

Problème de tache spéculaire [OpenGL] - Divers - Programmation

Marsh Posté le 14-06-2005 à 13:48:06    

Bonjour, j'ai un problème avec la tache spéculaire en mode projection orthogonale : glOrtho à la place du gluPerspective classique. La type de projection ne devrait pas influer dans la gestion de la lumiere, et pourtant ...  :(  
 
J'ai mis le code minimum (juste l'affiche d'un sphère) (Vous pouvez voir directement le screenshot ici : http://60gp.ovh.net/~toutla/ss.jpg )
 

Code :
  1. #include <GL/glut.h>
  2. void affichage()
  3. {
  4. GLfloat position[4]={ 10.0, 10.0, 10.0, 1.0};
  5. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  6. glLoadIdentity();
  7. glLightfv(GL_LIGHT0,GL_POSITION,position);
  8. glTranslatef(4,3,0);
  9. glutSolidSphere(2,30,30);
  10. glutSwapBuffers();
  11. }
  12. int main(int argc,char **argv)
  13. {
  14. GLfloat diffuse[4]={ 0.8,0.8,0.9,1.0};
  15. GLfloat speculaire[4]={ 1.0,1.0,1.0,1.0};
  16. glutInit(&argc,argv);
  17. glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  18. glutInitWindowPosition(200,200);
  19. glutInitWindowSize(400,400);
  20. glutCreateWindow("Saleté de lumiere" );
  21. glClearColor(0.0,0.0,0.0,0.0);
  22. glColor3f(1.0,1.0,1.0);
  23. glEnable(GL_DEPTH_TEST);
  24. glShadeModel(GL_SMOOTH);
  25. glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);
  26. glEnable(GL_LIGHTING);
  27. glEnable(GL_LIGHT0);
  28. glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
  29. glLightfv(GL_LIGHT0,GL_SPECULAR,speculaire);
  30. glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,diffuse);
  31. glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,speculaire);
  32. glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50);
  33. glMatrixMode(GL_PROJECTION);
  34. glLoadIdentity();
  35. glOrtho(-10,10,-10,10,-10,10);
  36. glMatrixMode(GL_MODELVIEW);
  37. glutDisplayFunc(affichage);
  38. glutMainLoop();
  39. return 0;
  40. }


 
 
Si quelqu'un à une idée d'où peut venir ce bug.. merci d'avance
 
Florian.

Reply

Marsh Posté le 14-06-2005 à 13:48:06   

Reply

Marsh Posté le 14-06-2005 à 16:11:45    

traçe un point de couleur à l'endroit supposé de la source de lumière.

Reply

Marsh Posté le 14-06-2005 à 16:12:15    

et anime la source avec un sin() pour voir si ça réagit ou si c'est invariant...

Reply

Marsh Posté le 14-06-2005 à 16:59:48    

Je suis arrivé à trouver le bug ! En activant le Z-buffer tout marche au poil...
 
Merci bjone.

Reply

Marsh Posté le 14-06-2005 à 17:08:48    

je comprends pas, c'est que les faces cachées sont traçées sur les faces visibles, à ce moment là il te manque aussi le backface culling, car normalement avec le culling ta sphère ne devrait avoir de problèmes de traçage même sans zbuffer.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed