Filaire OpenGL

18

Non, je ne recherche pas glPolygonMode. Je cherche une méthode, peut-être un shader GLSL qui produirait ce look filaire de style rétro pour les objets. Aucune suggestion?

Quelque chose comme Vector Tanks.

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

De préférence, la solution devrait également fonctionner sur OpenGL ES 2.0.

Tous les conseils et pointeurs (tant que non NULL) appréciés!

Kornel Kisielewicz
la source

Réponses:

5

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.

Ricket
la source
+1: ce serait plus facile si je trouvais un moyen de générer les textures d'une manière ou d'une autre. Impossible d'utiliser glPolygonMode en raison d'un ciblage OpenGL ES ultérieur (iStuff).
Kornel Kisielewicz
2

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.

Dave
la source
Je sais, je sais, mais je pourrais aussi coller des images de Subversion, et il n'utilise pas du tout de textures (AFAIK)
Kornel Kisielewicz
2

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.

gris-fondu
la source
+1: Je connaissais l'article, mais merci de le rappeler - c'est un bon article en effet (et aide avec le deuxième problème que j'ai eu - lueur).
Kornel Kisielewicz
1

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.

JasonD
la source
1

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