Надаючи список індексів трикутників, як саме можна перетворити його на перелік індексів із суміжністю для шейдера геометрії?
Зауважте, що ми тут суворо говоримо про індекси - вершини є, але ми будемо зосереджуватися виключно на індексах, тому що ми можемо використовувати їх для узгодження дублікатів вершин, не вникаючи у порівняння з плаваючою комою та epsilons - ця робота має вже зроблено.
Я знаю, що для будь-якого заданого трикутника у списку індекси {0, 1}, {1, 2} та {2, 0} (або {n, n + 1}, {n + 1, n + 2}, { n + 2, n}, якщо ви віддаєте перевагу) його утворюють його краї; список індексів добре сформований і правильно дотримується порядку намотування.
Я знаю, що для будь-якого такого краю ми можемо шукати весь список для іншого трикутника, який використовує два з цих індексів, а третій індекс цього трикутника - той, який слід використовувати для заповнення суміжного трикутника для цього краю.
Я знаю, що у списку суміжності кожен оригінальний трикутник представлений 6 індексами, вихідні індекси переходять у слоти 0, 2, 4; нові індекси для завершення суміжності переходять у прорізи 1, 3, 5. Індекс для завершення для краю {0, 1} переходить у проріз 1, індекс для завершення для краю {1, 2} переходить у слот 3, індекс для завершення для краю {2, 1} переходить у слот 5.
Що я спробував?
Я спробував жорстоке форсування, і так, це спрацює, але я після більш елегантного підходу.
Я спробував створити краєвид списку Еріка Ленгіеля, але (1) він, схоже, не поважає початковий порядок трикутників, (2) він, схоже, не поважає звивистий порядок, (3) це так просто, як грязь, куди йти. далі після того, як ви створили список ребер, і (4) у мене є підозра на зразок коду, який має такі очевидні явні помилки, як "трикутникІндекс" проти "faceIndex" - чи автор навіть склав код, не маючи на увазі, запустіть його перевірити це?
Отже - якісь пропозиції чи вказівки звідси далі?