Фон: Я разрабатываю приложение, которое по существу рисует огромный трехмерный график узлов и ребер. Узлы отрисовываются в виде экземпляров кубов, а края — с GL_LINE
и расширен с помощью геометрического шейдера в трехмерные объемные «линии» из треугольных полос. В настоящее время я выполняю это расширение каждый раз, когда перерисовываю края. Однако, поскольку мой график полностью статичен (узлы не могут двигаться, а следовательно, и края не могут), я считаю, что мне нужно только расширить GL_LINE
Определения в треугольные полосы один раз, захватывать расширенные вершины в буфер (используя Tranform Feedback), а затем с этой точки рисовать края, используя эти захваченные вершины с glMutliDrawArrays
используя примитивный тип GL_TRIANGLE_STRIP
,
Вопрос: Все эти объемные линии, которые я рисую, содержат 10 вершин. Тем не мение, glMultiDrawArrays
требуется массив начальных индексов и размеров счетчиков, которые по существу описывают начальную точку и количество (в элементах) каждого примитива. Поскольку ни один из моих примитивов не различается по размеру, я бы составил, казалось бы, ненужный список начальных индексов. & на счет. Существует ли какая-либо функциональность, предоставляемая OpenGL, которая позволила бы мне просто указать шаг (в элементах), при котором произойдет перезапуск примитива?
Нет такой функции, но для ваших нужд она вам не нужна. Преобразование обратной связи не могу Выходные треугольные полоски. Выводит только основной примитивы: отдельные точки, линии или треугольники. Вот почему glBeginTransformFeedback
только занимает GL_POINTS
, GL_LINES
, или же GL_TRIANGLES
,
Все, что вам нужно сделать, это визуализировать все ваши ребра одновременно, собрать результаты в единый буфер с помощью обратной связи, а затем визуализировать все это с помощью одного вызова glDrawArrays
,
Других решений пока нет …