Bonjour, je me suis lancé dans un générateur de terrain à partir de heightmap, pour l'instant je n'ai fais que de triangulariser une surface rectangulaire. Mais je me heurte a un petit probleme.
J'ai donc mon maillage qui est ok, et j'ai essayé de lui appliquer une tesxture. Les textures sont chargée grace à devil/ilut. La texture se charge correctement. Donc lorsque que je charge la texture dans la fonction d'affichage du maillage, tout est ok, ma surface est bel et bien texturée, par contre, si je me contente de binder la texture, là, elle ne s'affiche plus.
Voivi le code qui affiche le maillage :
celui qui load la texture:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void Terrain::draw() { glEnable(GL_TEXTURE_2D); texture.Select(); for(int i=0;i<nb_Faces;i++) { glBegin(GL_TRIANGLES); glTexCoord2f(1,1);glVertex3f(pVertices[pFaces[i][1]][X],pVertices[pFaces[i][1]][Y],pVertices[pFaces[i][1]][Z]); glTexCoord2f(0,1);glVertex3f(pVertices[pFaces[i][2]][X],pVertices[pFaces[i][2]][Y],pVertices[pFaces[i][2]][Z]); glTexCoord2f(1,0);glVertex3f(pVertices[pFaces[i][3]][X],pVertices[pFaces[i][3]][Y],pVertices[pFaces[i][3]][Z]); glEnd(); } }
et celui quui bind la 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 void Texture::Load(char *FileName) { ilInit(); //initialise devil iluInit(); //initalise ilu ilutRenderer(ILUT_OPENGL); //initialise ilut TextureId=ilutGLLoadImage(FileName); //charge l'image ds la texture pTexels=ilGetData(); //recupere les texels Width=ilGetInteger(IL_IMAGE_WIDTH); //recupere width Height=ilGetInteger(IL_IMAGE_HEIGHT); //recupere height Bpp=ilGetInteger(IL_IMAGE_BPP); //recupere le nbr d'octets par pixel Format=ilGetInteger(IL_IMAGE_FORMAT); //recupere le format }
et pour creer le terrain:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void Texture::Select() { glBindTexture(GL_TEXTURE_2D,TextureId); }
Donc comme ça, ça ne fonctionne pas, par contre si je mets la ligne
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 void Terrain::create(unsigned int w,unsigned int h,const float &sz) { init(4,2); pVertices[0](0,0,0); pVertices[1](w,0,0); pVertices[2](0,h,0); pVertices[3](w,h,0); pFaces[0](0,1,2); pFaces[1](3,2,1); subdivide(sz,pFaces[1]); subdivide(sz,pFaces[0]); texture.Load("rock105.jpg"); }
:texture.load("rock105.jpg"); dans Texture:rax() et non là ça marche, mais la texture est rechargée à chaque affichage
si quelqu'un aurait une idée de l'endroit où se situe le probleme, je suis preneur
merci
Partager