Placage de texture (2/2) Par Xavier Michelon |
La dernière fois, nous avons plaqué sur chacune des faces du cube la même image. Aujourdhui, nous allons plaquer une image de bois sur 3 faces du cube, et une texture procédurale sur les 3 autres faces du cube. Il nous faut pour cela mettre en uvre le mécanisme dobjets de texture quOpenGL met à notre disposition.
Lorsquon souhaite travailler avec plusieurs textures, il faut leur assigner un identifiant, cest-à-dire un nombre entier. OpenGL dispose dun système interne de gestion des identifiants de texture (texture ID en anglais). Lorsque vous voulez créer une texture, il vous faut demander à OpenGL de vous attribuer un identifiant en faisant un appel à la fonction
Void glGenTextures(GLsizei nombre,Gluint *idtextures)
nombre indique le nombre de textures que vous souhaiter créer, et idtextures est un pointeur vers un tableau dentiers qui contiendra au retour de la fonction les nombres identifiants de texture que vous avez demandés.
Par la suite, on retrouve encore le mécanisme de machine à état dOpenGL : vous définissez une texture active, et toutes les opérations sur les textures qui seront faites par la suite seront appliquées à la texture active. La fonction que vous permet de définir la texture active est glBindTexture(), dont le prototype est le suivant :
void glBindTexture(GLenum cible, Gluint idtexture)
cible correspond au type de texture utilisé (GL_TEXTURE_1D, GL_TEXTURE_2D ou GL_TEXTURE_3D). Ce paramètre est nécessaire car lallocation despace pour la texture se fait lors du premier appel à glBindTexture() pour un numéro de texture donné, et non lors de lattribution de lidentifiant. Le paramètre idtexture désigne lidentifiant de la texture quon souhaite rendre active.
Lutilisation des textures dans un programme OpenGL se fait donc en général de la façon suivante :
- Lors de linitialisation, on réserve les identifiants de texture et on crée les textures :
glGenTextures(2,IdTex);
glBindTexture(GL_TEXTURE_2D,IdTex[0]) ;
/* Création de la première texture (avec glTexParameteri(), glTexImage2D...) */
...
glBindTexture(GL_TEXTURE_2D,IdTex[1]) ;
/* Création de la deuxième texture */
...
- Au cours de la fonction daffichage, on change éventuellement la texture active avant la description de chaque face :
void affichage()
{
...
glBindTexture(GL_TEXTURE_2D,IdTex[0]);
glBegin(GL_POLYGON); /* description de la face 1 */
glEnd();
glBindTexture(GL_TEXTURE_2D,IdTex[1]);
glBegin(GL_POLYGON);
/* description de la face 2 */
glEnd();
...
}
|