Bonjour, c'est encore moi avec mes questions
Je viens cette fois vous voir pour en savoir plus sur l'utilisation de textures grace a des VBO
Travaillant toujours sur un terrain, j'ai un maillage avec un elevation, et j'ai a coté une image qui represente la surface de mon terrain (pour tout le terrain, j'ai donc une seule image de texture)
J'affiche bien mon VBO, pas de soucis, mais quand je veux y plaquer une texture, la texture se retrouve dupliquée pour chaque maille du terrain.
Voici ce que j'utilise pour l'affichage :
precisions :
- vbo_terrain est le VBO qui contient les coordonnées en x y z de mon maillage
- texture_terrain est un unsigned int ou j'ai stocké ma texture.
Et voici comment je charge ma texture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 glBindBuffer(GL_ARRAY_BUFFER, vbo_terrain); glVertexPointer(3, GL_FLOAT, 0, 0); //Chargement de la texture glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture_terrain); glActiveTexture(GL_TEXTURE0); glTexCoordPointer(3,GL_FLOAT,0,0); //Affichage du terrain glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glDrawElements(GL_TRIANGLE_STRIP, 2*mesh_width*mesh_height, GL_UNSIGNED_INT, index ); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY);
Ce que j'ai deja tenté en faisant des recherches sur internet + bouquins OpenGL (je n'en ai pas beaucoup
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 AUX_RGBImageRec *pTextureImage = auxDIBImageLoad(filename); unsigned int g_textureID; if( pTextureImage != NULL ) { glGenTextures( 1, &g_textureID ); glBindTexture( GL_TEXTURE_2D, g_textureID ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D( GL_TEXTURE_2D, 0, 3, pTextureImage->sizeX, pTextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pTextureImage->data ); }) :
Utiliser glTexParameteri pour "clamper" ma texture sur la largeur et la longueur avec la fonction glTexParameteri() et en jouant sur GL_TEXTURE_WRAP_S et GL_TEXTURE_WRAP_T mais j'ai le meme soucis
J'ai essayer de preciser un pointeur d'indice pour la texture
J'ai aussi essayer de modifier glTexCoordPointer() (parfois sans trop comprendre d'ailleurs)
Bref, si vous avez des pistes pour afficher une texture sur l'ensemble d'un VBO et non pas triangle par triangle
Merci beaucoup !
Partager