red faction | J'essaie d'illuminer un modele sous opengl
http://users.skynet.be/fa218598/14.avi (DivX5.0)
Il s'agit d'une super ellipse (un cylindre avec les bords arrondis )
En bleu clair c'est la position de la lumière, en bleu foncé les normales et vert pour les points du mesh.
Ce que je ne comprends pas :
-pourquoi qd jetire mon objet la face superieure devient elle plus claire ??? (doit-je changer aussi la position de la lumiere?)
-pq le fait de changer simplement l'orientation de l'objet change aussi son éclairage ??? (alors que la lumiere subit les rotations aussi)
Au depart, je faisais un glScalef pour changer les proportions mais cela perturbe aussi les normales. meme avec le fameux GL_NORMALIZED je n'arrive a aucun resultat valable. Du coup maintenant j'agis directement sur les normales.
Les normales ont ete normalisées. Seuls les points de l'objet sont deformes.
Code :
- void DrawFct(...)
- {
- float mat_specular [4] = { 1.0, 1.0, 1.0, 0.0 };
- float light_position [4] = { 0.0, 1.0, 0.0, 1.0 };
- float lightambiant [4] = { 0.0, 0.0, 0.0, 1.0 };
- glPushMatrix();
-
- glRotatef(-90,1.0f,0.0f,0.0f);
- //glScalef(radius,t.pieheight,radius);
-
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- light_position[1]=50.0+light_position[1]*t.pieheight;
-
- glMaterialf(GL_FRONT, GL_SHININESS, 1.5);
- glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
- glLightfv(GL_LIGHT0, GL_AMBIENT, lightambiant);
- glLightfv(GL_LIGHT0, GL_POSITION, light_position);
-
- glPointSize(5.0);
- glDisable(GL_LIGHTING);
- glBegin(GL_POINTS);
- glColor3ub(0,128,255);
- glVertex3f(-light_position[0],-light_position[1],-light_position[2]);
- glEnd();
- glEnable(GL_LIGHTING);
- glEnable(GL_RESCALE_NORMAL); //seems useless
- Draw3DObject(...);
- glDisable(GL_RESCALE_NORMAL);
- glDisable(GL_LIGHTING);
- glDisable(GL_DEPTH_TEST);
- glPopMatrix();
- }
|
Message édité par red faction le 02-02-2006 à 18:02:56
|