Lumière simple avec opengl

Résolu
cs_Zareth Messages postés 15 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 9 juin 2006 - 8 juin 2006 à 00:23
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 8 juin 2006 à 14:38
Bonjour à tous, voila je travail en ce moment avec opengl et ma demande est simple. Je possède actuellement plusieurs points qui reliés forment une pyramide. Je voudrais placer une lumière colorée qui part du sommet et qui éclaire la base de cette pyramide.
Merci d'avance

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 juin 2006 à 00:59
Un spot de lumiere est en fait un objet que tu place dans ton espace.
Tu lui dit ensuite dans quelle direction pointé avec GL_SPOT_DIRECTION ainsi que son angle d'ouverture avec GL_SPOT_CUTOFF.
Les couleurs sont gérés par mes 3 premieres variables.
Les coordonées que j'ai utilisé sont celle de mon référentiel.(http://membres.lycos.fr/nitrous2fcarre/news.php)

Il est donc possible que tu ais à les modifier.

var
  Lumiere_Ambiente   : Array[0..3] Of GLfloat = (0.8, 0.8, 0.0, 1.0 );
  Lumiere_Diffuse    : Array [0..3] Of GLfloat = (1.0, 1.0, 0.2, 1.0 );
  Lumiere_Speculaire : Array[0..3] Of GLfloat = (1.0, 1.0, 1.0, 1.0 );
  Direction_Tout_Droit: Array [0..3] Of GLfloat = (1.0, 0.0, 0.0, 1.0);
  Position    : Array[0..3] Of GLfloat = (0.0, 0.0, 0.0, 1.0 );
begin
// initialisation
  glLightfv( GL_LIGHT0, GL_AMBIENT, @Lumiere_Ambiente );
  glLightfv( GL_LIGHT0, GL_DIFFUSE, @Lumiere_Diffuse );
  glLightfv( GL_LIGHT0, GL_SPECULAR, @Lumiere_Speculaire );
  glLightf ( GL_LIGHT0, GL_SPOT_CUTOFF, 50 );
  glLightf ( GL_LIGHT0, GL_SPOT_EXPONENT, 8 );
  glLightfv( GL_LIGHT0, GL_SPOT_DIRECTION, @Direction_Tout_Droit );

glEnable( GL_LIGHTING );
glEnable( GL_COLOR_MATERIAL );

// placement
  Position[0] : = 0; // position en X
  Position[1] := 0; // position en Y
  Position[2] := 0; // position en Z
  glLightfv( GL_LIGHT0, GL_POSITION, @Position );
  glLightf( GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.2);
  glEnable( GL_LIGHT0 );
end

Je te conseille de chercher les tutoriels de martin baudet qui sont très bien fait.
3
cs_Zareth Messages postés 15 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 9 juin 2006
8 juin 2006 à 14:13
Merci bien je pense que je vais pouvoir m'en sortir maintenant.
0
cs_Zareth Messages postés 15 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 9 juin 2006
8 juin 2006 à 14:31
Par contre tu saurais faire un spot ou pas? parce que la je comprends le principe de lumière ambiante et tout mais ça influe sur tout l'environnement et je me demandais comment juste éclairer un peu à la manière d'un projecteur qui éclaire un artiste sur scène..
Merci.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 juin 2006 à 14:38
C'est tiré de mon propre code, donc tu devras adapter:

Initialisation

  glLightfv( GL_LIGHT2, GL_AMBIENT, @CheckPoints_Ambiente );
  glLightfv( GL_LIGHT2, GL_DIFFUSE, @CheckPoints_Diffuse );
  glLightfv( GL_LIGHT2, GL_SPECULAR, @CheckPoints_Speculaire );
  glLightf ( GL_LIGHT2, GL_SPOT_CUTOFF, 40 );
  glLightf ( GL_LIGHT2, GL_SPOT_EXPONENT, 10 );
  glLightfv( GL_LIGHT2, GL_SPOT_DIRECTION, @Direction_En_Bas );

Utilisation
{------------------------------------------------------------------}
{          Affiche un spot au-dessus du prochain checkPoints       }
{------------------------------------------------------------------}
procedure AfficherSpotCheckPoints(XLum,YLum,ZLum:glFLoat);
begin
  glPushMatrix();
    glLoadIdentity;
    glRotate(Tilt, 1, 0, 0);
    glRotate(Heading, 0, 1, 0);
    glTranslatef(X, Y, Z);
    CheckSpot_Position[0]:=XLum;
    CheckSpot_Position[1]:=YLum;
    CheckSpot_Position[2]:=-Longueur-1+ZLum;
    glLightfv( GL_LIGHT2, GL_POSITION, @CheckSpot_Position );
    glLightfv( GL_LIGHT2, GL_SPOT_DIRECTION, @Direction_En_Bas );
    glEnable ( GL_LIGHT2);
  glPopMatrix();
end;
0
Rejoignez-nous