Dada una lista de índices de triángulos, ¿cómo exactamente se puede convertir eso en una lista de índices con adyacencia para un sombreador de geometría?
Tenga en cuenta que aquí estamos hablando estrictamente de índices : los vértices están presentes, pero nos vamos a centrar únicamente en los índices, porque podemos usarlos para unir vértices duplicados sin tener que entrar en comparaciones de punto flotante y épsilones, ese trabajo tiene Ya ha sido hecho.
Sé que para cualquier triángulo dado en la lista, los índices {0, 1}, {1, 2} y {2, 0} (o {n, n + 1}, {n + 1, n + 2}, { n + 2, n} si lo prefieres) de él forman sus bordes; la lista de índice está bien formada y respeta el orden de bobinado correctamente.
Sé que para cualquier borde dado, podemos buscar en la lista completa otro triángulo que use dos de esos índices, y el tercer índice de ese triángulo es el que se debe usar para completar el triángulo adyacente para ese borde.
Sé que en la lista de adyacencia cada triángulo original está representado por 6 índices, los índices originales van en las ranuras 0, 2, 4; los nuevos índices para completar la adyacencia van a las ranuras 1, 3, 5. El índice a completar para el borde {0, 1} va a la ranura 1, el índice a completar para el borde {1, 2} va a la ranura 3, el índice completar para el borde {2, 1} entra en la ranura 5.
Que he probado
He intentado forzarlo, y sí, eso funcionará, pero busco un enfoque más elegante.
He probado el generador de listas de borde de Eric Lengyel, pero (1) no parece respetar el orden del triángulo original, (2) no parece respetar el orden de bobinado, (3) es tan claro como el barro a dónde ir después de que hayas creado la lista de bordes, y (4) tengo una sospecha de código de muestra que tiene errores evidentes tan obvios como "triangleIndex" versus "faceIndex" - el autor incluso compiló el código, no importa ejecutarlo verificarlo?
Entonces, ¿alguna sugerencia o sugerencia de aquí en adelante?