Je recommanderais fortement d'utiliser des textures, comme l'a dit Dave. Cela peut être quelque chose de pénible, mais cela fournirait de bien meilleures performances, je pense.
Vous pouvez essayer de rechercher des algorithmes de détection de bord . Si vous créez vos maillages à l'aide de la coloration des sommets avec des couleurs unies et des valeurs alpha moyennes (pour une légère transparence), puis utilisez un ombrage de détection des bords, cela peut sembler suffisant. Ce ne serait pas tout à fait la même chose, mais vous pourriez l'aimer encore plus; ou peut être pas.
Sinon, vous pourriez envisager une solution en deux passes, dessiner des polygones translucides (encore une fois, définir les couleurs des sommets sur une couleur unie avec une valeur alpha moyenne), puis définir glPolygonMode (GL_LINE) et ajuster glLineWidth comme vous le souhaitez (peut-être en fonction de l'objet distance) et dessinez à nouveau les polygones.
Il est un peu tard et j'ai du mal à lire cela, mais une discussion sur le forum pointe vers ce PDF: rendu filaire en un seul passage . Mes excuses si ce n'est pas pertinent.
Je sais que ce n'est probablement pas ce que vous recherchez, mais il semble que Vector Tanks utilise uniquement des modèles texturés. La texture donne l'aspect filaire, il fonctionne sur mon iPod touch qui ne prend pas en charge les shaders.
la source
La seule façon dont je l'ai vu est avec des textures haute résolution, principalement noires, comme celles de Tron 2.0. Leurs textures sont presque universellement soit un noir plat avec une bordure épaisse et colorée, soit une simple texture de bruit Perlin.
Ils ont appliqué un post-traitement simple pour obtenir l'effet de lueur.
la source
Vous pouvez essayer une sorte de fonction de distance simple dans le pixel shader. Peut-être quelque chose comme des coordonnées barycentriques (stockez différents RVB aux sommets et le rasteriser fera la plupart du travail pour vous).
Ensuite, votre pixel shader disposera des informations dont il a besoin pour savoir où se trouve le pixel actuel sur un polygone - près d'un sommet, près d'un bord ou au milieu ...
Je suppose qu'en pratique, il serait plus facile de le texturer.
la source
Que diriez-vous de cela: Prenez votre modèle et biseautez les bords que vous souhaitez voir apparaître comme des contours. Colorez les visages créés avec un vert opaque brillant, tandis que tous les visages anciens sont d'un vert translucide foncé.
Cela ne nécessite aucune utilisation de pixel shaders. (Aucune texture non plus, en fait; juste des couleurs de visage.) Cela nécessite un prétraitement du modèle de votre part, qui peut ou non être un problème.
Vous ne pourrez pas voir le contour lorsque la surface biseautée est perpendiculaire à la vue. Si cela vous dérange, vous pouvez extruder un peu la surface biseautée, colorer l'extrusion comme vous le feriez pour le biseau. Vous pouvez jouer avec différents degrés de biseautage et d'extrusion pour créer des lignes plus fines et plus épaisses.
la source