Texel |
|
Création d'un SkyBox
Une des méthodes pour représenter un paysage autour d'une scène en 3d dans une application est l'utilisation d'un SkyBox. Un SkyBox est simplement un cube dont les textures sont appliquées à l'intérieur du celui-ci. Comme la scène (et l'observateur) est à l'intérieur du cube, on a l'impression d'être entouré par un paysage. Mais pour créer cette illusion, certaines précautions doivent être prises.
Attention: La méthode présentée ici est ancienne et vise la version 1.2 d'OpenGL. Elle n'utilise pas les optimisations possibles avec des versions plus récentes d'OpenGL et n'est pas compatible avec OpenGL 3.1 et supérieurs (cf CubeMapping et Vertex Buffer). I. Affichage d'un SkyBox dans un programme OpenGL. Par défaut, OpenGL utilise le mode répétition GL_REPEAT pour les textures. Ce mode met des bordures sur les textures au niveau des arrêtes des polygones qui ne sont reliés à aucun autre polygone (parce qu'il se base sur les texels voisins pour ses calcules. cf Guide Officiel OpenGL 1.2). Pour être plus clair, sur les arrêtes qui n'appartiennent qu'à un seul polygone.
En général, ce n'est pas visible puisque les polygones très proches ont souvent une arrête en commun et une texture en commun. Mais pour un SkyBox ça peut poser des problèmes si on veut utiliser des textures de haute résolution. Parce que dans ce cas là, nous devons dessiner les six faces du cube les unes après les autres, entre autant de glBegin et de glEnd (parce qu'on utilise alors 6 textures différentes). Donc on risque de voir les arrêtes des 6 faces du cube. Pour limité le problème on pourrait utiliser GL_CLAMP qui calcul différemment l'application des textures au niveau des arrêtes. Ca marche sur les cartes NVIDIA mais ça n'est pas suffisant pour certaines cartes (comme les ATI). On va donc utiliser GL_CLAMP_TO_EDGE ou la valeur hexadécimale 0x812F(si l'header de votre librairie OpenGL date un peu).
Pour l'affichage, il faut faire attention au sens de la description des vertices des faces (si vous utilisez GL_CULL_FACE). N'oubliez pas non plus de désactiver le test de profondeur (afficher le SkyBox puis votre scène) et de désactiver la lumière.
Je pense que vous savez dessiner un cube en OpenGL? Dessinez les faces une par une après avoir défini la bonne texture. Il vaut mieux centrer le SkyBox autour du personnage pour qu'il suive ses mouvements.
Références: OpenGL 1.2 le guide Officiel (disponible gratuitement en version anglaise sur OpenGL.org). II. Création d'un SkyBox avec Terragen. Créer un SkyBox est très simple. vous pouvez utiliser Terragen par exemple (il est simple à utiliser et gratuit). Mais la méthode pour créer un SkyBox est la même avec tous les modeleurs. On crée un paysage et on fait le rendu des six faces en faisant plusieurs rotation de la caméra sur 90 degrés avec un cône de vision de 90 degrés (dans les settings). ![]() |