Flexibel und genau: Filter
Verwenden Sie einen Texelfilter entweder auf der Textur auf der CPU-Seite oder, wenn Sie die programmierbare Pipeline OpenGL verwenden, direkt im Fragment-Shader.
Die Idee eines Filters ist einfach, dass Sie eine 2D-Schleife durchlaufen, um jedes Texel zu verarbeiten. Wenn es weiß ist, durchlaufen Sie eine innere 2D-Schleife für jedes der umgebenden Pixel in einem Radius und passen sie entsprechend an. Dies wird auch als Box-Filter bezeichnet. Wenn Sie jedoch die Radiusprüfung einbeziehen, handelt es sich tatsächlich um einen kreisförmigen Filter, der achsenähnliche Artefakte vermeidet.
Eine schnellere Möglichkeit, dies zu tun, besteht darin, den Satz von Offsets für jedes von Ihnen überprüfte zentrale Pixel vorab zu berechnen. Auf diese Weise müssen Sie nicht für jedes Pixel, das ein bestimmtes Pixel umgibt, eine Quadratwurzel erstellen. Sie möchten die Komplexität auf O (texWidth * texHeight) und nicht auf O (texWidth * texHeight * filterRadius * filterRadius) beschränken.
Einfach: Mehrere Renderings
Eine andere Möglichkeit, den Effekt zu erzielen, besteht darin, den Text nicht zu skalieren, sondern den roten Umriss in acht (oder mehr) Richtungen zu rendern, die in dieser Richtung jeweils geringfügig vom Original versetzt sind:
\|/
--+--
/|\
Wenn Sie jede der roten Versionen wie folgt versetzen, erhalten Sie eine ziemlich gleichmäßige Außenkante um Ihren Originaltext. Denken Sie daran, dass Sie beim diagonalen Verschieben dieselbe Vektorgröße verwenden sollten wie beim horizontalen oder vertikalen Verschieben, anstatt einfach um dieselben x- und y-Werte zu versetzen (was zu einer ungefähr 1,4-fachen weiteren Länge führt - Grundtrig).
Zu Ihrer Information
Diese Art von Effekt ist als Dilatation bekannt und wird manchmal über die Minkowski-Summierung durchgeführt , bei der es sich um den vektorbasierten (kontinuierlichen) Ansatz für das oben beschriebene pixelbasierte (quantisierte) Boxfilter handelt.