Bonjour les zenfants ! Et voui encore et toujours moua Mais c'est pour la bonne cause! ( comment ca ? ma cause personel n'est pas " bonne" ? et bah tant pis ! mouhahaha )
Bon trêve de plaisanterie ! Je vous expose mon petit pb , je n'arrive pas a cerner mon probleme; il peut venir de 3 choses différentes
- mauvaise utilisation de openGL - mauvaise utilisation de devIL - mauvaise utilisation de photoshop / psp
Probleme en question : je veut afficher une image ( format png ) sous openGL a l'aide de devIL; qui contienne des régions transparente totalement . Pour cela, j'ai tout d'abord retoucher mon image ( format bmp d'origine ) ; en capturant au lasso ( facons cow-boy des temps moderne ) la zone que je veut non-transparente ; puis a l'aide d'un beua ctrl+c et ctrl+v je me suis retrouver avec une nouvelle image dont le fond est tout transparent ( une suite de petit carré blanc/bleu-clair sous photoshop / psp ) . Ensuite les choses se corsent : J'enregistre mon images sous PSP et la misére, il me dit qu'il est en réison du format , obligé de dusionner mon image ...résultat ; mon beau background transparent se retrouve blanc .... pas cool Si j'enregistre sous adobe, quand je reload l'image, le background reste transparent ; mais si je charge la meme image sous PSP, le background apparait blanc .... Soit il s'agit de ma part d'un mauvaise utilisationde psp et mon image contient bien une couche alpha comme je le souhaite ... soit j'ai rien comprit ^^
Bon je pense que je pb ne se situe pas mais sait-ton jamais !
Passons au code a proprement parlé :
tout d'abord la partie concernant le charment d'image ( avec la lib devIL ) :
Je ne suis pas certain de moi la dessus ... mais en tout ca, avec /sans transparance, j'arrive sans probleme a texturer mes quad a l'aide de cette texture .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ilInit(); ilutEnable(ILUT_OPENGL_CONV); ilutRenderer(ILUT_OPENGL); ilGenImages(1,&texture_testId[0]); ilBindImage(texture_testId[0]); texture_testId[0] = ilutGLLoadImage("ey1.png");
Enfin ma fonction d'affichage ( appelé a chaque frame ) qui se charge dans l'ordre: -De dessiner des "tiles" et un chemin ( drawpath ) avec le depth_buffer activé . -De dessiner mes objets contenant de la transparence du + lointaint au plus proche ( enfin je n'en ai qu'un pour le moment donc ca va ) avec le blending activé et le depth-buffer desativé .
Le résultat en image devrait être un petit bonhomme sur un carré vert ( tile de base ) Et en réalité j'obtient juste le petit bonhomme ( le fond sur la texture blitté est donc affiché blanc et non transparent) ...
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 //efface les tampons de profondeur et le frame buffer glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode( GL_MODELVIEW ); //sélectionne une matrice glLoadIdentity(); glEnable( GL_DEPTH_TEST ); drawPath(algo) ; for ( int i = 0 ; i < taille_x ; i ++ ) { for ( int j = 0; j < taille_y ; j++ ) { drawTile(32*i,24*j,tab_tile[i][j].id); } } glDisable( GL_DEPTH_TEST ); // on active le blending glEnable(GL_BLEND); // glBlendFunc(GL_SRC_ALPHA,GL_ONE); // On active l'application de texture... glEnable (GL_TEXTURE_2D); // ... et on indique quelle texture utiliser (celle qui a été créée précédemment). glBindTexture (GL_TEXTURE_2D, texture_testId[0]); glBegin(GL_QUADS); glColor4f(1.0f,1.0f,1.0f,1.0f); glTexCoord2f (0 , 0 ); glVertex2f( 0, 0); // coin bas-gauche glTexCoord2f (0 , 1.0/8.0); glVertex2f( 0, 32); // coin haut-gauche glTexCoord2f (1.0/12.0, 1.0/8.0); glVertex2f( 24, 32); // coin haut-droite glTexCoord2f (1.0/12.0, 0 ); glVertex2f( 24, 0); // coin bas-droite glEnd(); glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); SDL_GL_SwapBuffers();
Des idées? je m'avoue vaincu la( mais je n'ai pas dit mon dernier mot )
Partager