Как визуализировать нетривиальные частицы в OpenGL

StackOverflow https://stackoverflow.com/questions/2290861

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть система частиц, в которой позиции и различные свойства хранятся в объекте буфера вершин.Значения постоянно обновляются ядром CUDA.Сейчас я просто визуализирую их, используя GL_POINTS, в виде плоских кругов.Что меня интересует, так это рендеринг этих частиц в более сложных вещах, например, в 3D-анимационных моделях птиц.Я пытаюсь выяснить, какой подход будет лучшим.Для разговора скажем, что анимация модели птицы состоит из 3 кадров (положение крыльев и что-то еще)

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

Я мало что знаю о шейдерах, смогут ли они справиться с чем-то подобным?

На данный момент я в основном ищу совета о том, каким путем следовать, но если вы знаете какие-либо статьи или учебные пособия, посвященные этой теме, спасибо.


Я работаю с OpenGL изначально в 64-разрядной версии Windows 7 с C++.Я не использую GLUT

Это было полезно?

Решение

Вероятно, вы захотите использовать:EXT_draw_instanced.На самом деле я никогда не использовал Instancing, но большинство современных графических процессоров (я думаю, GF6 и выше) позволяют вам передать графическому процессору модель и список точек и заставить его рисовать модель в каждой точке.

Я погуглю еще немного информации и посмотрю, что получится....

Ну, это официальная спецификация, и похоже, что у них есть руководство по ней.

http://www.opengl.org/registry/specs/ARB/draw_instanced.txt

Другие советы

Вам придется проявить творческий подход, чтобы сделать что-то подобное.Если вы использовали CUDA для вычисления положения и вращения в 2–3 компонентных плавающих текстурах, а затем запускали «индекс» вместе с каждой вершиной и увеличивали его на 1 для каждого экземпляра геометрии, то вы могли бы написать шейдер, который загружает текстуры, а затем использует текстуру вершинного шейдера. поиск, чтобы выбрать соответствующий пиксель из двух текстур и построить матрицу преобразования.Затем вы преобразуете вершины сетки с помощью построенной вами матрицы преобразования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top