Cependant, gardez à l'esprit que dans une semaine ou deux vous devrez passer en couleur !!! Ne codez donc rien en dur qui vous empêche de passer en couleur par la suite !
Voici quelques exemples de ce que vous devrez faire, les couleurs et
le lissage de la surface (dernière image) arriveront un peu plus
tard...
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
#define DIRECTIONAL 0 #define SPOT_LIGHT 1 #define CONE_LIGHT 2 #define ATTENUATED_LIGHT 3
typedef struct LightStruct { Matrix4 LocalToGlobal; /* Une lampe est un vrai objet 3d avec une position et une orientation */ Matrix4 GlobalToLocal; int Type; /* type de la source lumieuse */ double angle; /* sert pour la cone_light angle d'ouverture */ double intensite; /* intensite de la lumiere comprise entre 0 et 1 */ int puissance; /* puissance d attenuation des lumieres ponctuelles */ double attenuation; /* factuer d'attenuation */ Color color; }Dans object.c :
/*--------------------------------------*/ void ReadLight(char *filename, Light *Lumiere) /*--------------------------------------*/ { FILE *fp; char line[1024], command[1024]; double x, y, z; int r, g, b; if ((fp = fopen (filename, "r")) == NULL) { fprintf (stderr, "Attention: file %s can not open !!!\n", filename) ; exit(0); } SetMatrixToIdentity(&(Lumiere->LocalToGlobal)); SetMatrixToIdentity(&(Lumiere->GlobalToLocal)); while(fgets(line, 1024, fp) != NULL) if((line[0] != '#') && (line[0] != 10)){ if(sscanf(line, "%s", command) != 0) { if(!strcmp(command, "Position")) /* Pos 3D du repere associe a la lumiere */ dbl3par(line, x, y, z); if(!strcmp(command, "Type")) intpar(line, Lumiere->Type); if(!strcmp(command, "Intensite")) dblpar(line, Lumiere->intensite); if(!strcmp(command, "Angle")) dblpar(line, Lumiere->angle); if(!strcmp(command, "Attenuation")) dblpar(line, Lumiere->attenuation);
if(!strcmp(command, "Color")) { /* Couleur de la lampe */ int3par(line, r, g, b); Lumiere->color.r = (unsigned char) r; Lumiere->color.g = (unsigned char) g; Lumiere->color.b = (unsigned char) b; }
if(!strcmp(command, "Puissance")) intpar(line, Lumiere->puissance); } } fclose(fp); Lumiere->angle = cos(Lumiere->angle*M_PI/180); /* Positionne la camera dans l'espace */ TranslateLight(Lumiere, x, y, z); }Voici un exemple de fichier décrivant une lumière : light_default.obj