Lumiere ambiente

cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011 - 27 mai 2008 à 15:55
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011 - 28 mai 2008 à 10:46
Bonjour ami(e)s programmeurs et programmeuzes ,

Je débute en Opengl et dans le but de comprendre l'eclairage (ambient, spots...) j'ai commencé a faire un petit programme.
J'ai tout d'abord créer un petit cube, qui, grâces aux coordonnées de ses points, ne tourne pas tout a fait sur l'axe y (il est un peu décalé).

J'ai ensuite mis en place une lumiere ambiente :
GLfloat ambientColor[] = {0.2f, 0.2f, 0.2f, 1.0f}; //Color(0.2, 0.2, 0.2)
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor);

Et a mon grand etonnement, mon cube n'est pas éclairé de la meme facon selon la face que l'on voit, or j'ai lu plusieurs fois lu que la lumiere ambiante éclaire tout les objets de la meme maniere, mais j'ai du comprendre de travers ^^.

Est ce que lma lumiere ambiente est émise depuis le centre de l'écran (de la scène).

En fait, mon cube étant décalé de l'axe y, seul la face faisant front au centre de la scene est éclairer, puis la lumiere baisse doucement jusqu'a presque totalement noire, puis revient petit a petit sur la meme face.

Bref j'espere avoir ete claire (je ne pense pas puisque cette histoire m'embrouille les neurones XD), je reviens des que je peux poster mon code.

2 réponses

cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
27 mai 2008 à 15:58
#include
#include <stdlib.h>

#include <gl\glut.h>

using namespace std ;

void Clavier(unsigned char KeyPress, int x, int y)
{
    switch (KeyPress)
    {
        case 27 : exit(0) ;
    }
}

void InitRendering(void)
{
    glEnable(GL_DEPTH_TEST) ;
    glEnable(GL_COLOR_MATERIAL) ;
    glEnable(GL_LIGHTING) ;
    glEnable(GL_LIGHT0) ;
    glEnable(GL_LIGHT1) ;
    glEnable(GL_NORMALIZE) ;
}

void Resize(int w, int h)
{
    glViewport(0,0,w,h) ;

    glMatrixMode(GL_PROJECTION) ;
    glLoadIdentity() ;
    gluPerspective(45.0, (double)w/(double)h, 1.0, 200.0) ;
}

float _angle = 10.0 ;
void Affichage()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;
    glMatrixMode(GL_MODELVIEW) ;
    glLoadIdentity() ;

    glTranslatef(0.0f, 0.0f, -10.0f) ;
    
    // Ajoute une lumière ambiante
    GLfloat AmbientColor[] = {0.2f, 0.2f, 0.2f, 1.0f} ; // couleur (2.0, 2.0, 2.0)
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, AmbientColor) ;
    
    //Positonne un spot

    glPushMatrix() ;
    glRotatef(_angle, 0.0f, 1.0f, 0.0f) ;

    glBegin(GL_QUADS) ;

    //devant
    glColor3f(0.0f, 1.0f, 0.0f) ;
    glVertex3f(1.0f, 1.0f, 0.0f) ;
    glVertex3f(1.0f, -1.0f, 0.0f) ;
    glVertex3f(-1.0f, -1.0f, 0.0f) ;
    glVertex3f(-1.0f, 1.0f, 0.0f) ;
    
    //derrière
    glColor3f(1.0f, 0.0f, 0.0f) ;
    glVertex3f(1.0f, 1.0f, -2.0f) ;
    glVertex3f(1.0f, -1.0f, -2.0f) ;
    glVertex3f(-1.0f, -1.0f, -2.0f) ;
    glVertex3f(-1.0f, 1.0f, -2.0f) ;
    
    //droite
    glColor3f(0.0f, 0.0f, 1.0f) ;
    glVertex3f(1.0f, 1.0f, -2.0f) ;
    glVertex3f(1.0f, -1.0f, -2.0f) ;
    glVertex3f(1.0f, -1.0f, 0.0f) ;
    glVertex3f(1.0f, 1.0f, 0.0f) ;

    //gauche
    glColor3f(1.0f, 1.0f,1.0f) ;
    glVertex3f(-1.0f, -1.0f, -2.0f) ;
    glVertex3f(-1.0f, 1.0f, -2.0f) ;
    glVertex3f(-1.0f, 1.0f, 0.0f) ;
    glVertex3f(-1.0f, -1.0f, 0.0f) ;

    glEnd() ;
    glPopMatrix() ;

    glutSwapBuffers() ;
}

void update(int valeur)
{
    _angle += 1 ;
    if (_angle > 360)
    {
        _angle -= 360 ;
    }

    glutPostRedisplay() ;
    glutTimerFunc(25, update, 0);
}

int main(int charc, char** charv)
{
    glutInit(&charc, charv) ;
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) ;
    glutInitWindowSize(700, 700) ;
    glutCreateWindow("Essayons de comprendre l'éclairage avec Faucheuse ^^") ;

    InitRendering() ;
    glutKeyboardFunc(Clavier) ;
    glutReshapeFunc(Resize) ;
    glutDisplayFunc(Affichage) ;
    glutTimerFunc(25, update, 0);

    glutMainLoop() ;
    return 0 ;
}

voila voila, pourrioez vous m'expliquer pourquoi l'eclairage baisse svp?

merci d'avance
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
28 mai 2008 à 10:46
J'ai trouvé pourquoi : en fait comme on peut le voir, j'initialise deux lumieres : glEnable(GL_LIGHT0) et glEnable(GL_LIGHT1).

Je pensais que seulement les initialiser ne les affichait pas mais apperement si.
Quand je les desactive je n'ai plus aucune lumiere apart la lumiere ambiante.
0
Rejoignez-nous