Fog (brouillard)

         C’est ce qui simule les effets atmosphériques (je ne vous apprends rien là) comme la fumée, la pollution etc. On s’en sert aussi pour rendre les effets de vision limitée (en même temps, cela permet de retirer de la scène une partie des objets 3D trop loin et d’accélérer le rendu).

1.   Le fonctionnement du brouillard

         Lorsque le brouillard est activé, les objets qui sont de plus en plus loin commencent à se fondre dans la couleur du brouillard. On peut contrôler aussi la densité du brouillard pour déterminer le rythme avec lequel les objets sont estompé lorsque la distance augmente.      
Le brouillard est appliqué à la scène après les transformations matricielles, la lumière, et les textures, donc il affecte les objets transformés (ie avec texture…).

2.   L’utilisation du brouillard

         C’est très simple. On l’active en passant GL_FOG comme attribut de glEnable() et on la couleur et l’équation de contrôle de la densité du brouillard grâce à :

void glFogf( GLenum pname, GLfloat param )
void glFogi( GLenum pname, GLint param )
void glFogfv( GLenum pname, const GLfloat *params )
void glFogiv( GLenum pname, const GLint *params )
  
avec pname = GL_FOG_MODE, GL_FOG_DENSITY, GL_FOG_START, GL_FOG_END, ou GL_FOG_COLOR, et param la nouvelle valeur.

Exemple :

GlEnable(GL_FOG) ;
GLfloat fogcolor[4] = {0.5, 0.5, 0.5, 1} ;
GLint fogmode = GL_EXP ;
glFogi (GL_FOG_MODE, fogmode) ;
glFogfv(GL_FOG_COLOR, fogcolor) ;
glFogf(GL_FOG_DENSITY, 0.35) ;
glFogf(GL_FOG_START, 1.0) ;
glFogf(GL_FOG_END, 5.0) ;

3.   Les équations

       Le brouillard se sert d’une variable f variant de 0 (brouillard complet) à 1 (transparent comme de l’eau de roche). Les 3 équations sont :

·               GL_LINEAR :       f = (end – z) / (end – start)

·               GL_EXP :              f = e-density * z

·               GL_EXP2 :            f = e-(density * z)²

Remarque :             
            Penser à mettre le background de la couleur du brouillard : ainsi, l’effet sera plus frappant. La commande correspondante est  :                                                 GlearColor(couleur_brouillard[0],couleur_brouillard[1],couleur_brouillard[2],couleur_brouillard[3]);

Exemple :
            Voici un screen-shot de mon petit moteur de rendu 3D avec du brouillard. C'est tout de même formidable l'OpenGL : tout ça avec seulement 4 lignes de codes !!!

            Pour les sources, je vous laisse le soin de regarder dans le programme général qui se trouve dans les annexes. Je n'ai pas trouvé utile de vous mettre un exemple, car vous savez déja tout. C'est extrémement simple, tout du moins, en ce qui concerne le brouillard global (appliqué à toute la scène). Je cherche, en ce moment, à créer de la fumée dans une zone précise de l'écran. C'est moins évident que le brouillard global, car si on se contente de procéder de la même façon, la fumée disparaît lorqu'on s'approche !!! Pour toutes idées, mailez-moi, svp.

Page précédente    Page suivante