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.


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;
Mais j'obtiens ce résultat :



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 :
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;
Affichage :
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;
Mais j'obtiens ce résultat :



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)
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;
Cette fois le texte est à peine visible, et le fond est toujours là :



Il y a certainement quelque chose que je fais mal, mais je ne vois pas quoi.
Une idée ?