C++ opengl lumières qui changent selon zoom

C++ opengl lumières qui changent selon zoom - C++ - Programmation

Marsh Posté le 23-09-2007 à 15:12:42    

Bonjour j'ai le code suivant :  
 

Code :
  1. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  2.   glPopMatrix();
  3.   glLoadIdentity();
  4.   glRotatef(-45.0,0.0,1.0,0.0);
  5.   glTranslatef(-4.0,0.0,-4.0);
  6.   glScalef(zoom,zoom,zoom);
  7.   glPushMatrix();
  8.   glLoadIdentity();
  9.   glPopMatrix();
  10.   glPushMatrix();
  11.  
  12.   glLightfv(GL_LIGHT0,GL_POSITION,L0pos);
  13.   glLightfv(GL_LIGHT1,GL_POSITION,L1pos);


 
le soucis est que quand je fais varier la variable zoom, l'intensité lumineuse de la pièce change. Comment fiare pour résoudre ce problème ? Merci d'avance
 
NC

Reply

Marsh Posté le 23-09-2007 à 15:12:42   

Reply

Marsh Posté le 23-09-2007 à 15:48:08    

Salut
 
Est-ce que tes normales, après modification de l'echelle, sont normalisées?

Reply

Marsh Posté le 23-09-2007 à 16:05:12    

heu cad ? il faut que je les recalcule a chaque changement d'échelle ? je les calculais une seul fois lors de la création de l'objet

Reply

Marsh Posté le 23-09-2007 à 16:40:24    

Oui, elles sont impactées aussi. (cf http://www.opengl.org/resources/fe [...] glpitfall/ point 1)

Reply

Marsh Posté le 23-09-2007 à 23:16:04    

Le scale c'est mal. Entre autre pour la raison que vient de donner IrmatDen. A chaque fois que tu vas faire un scale, si tu fais des calculs dependant des normales, il faudrait que tu les recalcule à chaque fois. Ce qui devient très vite lourd en terme de performance.
Il faut preferer un facteur multiplicatif appliqué aux coordonnées des vertex, celui ci ne changera pas la valeur des normales qui resteront les meme quelle que soit la "taille" finale de l'objet.

Reply

Marsh Posté le 24-09-2007 à 11:14:36    

où tu maintiens un pile de matrice avec scale et une sans scale sur la partie rotation.

Reply

Sujets relatifs:

Leave a Replay

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