Flexible et précis: filtres
Utilisez un filtre texel soit sur la texture côté CPU, soit si vous utilisez le pipeline programmable OpenGL, directement dans le fragment shader.
L'idée d'un filtre est simplement que vous exécutez une boucle 2D pour traiter chaque texel. S'il est blanc, vous exécutez une boucle 2D intérieure pour chacun de ses pixels environnants dans un certain rayon et vous vous adaptez en conséquence. Ceci est également connu comme un filtre de boîte, bien que si vous incluez la vérification du rayon, c'est vraiment un filtre circulaire - ce qui évite les artefacts axiaux.
Un moyen plus rapide de procéder consiste à précalculer l'ensemble des décalages de chaque pixel central que vous vérifiez; de cette façon, vous n'avez pas besoin d'exécuter une racine carrée pour chaque pixel entourant un pixel donné. Vous voulez limiter la complexité à `O (texWidth * texHeight) plutôt qu'à O (texWidth * texHeight * filterRadius * filterRadius), en d'autres termes.
Facile: plusieurs rendus
Une autre façon d'obtenir l'effet serait de ne pas mettre le texte à l'échelle, mais plutôt de rendre votre contour rouge dans chacune des huit (ou plus) directions, chacune légèrement décalée de l'original dans cette direction:
\|/
--+--
/|\
En compensant chacune des versions rouges comme celle-ci, vous obtiendrez un bord extérieur assez uniforme autour de votre texte d'origine. Gardez à l'esprit que lorsque vous déplacez en diagonale, vous devez utiliser la même amplitude vectorielle que lorsque vous déplacez horizontalement ou verticalement, plutôt que de simplement compenser par les mêmes valeurs x et y (ce qui conduit à une longueur approximative de 1,4 fois plus - trig de base).
FYI
Ce type d'effet est connu sous le nom de dilatation, et est parfois effectué via Minkowski Summation , qui est l'approche vectorielle (continue) du filtre de boîte à pixels (quantifié) que j'ai décrit ci-dessus.