Salut,
J'ai un petit soucis avec les textures ARB (mon programme doit rester utilisable sur des plateformes portables (opengl es) leur utilisation est donc impérative).
J'ai 2 maps:
- diffuse RGBA 8888 (A est utilisé)
- lightmap statique RGBA 8888 (A est plein mais il sert à autre chose, donc doit être ignoré)
J'aimerai afficher mes polygones en utilisant l'alpha de la map diffuse sur la lightmap.
Apparemment j'y parviens mais ce qui est affiché est semi-transparent.
Ce qui me gène le plus c'est que quelque soit les paramètres que j'utilise l'affichage ne change pratiquement pas et j'ai un mal fou pour trouver des info sur les paramètres ARB (tout le monde est passé -à juste raison- sur les shaders, mais c'est impératif dans mon cas)
Code de base pour l'affichage:
avec
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 void gl_face_drawFace_TEXTUREARB2(sFACE *pface, sVERT *pverts, sMAPVERT *pmapverts0,sMAPVERT *pmapverts1){ long id, x0,y0,z0, x1,y1,z1, x2,y2,z2 ; // ne sautez pas au plafond c'est en fixed .12 ;) id = pface->vertsId[0] ; x0 = pverts[id].pos_world[0] ; y0 = pverts[id].pos_world[1] ; z0 = pverts[id].pos_world[2] ; id = pface->vertsId[1] ; x1 = pverts[id].pos_world[0] ; y1 = pverts[id].pos_world[1] ; z1 = pverts[id].pos_world[2] ; id = pface->vertsId[2] ; x2 = pverts[id].pos_world[0] ; y2 = pverts[id].pos_world[1] ; z2 = pverts[id].pos_world[2] ; glBegin(GL_TRIANGLES) ; glMultiTexCoord2fARB(GL_TEXTURE0_ARB, pmapverts0[0].pos[0],pmapverts0[0].pos[1]) ; glMultiTexCoord2fARB(GL_TEXTURE1_ARB, pmapverts1[0].pos[0],pmapverts1[0].pos[1]) ; glVertex3i(x0,y0,z0) ; glMultiTexCoord2fARB(GL_TEXTURE0_ARB, pmapverts0[1].pos[0],pmapverts0[1].pos[1]) ; glMultiTexCoord2fARB(GL_TEXTURE1_ARB, pmapverts1[1].pos[0],pmapverts1[1].pos[1]) ; glVertex3i(x1,y1,z1) ; glMultiTexCoord2fARB(GL_TEXTURE0_ARB, pmapverts0[2].pos[0],pmapverts0[2].pos[1]) ; glMultiTexCoord2fARB(GL_TEXTURE1_ARB, pmapverts1[2].pos[0],pmapverts1[2].pos[1]) ; glVertex3i(x2,y2,z2) ; glEnd() ; }
Ce qui m'étonne c'est que quelque soit les paramètres de combinaison que je peux passer au unités, l'affichage ne change pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // unité 0 (la texture + alpha) glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, ptexture0->numTex); // unité 1 (la lightmap) glActiveTextureARB(GL_TEXTURE1_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, ptexture1->numTex); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Question subsidiaire pour les pro de cette lib:
Est-il possible de faire tout ça en une passe ?.
- Multiplier les canaux RGB de la lightmap par les canaux RGB de la diffusemap et utiliser le canal ALPHA de la diffusemap pour alphamapper le tout.
Ou alors je suis forcé d'utiliser soit trois unités de textures soit 2 passes (la première solution est proscrite ; toujours pour une question de portabilité, la seconde solution est juste un peu lente)
Partager