0

我正在尝试使用 OpenGL 和 CUDA 实现点云,其中点的半径将根据与它们相关的一些数据随时间变化。

由于我对 OpenGL 和 CUDA 完全陌生,因此我很难实现这一目标。在学习了 OpenGL、GLSL 和 CUDA 的基础知识之后,我完全不知道程序的哪些部分应该如何实现。

我的想法如下:

  • 使用带有顶点位置的 VBO
  • 使用具有顶点半径的 VBO
  • 使用具有顶点不确定性的 VBO。基于此数据,顶点的半径应以动画方式变化
  • 每帧计算 CUDA 内核中所有顶点的半径
  • 调用 glDrawArrays 渲染所有点并使用顶点着色器,它从数组中获取所有数据作为输入

首先......为此目的一起使用CUDA和GLSL着色器是否合理?由于我已经阅读了一些有关使用其中一个或另一个的内容,因此我不确定。

第二个问题是,程序的哪些部分将在 CPU 上执行,哪些在 GPU 上执行?在内核中计算数据然后将其传递回OpenGL显示函数进行渲染是否有意义?

4

1 回答 1

1

首先......为此目的一起使用CUDA和GLSL着色器是否合理?由于我已经阅读了一些有关使用其中一个或另一个的内容,因此我不确定。

不,这不合理。如果您的目标是获取图像 - 使用 OpenGL。如果您的目标是进行一些繁重的计算(乘以大矩阵等) - 使用 CUDA。

您可以在没有 CUDA 的情况下计算顶点着色器中所有顶点的半径。使用统一变量将时间信息传递给着色器。纯 OpenGL 方法会快得多,因为不需要内核启动和额外的数据传输。

第二个问题是,程序的哪些部分将在 CPU 上执行,哪些在 GPU 上执行?在内核中计算数据然后将其传递回OpenGL显示函数进行渲染是否有意义?

GLSL 着色器和 CUDA 内核在 GPU 上执行。其他代码 - 在 CPU 上。如果您可以计算渲染管道中的所有内容(并且您可以),那么 CUDA 启动就没有意义。

于 2013-01-04T13:55:29.797 回答