В настоящее время я пытаюсь написать программу, которая принимает меш в качестве входных данных (состоящих из вершинных позиций и массива элементов) и выводит индексы для использования с glDrawElements()
в режиме GL_TRIANGLES_ADJACENCY
.Индексирование смежности треугольника OpenGL
Мне пришло время писать код, в котором не замкнутые сетки имеют треугольники, у которых может не быть трех соседей. Например, сетка, состоящая из одного треугольника, не имеет соседних треугольников.
В этом случае, что должно индексы 2, 4 и 6 быть? Похоже, что должен быть стандартный способ сказать геометрическому шейдеру, что один или несколько соседних треугольников не существуют. Однако я не мог найти информацию об этом в спецификации OpenGL (v4.3).
Единственный треугольник - примерный пример, но есть много сеток, где не все треугольники соединяются с тремя другими - например, с цилиндром с открытыми концами.
Есть ли стандартный способ обработки таких случаев? Извиняюсь, если я пропустил что-то очевидное в спецификации.
Выше изображения скопированы по спецификации OpenGL 4.3.
Спасибо за вашу помощь. Я понимаю, что, несмотря ни на что, я должен предоставить 6 индексов на треугольник. Я просто не знаю, какие индексы должны предоставить в случае, когда треугольник не имеет другого треугольника, прилегающего к нему. Как работает тест «GL_LINES», кстати? – Kaathe
@ Kaathe: Это просто одна из тех вещей. Минимальное количество точек для описания строки равно 2; минимальное количество точек для описания треугольника равно 3. Хотя два предыдущих случая были простой геометрией, существуют также ограничения, наложенные на основании того, как вы передаете свой _list_ из примитивов - минимальное количество точек для описания смежности треугольника равно 6 Если вы действительно думаете об этом, какую цель вы бы описали примыкания треугольника только с одним треугольником? Хотя, если вы мертвы на этом, вы, вероятно, можете создать 3 вырожденных треугольника - я не знаю, что вы выиграете от этого? –
@ Kaathe Если у вас есть только 3 индекса, вы не будете использовать 'GL_TRIANGLES_ADJACENCY'. Вместо этого вы должны использовать 'GL_TRIANGLES' –