Dato un elenco di indici triangolari, come si fa esattamente a convertirlo in un elenco di indici con adiacenza per uno shader di geometria?
Si noti che qui stiamo parlando rigorosamente di indici - i vertici sono presenti, ma ci concentreremo esclusivamente sugli indici, perché possiamo usarli per abbinare vertici duplicati senza dover entrare in confronti a virgola mobile e epsilon - che il lavoro ha già fatto.
So che per ogni dato triangolo nell'elenco, gli indici {0, 1}, {1, 2} e {2, 0} (o {n, n + 1}, {n + 1, n + 2}, { n + 2, n} se preferisci) ne formano i bordi; l'elenco degli indici è ben formato e rispetta correttamente l'ordine degli avvolgimenti.
So che per ogni dato bordo, possiamo cercare nell'intero elenco un altro triangolo che utilizza due di quegli indici, e il terzo indice di quel triangolo è quello da usare per completare il triangolo adiacente per quel bordo.
So che nella lista di adiacenza ogni triangolo originale è rappresentato da 6 indici, gli indici originali vanno negli slot 0, 2, 4; i nuovi indici per completare l'adiacenza vanno negli slot 1, 3, 5. L'indice da completare per il bordo {0, 1} va nello slot 1, l'indice da completare per il bordo {1, 2} va nello slot 3, l'indice per completare per il bordo {2, 1} va nello slot 5.
Che cosa ho provato?
Ho provato a forzarlo brutalmente, e sì, funzionerà, ma sto cercando un approccio più elegante.
Ho provato il costruttore di edge list di Eric Lengyel, ma (1) non sembra rispettare l'ordine originale del triangolo, (2) non sembra rispettare l'ordine degli avvolgimenti, (3) è chiaro come il fango dove andare il prossimo dopo aver creato la lista dei bordi e (4) ho il sospetto di un codice di esempio che presenti errori così evidenti come "triangleIndex" contro "faceIndex" - l'autore ha persino compilato il codice, non importa se eseguito verificarlo?
Quindi - qualche suggerimento o puntatore da qui in poi?