OpenGL, GLFW et textures

note

Ce texte paraphrase plus ou moins bien cette page: Textures. C’est volontaire, cela me permet de mieux mémoriser en français ce que j’apprends.

texture en OpenGL, les principes

On peut se représenter les textures comme des portions de papier peint que l’on collerait aux surfaces créées avec OpenGL. Pour ce faire, il faut associer des coordonnées de la texture avec chaque sommet de la surface que l’on veut habiller.

Une texture est une surface en 2D, ce qui correspond bien à la métaphore du papier peint. Les coordonnées x et y de la texture varient, pour chaque axe, entre 0 et 1. Voici un exemple d’association de coordonnées d’une texture à un triangle:

float texCoords[] = {
    0.0f, 0.0f,  // lower-left corner  
    1.0f, 0.0f,  // lower-right corner
    0.5f, 1.0f   // top-center corner
};

Que se passe-t-il lorsqu’on sort de l’intervalle [0, 1]? Ce comportement de la texture est paramétrable avec des constantes:

  • GL_REPEAT: répète la texture,
  • GL_MIRRORED_REPEAT: répète la texture mais avec un effet miroir à chaque répétition,
  • GL_CLAMP_TO_EDGE: l’image est étirée jusqu’aux bords de la surface, c’est à dire que toute la surface est immergée dans l’intervalle [0, 1],
  • GL_CLAMP_TO_BORDER: tout ce qui est hors de l’intervalle [0, 1] est considéré comme étant le bord.

Notez bien que les coordonnées de la texture sont notées non pas x et y mais s et t.