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