Étant donné une liste d'indices triangulaires, comment procéder exactement pour convertir cela en une liste d'indices avec adjacence pour un shader de géométrie?
Notez que nous parlons strictement d' indices ici - les sommets sont présents, mais nous allons nous concentrer uniquement sur les indices, car nous pouvons les utiliser pour faire correspondre les sommets en double sans avoir à entrer dans des comparaisons à virgule flottante et des epsilons - ce travail a déjà été fait.
Je sais que pour tout triangle donné de la liste, les indices {0, 1}, {1, 2} et {2, 0} (ou {n, n + 1}, {n + 1, n + 2}, { n + 2, n} si vous préférez) en forme ses bords; la liste d'index est bien formée et respecte correctement l'ordre de bobinage.
Je sais que pour tout bord donné, nous pouvons rechercher dans la liste entière un autre triangle qui utilise deux de ces indices, et le troisième indice de ce triangle est celui à utiliser pour compléter le triangle adjacent pour ce bord.
Je sais que dans la liste d'adjacence, chaque triangle d'origine est représenté par 6 indices, les indices d'origine vont dans les emplacements 0, 2, 4; les nouveaux indices pour compléter la contiguïté vont dans les emplacements 1, 3, 5. L'index à compléter pour le bord {0, 1} va dans l'emplacement 1, l'index à compléter pour le bord {1, 2} va dans l'emplacement 3, l'index à compléter pour le bord {2, 1} va dans l'emplacement 5.
Qu'est-ce que j'ai essayé?
J'ai essayé de le forcer brutalement, et oui, cela fonctionnera, mais je suis après une approche plus élégante.
J'ai essayé le générateur de liste de bord d'Eric Lengyel, mais (1) il ne semble pas respecter l'ordre des triangles d'origine, (2) il ne semble pas respecter l'ordre d'enroulement, (3) c'est aussi clair que la boue où aller ensuite après avoir construit la liste des bords, et (4) j'ai un soupçon d'exemple de code qui a des erreurs flagrantes évidentes comme "triangleIndex" contre "faceIndex" - l'auteur a-t-il même compilé le code, sans parler de l'exécuter le vérifier?
Alors - des suggestions ou des conseils à partir d'ici?