2015-12-04 4 views
0

Comment créer un dégradé comme celui vu dans l'image ci-dessous en utilisant GLSL?GLSL Shader - Effet d'éclairage de jante 2D

Color Gradient

Quelle est la meilleure méthode pour réaliser une transition en douceur de l'opaque au niveau des bords du polygone étant appelée sur un transparent en son centre?

Répondre

2

L'image à laquelle vous faites référence est obtenue grâce à ce que l'on appelle distance transform. C'est une opération très utile et courante largement appliquée dans le traitement d'image, la vision par ordinateur et le calcul de trajectoire de robot, etc. Ce que fait chaque pixel d'une image, calcule la distance euclidienne 2D du pixel aux bords les plus proches du polygone. La sortie est une image dont la valeur de pixel indique la distance minimale. Pour visualiser les résultats, nous cartographions la distance par rapport à l'échelle de gris. En particulier, dans votre image de référence, la crête avec du blanc brillant a la plus grande distance à la frontière tandis que la zone sombre contient des valeurs beaucoup plus petites parce qu'elles sont très proches de la limite du polygone. En termes de mise en œuvre, une approche de force brutale consiste à dessiner une image 2D que vous voulez transformer, et dans le fragment shader, calculer la distance de la position actuelle du fragment à chaque bord d'un polygone et afficher la valeur minimale à framebuffer. Les informations de géométrie du polygone peuvent être stockées dans une autre texture. Finalement, vous finissez avec une texture 2D dont la valeur de pixel code la plus courte distance aux bords du polygone. Vous pouvez également trouver cette implémentation de transformation commune dans OpenCV library.