Я пытаюсь реализовать облако точек с OpenGL и CUDA, где радиусы точек должны меняться по размеру с течением времени на основе некоторых данных, связанных с ними.
Поскольку я совершенно новичок в OpenGL и CUDA, мне довольно сложно достичь этой цели. Изучив основы OpenGL, GLSL и CUDA, я совершенно не понимаю, какие части программы должны выполняться.
Моя идея заключалась в следующем:
- Используйте VBO с позициями вершин
- Используйте VBO с радиусами вершин
- Используйте VBO с вершинными неопределенностями. На основе этих данных радиусы вершин должны изменяться анимированным образом.
- Вычислить радиус всех вершин в ядре CUDA в каждом кадре
- Вызов glDrawArrays для рендеринга всех точек и использования вершинного шейдера, который получает все данные из массивов в качестве входных данных.
Прежде всего... разумно ли использовать для этой цели шейдеры CUDA и GLSL вместе? Поскольку я читал кое-что об использовании того или другого, я не уверен в этом.
Второй вопрос: какие части программы будут выполняться на процессоре, а какие на графическом процессоре? Имеет ли смысл вычислять данные в ядре, а затем передавать их обратно в функцию отображения OpenGL для их рендеринга?