Je cherche à faire apparaitre du texte devant le reste de ma scène.
Mais, pour faire ça propre, je souhaiterais que l'on puisse voir la scène entre les caractères (qu'on ne voit pas le fond de la texture contenant mon texte).
J'avais lu qu'une technique pour obtenir ça, consistait à avoir une image avec le texte normal sur fond noir, et une deuxième image (masque) avec le même texte en noir sur fond blanc.
Mais j'obtiens ce résultat :
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
43
44
45
46 glPushMatrix; glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_DST_COLOR, GL_ZERO); //.Masque. case _nDecompte of 3: glBindTexture(GL_TEXTURE_2D, TEXTURE_MASQUE_3); 2: glBindTexture(GL_TEXTURE_2D, TEXTURE_MASQUE_2); 1: glBindTexture(GL_TEXTURE_2D, TEXTURE_MASQUE_1); 0: glBindTexture(GL_TEXTURE_2D, TEXTURE_MASQUE_GO); end; glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-2.5, 2.5, 10); glTexCoord2f(1, 0); glVertex3f(2.5, 2.5, 10); glTexCoord2f(1, 1); glVertex3f(2.5, 7.5, 10); glTexCoord2f(0, 1); glVertex3f(-2.5, 7.5, 10); glEnd; //.Texture. glBlendFunc(GL_ONE, GL_ONE); case _nDecompte of 3: glBindTexture(GL_TEXTURE_2D, TEXTURE_3); 2: glBindTexture(GL_TEXTURE_2D, TEXTURE_2); 1: glBindTexture(GL_TEXTURE_2D, TEXTURE_1); 0: glBindTexture(GL_TEXTURE_2D, TEXTURE_GO); end; glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-2.5, 2.5, 10); glTexCoord2f(1, 0); glVertex3f(2.5, 2.5, 10); glTexCoord2f(1, 1); glVertex3f(2.5, 7.5, 10); glTexCoord2f(0, 1); glVertex3f(-2.5, 7.5, 10); glEnd; glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); glPopMatrix;
La couleur du texte est pâle, et on voit le fond en gris.
Je suis allé voir la FAQ, et j'ai testé la solution avec GL_ALPHA_TEST :
Code pour renseigner la couleur alpha à 0, si la couleur est noire :Affichage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if(TRGBQuad(PtrBitmapAvance^).rgbRed = 0) and (TRGBQuad(PtrBitmapAvance^).rgbGreen = 0) and (TRGBQuad(PtrBitmapAvance^).rgbBlue = 0) then TRGBQuad(PtrBitmapAvance^).rgbReserved := 0;Mais j'obtiens ce résultat :
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 glPushMatrix; glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0); case _nDecompte of 3: glBindTexture(GL_TEXTURE_2D, TEXTURE_3); 2: glBindTexture(GL_TEXTURE_2D, TEXTURE_2); 1: glBindTexture(GL_TEXTURE_2D, TEXTURE_1); 0: glBindTexture(GL_TEXTURE_2D, TEXTURE_GO); end; glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-2.5, 2.5, 10); glTexCoord2f(1, 0); glVertex3f(2.5, 2.5, 10); glTexCoord2f(1, 1); glVertex3f(2.5, 7.5, 10); glTexCoord2f(0, 1); glVertex3f(-2.5, 7.5, 10); glEnd; glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_ALPHA_TEST); glPopMatrix;
C'est encore pire : le fond est encore plus sombre (et plus visible).
J'ai testé l'autre solution proposée par la FAQ : glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Cette fois le texte est à peine visible, et le fond est toujours là :
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 glPushMatrix; glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); case _nDecompte of 3: glBindTexture(GL_TEXTURE_2D, TEXTURE_3); 2: glBindTexture(GL_TEXTURE_2D, TEXTURE_2); 1: glBindTexture(GL_TEXTURE_2D, TEXTURE_1); 0: glBindTexture(GL_TEXTURE_2D, TEXTURE_GO); end; glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-2.5, 2.5, 10); glTexCoord2f(1, 0); glVertex3f(2.5, 2.5, 10); glTexCoord2f(1, 1); glVertex3f(2.5, 7.5, 10); glTexCoord2f(0, 1); glVertex3f(-2.5, 7.5, 10); glEnd; glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); glPopMatrix;
Il y a certainement quelque chose que je fais mal, mais je ne vois pas quoi.
Une idée ?
![]()
Partager