Jeux Libres

Envie de créer un jeu vidéo ?   Le site qui vous accompagne de A à Z.


» Les Forums » A propos de la création de jeux vidéo » Re : l'éclairage des objets.


Aller à la page : 1.

Re : l'éclairage des objets.
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 13 Oct 2008, 20:52             Message non corrigé

Alors, j'ai vu que il avait pas encore fait de tutos sur l'éclairage Kayl, alors je m'y suis mit là dessus en cherchant un peut partout, et j'ai trouver des notions que j'ai jamais appris. (Pour toute les formules en ce qui concerne la trigo et tout, mais j'ai du mal à comprendre, me faudrait carrément un cours sur tout ce qui concerne l'espace, les collisions, etc... Et les formules à appliquer pcq pff...)
Alors j'ai commencer par quelque chose de simple : éclairer un Sphere.

voici le code

#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <cstdlib>
void dessiner();

GLUquadric *params;
int main(int argc, char *argv[])
{
   SDL_Event event;


   SDL_Init(SDL_INIT_VIDEO);
   atexit(SDL_Quit);
   SDL_WM_SetCaption("SDL GL Application", NULL);
   SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);

   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();
   gluPerspective(70,(double)640/480,1,1000);
   



   
for (;;) {

while (SDL_PollEvent(&event)) {

switch(event.type)
{
case SDL_QUIT:
exit(0);
break;
}
}


       dessiner();


   }

   return 0;
}

void dessiner()
{
   int LightPos[4] = {2,4,3,1};
   int MatSpec [4] = {1,1,1,1};
float LightDif[4] = {.5f,.5f,1.f,1.f};
glLightfv(GL_LIGHT0,GL_DIFFUSE,LightDif);
glMaterialiv(GL_FRONT_AND_BACK,GL_SPECULAR,MatSpec);
glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,100);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;
params = gluNewQuadric ();
   glMatrixMode( GL_MODELVIEW );
   glLoadIdentity();

   gluLookAt(3,4,2,0,0,0,0,1,0);

glEnable(GL_DEPTH_TEST);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);



glLightiv(GL_LIGHT1,GL_POSITION,LightPos);

   gluSphere (params, 0.7, 20, 20);

 
   glFlush();
   SDL_GL_SwapBuffers();
gluDeleteQuadric (params);
}


Bon glLightPosition, ça, ça va.
Mais déjà, quelqu'un pourrait m'expliquer ce que font les 4 paramètre dans le tableau MatSpec et LightDif
Et aussi, GL_FRONT_AND_BACK ça sert à quoi ?

Et j'ai du mal à comprendre, la différence entre la lumière spéculaire et la lumière ambiante.
Sinon la brillance de l'objet, ça, ça va.
Depuis que je m'intéresse à la programmation de jeux j'apprend plein de trucs que je connaissais même pas. :o
Comme les coordonnée polaire par exemple dans le cas ou il faut bouger le point de vue. (la caméra)
Et aussi l'écriture des matrices de transformations sur des vecteurs à 3 dimensions.

Ainsi après, j'attaque la création des maps.

Mais il me reste encore plein de choses, tel que la gestion des collisions, et le chargement d'objets créer par exemple avec blender, y'a pas des tutos là dessus ?

Après l'éclairage, je m'attaque au chargement d'objets sur les maps.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
David



Grade : Expert
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 13 Oct 2008, 22:05             Message non corrigé

Commençons par glLightfv : Cette fonction permet d'initialiser une lampe

GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, GL_LIGHT3... Ce sont des lumières par défaut. Il en existe 8 je crois.
GL_LIGHT0 et une lampe qui est, par défaut, allumé et de lumière blanche. Les autres sont noires.

Quand je dis blanche, cela signifie que les doses de rouge, de vert et de bleu sont à leur maximum.
Dans ton cas, c'est cette lampe par défaut que tu utilises.

Ensuite, GL_DIFFUSE signifie que la lumière vient d'un point. Par exemple, une lampe. Contrairement au soleil qui est dit directionnel car, arrivé sur l'obstacle, les rayons sont parallèle. Et une lumière d'ambience, c'est comme dans sauerbraten, la lumière est partout pareil, il n'y a pas d'ombre.

Ensuite, float LightDif[4] = {.5f,.5f,1.f,1.f}; est un tableau représentant les doses de lumière. Ici, 50% de rouge, 50% de vert et 100% de bleu.

glLightfv initialise donc la lampe GL_LIGHT0 avec les informations que nous venons de voir.

Pour ce qui est de GL_FRONT_AND_BACK, cela signifie que l'éclairage sera calculé des 2 coté de la texture, recto et verso.
Mais tu veras qu'en général, on ne calcul qu'un coté des textures car ça ne sert à rien de calcule l'éclairage venant de l'intérieur du personnage. Ceci va de paire avec le culling.

Je ne sais plus si je te l'ai déjà dis mais je te recommande vivement ce lien. Le tuto est en anglais mais bon...

________
Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
  Profil Mail
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 14 Oct 2008, 15:53             Message non corrigé

Il a l'air trop bien ce cours, car il explique comment faire un terrai, comment gérer les collisions, et tout, mais dommage qu'il est en Anglais car je comprends rien à ce qu'il dit, il y a pas un tuto du même genre en français ?

(Fin les bases de openGL ça va, mais quand il s'agit de comment faire un terrain, et importer des personnages ou objets là je comprend plus rien)

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
OSasuke



Grade : Connaisseur
Inscrit le: 29 Juin 2008, 10:54
Ecrit le: 14 Oct 2008, 18:53             Message non corrigé


#include <cstdlib>
#include <iostream>
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <Newton/Newton.h>

using namespace std ;

int main(int argc, char *argv[])
{
SDL_Event event ;

SDL_Init(SDL_INIT_VIDEO);
atexit(SDL_Quit);
SDL_WM_SetCaption("OpenGL / Newton Application", NULL);

SDL_Surface *ecran = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);

glMatrixMode( GL_PROJECTION );
   glLoadIdentity();
   gluPerspective(70,(double)640/480,1,1000);
   glEnable(GL_DEPTH_TEST);

while (1)
   {
       SDL_PollEvent(&event);
       switch(event.type)
       {
           case SDL_QUIT:
           exit(0);
           break;

           case SDL_KEYDOWN :
                switch (event.key.keysym.sym)
                {
                       case SDLK_ESCAPE:
                       exit(0);
                       break;
                }

       }

   SDL_Delay(8);

   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   
   glMatrixMode( GL_MODELVIEW );
   
   glLoadIdentity( );
   
   // Code pour les lumiére ||||||||||||||||||||||||||||||||||||
   glEnable (GL_DEPTH_TEST);
   glEnable (GL_COLOR_MATERIAL);
   glEnable (GL_LIGHTING);

   glEnable (GL_LIGHT0);
   GLfloat LampeDiffuse [] = {1.0f, 1.0f, 1.0f};
   GLfloat LampeAmbient [] = {0.75f, 0.75f, 0.75f};
   GLfloat LampePosition [] = {-5.0f, -5.0f, 10.0f, 5.0f};

   glLightfv (GL_LIGHT0, GL_DIFFUSE, LampeDiffuse);
   glLightfv (GL_LIGHT0, GL_SPECULAR, LampeDiffuse);
   glLightfv (GL_LIGHT0, GL_AMBIENT, LampeAmbient);
   glLightfv (GL_LIGHT0, GL_POSITION, LampePosition);

   glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
   glColorMaterial (GL_FRONT_AND_BACK, GL_SPECULAR);
   glColor3f (1.0f, 1.0f, 1.0f);
   glColorMaterial (GL_FRONT_AND_BACK, GL_EMISSION);
   glColor3f (0.0f, 0.0f, 0.0f);
   glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 128);
   //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

   gluLookAt(5,5,2,0,0,0,0,0,1);

   glFlush();
   SDL_GL_SwapBuffers();

   }
return 0 ;

}


Tu utiliser ce code ça produit un exelent résultat .  

(Fin les bases de openGL ça va, mais quand il s'agit de comment faire un terrain, et importer des personnages ou objets là je comprend plus rien)

Sur ce coup , je suis avec toi.

________
  Profil Mail
 


Aller à la page : 1.


Hébergeur du site : 1and1.fr



Site de création de Jeux Vidéo
Apprenez à créer vos propres Jeux Video

1389473 pages ont été consultées sur le site !
Dont 1486 pages pendant les 24 dernières heures.

Page générée en 0.376 secondes


Nos partenaires
- Otium Production : Aide aux débutants à créer leurs jeux
- Les bibliothèques de développement de jeux vidéo


  © 2005-2012 www.jeux-libres.com - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.