Formation OpenGL |
|
Il est très simple en OpenGL de dessiner un point. Mais un point n'est pas qu'un point : on peut lui affecter une taille, et il sera affiché comme un carré.
De plus, si on en a besoin, les points peuvent être antialiasés, et ils apparaissent alors comme des disques.
La taille des points peut même être modulée en fonction de la distance à la caméra virtuelle.
Et la touche finale : depuis OpenGL 2.0, les points peuvent être directement texturés. On les appelle alors des Sprites, comme dans les jeux vidéo en 2D d'antan. On gagne en efficacité, puisque plutôt que d'utiliser un quad, et d'envoyer quatre sommets dans le pipeline graphique, un seul sommet permet de générer un carré texturé qui fait toujours face à la caméra virtuelle.
En activant la transparence, ces Sprites permettent de gérer des systèmes de particules, et de créer des effets atmosphériques réalistes : brouillard, neige, feu...
Voilà simplement 4 points dessinés comme des rectangles de 32 pixels de côté : | glColor4f(0, 0, 1, 1); |
![]() |
Si on active l'antialiasing, les points sont restitués comme des disques : |
|
![]() |
la taille est modulée en fonction de la distance d de la caméra au sommet. La formule est la suivante : taille = taille * sqrt(1/( a * b*d * c*d*d)) ; (a, b, c) sont les coefficients d'atténuation. |
|
![]() |
Après avoir chargé et activé une texture (dans l'exemple, il s'agit de particle.tga, dont voici la version GIF : |
|
![]() |
Avec cette technique, l'intensité de la texture est directement utilisée comme opacité du Sprite ! |
|
![]() |
Alors maintenant, vous êtes prêts pour faire tomber la neige : générez un système de NMAX flocons de neige (10 000 sur une bonne carte), au niveau du plan supérieur d'un parallélépipède rectangle et faites-les tomber verticalement. Lorsqu'ils atteignent le plan inférieur de leur boîte, regénérez-les en haut.... Et tombe la neige.
Vous pouvez imaginer toutes les améliorations : du vent dans les flocons, une accumulation sur certaines surfaces, voire la fameuse boule-souvenir, qui neige quand on la retourne.