2010-12-02 28 views
1

Je dessine du texte dans OpenGL en utilisant la bibliothèque FTGL et tout fonctionne très bien, mais je voudrais ajouter de l'ombre au texte. Ce que j'ai essayé est le dessin même texte avec la couleur noire, puis dessiner le texte ci-dessus que la couleur normale comme ceci (pseudo-code):Dessin de texte avec ombre dans OpenGL + FTGL

glColor3f(0, 0, 0); // outline color 
DrawText(x-1, y-1, str); 
DrawText(x+1, y-1, str); 
DrawText(x+1, y+1, str); 
DrawText(x-1, y+1, str); 
glColor3f(1, 1, 1); // primary color 
DrawText(x,y,str); 

Mais je dois dessiner le texte 5 fois et il ne semble toujours pas très bon.

Je voudrais obtenir quelque chose comme sur la capture d'écran

Text with shadow

Répondre

3

Il y a probablement beaucoup de moyens pour y parvenir - certains avec une meilleure qualité que d'autres.

Voici ce que je ferais:

  1. rendent le texte à une échelle de gris en mémoire pixmap.
  2. effectuer un flou gaussien dessus (probablement en utilisant une bibliothèque rapide comme QImageBlitz ou ImageMagick). Le rayon de flou devrait être d'environ 2-3px.
  3. appliquer une courbe de tonalité raide à l'image floue, de sorte que la plage de luminance [0.0, 0.9] est mappée à près de 0.0. Cela fait cesser d'être flou, et le résultat est une version "engraissée" du texte. La courbe de tonalité devrait ressembler à ceci:

    alt text

  4. render que l'ombre, en noir (en utilisant un mode de mélange approprié pour émuler alpha-blending). Rendez ensuite le texte jaune régulier par-dessus (avec un petit décalage de votre choix).

En outre, vous pouvez utiliser différentes courbes de tonalité en fonction de la façon dont une ombre douce que vous voulez. Une courbe de ton linéaire donnerait une ombre très douce.

2

Je souvent le faire de cette façon:

  1. couleur noir jeu à semi-transparent, par exemple (0,0,0,0.5)
  2. dessiner le texte dans tous les neuf directions (déplacement sur les côtés, puis en diagonale)
  3. dessinez le texte fg.

Cela semble assez bon, et vous pouvez l'accélérer avec la liste de rendu et les traductions.

voir ici: http://i.stack.imgur.com/Dh68y.png