Flessibile e preciso: filtri
Utilizzare un filtro texel sulla trama sul lato CPU o se si utilizza la pipeline programmabile OpenGL, direttamente nello shader di frammenti.
L'idea di un filtro è semplicemente che si esegue un ciclo 2D per elaborare ogni texel. Se è bianco, corri attraverso un loop 2D interno per ciascuno dei pixel circostanti in un certo raggio e ti adatti di conseguenza. Questo è anche noto come filtro box, sebbene se includi il controllo del raggio, si tratta in realtà di un filtro circolare, che evita artefatti assiali.
Un modo più rapido per farlo è precalcolare il set di offset da ciascun pixel centrale che controlli; in questo modo, non è necessario eseguire una radice quadrata per ogni pixel che circonda un determinato pixel. Si desidera mantenere la complessità fino a `O (texWidth * texHeight) anziché O (texWidth * texHeight * filterRadius * filterRadius), in altre parole.
Facile: rendering multipli
Un altro modo per ottenere l'effetto sarebbe non ridimensionare il testo, ma invece rendere il contorno rosso in ciascuna delle otto (o più) direzioni, ciascuna leggermente sfalsata rispetto all'originale in quella direzione:
\|/
--+--
/|\
Compensando ciascuna delle versioni rosse in questo modo, otterrai un bordo esterno abbastanza uniforme attorno al testo originale. Tieni presente che quando si sposta in diagonale, è necessario utilizzare la stessa ampiezza del vettore di quando si sposta in orizzontale o in verticale, anziché semplicemente compensare con gli stessi valori xey (il che porta a una lunghezza approssimativamente ulteriore di 1,4x - trig di base).
FYI
Questo tipo di effetto è noto come dilatazione e talvolta viene eseguito tramite Minkowski Summation , che è l'approccio basato su vettori (continui) al filtro a riquadri basato su pixel (quantizzato) che ho descritto sopra.