2012-05-24 3 views
2

Мне нужно нарисовать большую коллекцию сфер в трехмерном физическом моделировании подобной системе «весна-масса».Vertex buffer objects and glutsolidsphere

Я хотел бы знать эффективный метод рисования сфер без необходимости составлять список отображения на каждом этапе моего моделирования (каждый шаг может варьироваться от миллисекунд до нескольких секунд, в зависимости от количества тел, участвующих в вычислении).

Я читал, что объекты вершинного буфера являются эффективным методом для рисования объектов, которые также необходимо иногда обновлять.

Есть ли способ рисовать сферы OpenGL быстрее, чем glutSolidSphere?

+1

Если вы ориентируетесь на достаточно современные драйверы opengl, вы можете написать геометрический шейдер, чтобы превратить массив отдельных точек в сферы. Это, наверное, самый быстрый способ, о котором я могу думать. Альтернативно просто создайте сферическую сетку в VBO, затем переводите и рисуйте снова и снова. – Tim

+1

@Tim Ну, на оборудовании GS у вас также есть встроенные массивы, и я бы подумал, что это быстрее, чем создание сфер в GS (поскольку это некоторая работа по созданию целой сферы), но это может стоить проверить. На самом деле, многие вещи, в которых GS впервые приходит в голову, могут быть легче (и быстрее?) С помощью встроенных массивов. –

ответ

2

Сферы автомодельные; каждая сфера - это просто масштабированная версия любой другой сферы. Я не вижу необходимости в регенерации какой-либо геометрии. Действительно, я не вижу необходимости иметь больше одной сферы.

Это просто вопрос обеспечения правильной матрицы масштабирования. Я бы предложил сферу радиуса, центрированную в начале координат для вашего списка отображения или сетки буферов. Затем вы можете просто преобразовать его в разные местоположения, используя шкалу для установки нового радиуса.

+0

Да, это имеет смысл, это отличное улучшение, о котором я никогда не думал! – linello

2

Я хотел бы знать, эффективный метод для рисования сферы без составления списка отображения на каждом шаге моего моделирования (каждый шаг может варьироваться от нескольких миллисекунд до нескольких секунд, в зависимости от количества органов, участвующих в вычислении).

Почему вы генерируете список отображения вообще, если геометрия, в которую вы вставляете, является динамической. Списки отображения предназначены для статической геометрии, которые никогда или редко изменяются.

Я читал, что объекты вершинного буфера являются эффективным методом для рисования объектов, которые также необходимо иногда обновлять.

На самом деле VBOs являются наиболее эффективными с статической геометрией. В общем, вы хотите, чтобы количество фактических обновлений геометрии было как можно более низким. В вашем случае единственное обновление - это позиции (и, возможно, размер) сфер. Это яркий пример инстанционного рисования. Однако это также хорошо работает, с обновлением только однородной или матрицы преобразования и вызовом рисования сферы.

Идея Vertex Arrays и VBOs состоит в том, что вы рисуете целую партию геометрии с помощью одного вызова. Сфера будет такой партией.

Смежные вопросы