Opengl 从GPU内核复制具有位置和方向的空间对象 上下文
我正在使用GPU编程(OpenCL和CUDA, 但当然不是同时)为了科学目的。 我使用OpenGL进行显示 目标 我想画一个相同的物体,也就是群集粒子,可以是一个简单的三角形,在2D-N次的不同位置和不同的形状 以最有效的方式确定不同的方向,知道:Opengl 从GPU内核复制具有位置和方向的空间对象 上下文,opengl,cuda,opencl,vbo,Opengl,Cuda,Opencl,Vbo,我正在使用GPU编程(OpenCL和CUDA, 但当然不是同时)为了科学目的。 我使用OpenGL进行显示 目标 我想画一个相同的物体,也就是群集粒子,可以是一个简单的三角形,在2D-N次的不同位置和不同的形状 以最有效的方式确定不同的方向,知道: 对象总是完全相同的 位置和方向在GPU上计算,因此存储在GPU内存中 粒子数N可能很大 当前解决方案 到目前为止,为了避免将数据发回CPU,我存储了位置和 VBO中的方向阵列并使用: glBindBuffer(GL_ARRAY_BUFFER, p
- 对象总是完全相同的
- 位置和方向在GPU上计算,因此存储在GPU内存中
- 粒子数N可能很大
glBindBuffer(GL_ARRAY_BUFFER, position_vbo);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, velocity_vbo);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, 0);
glDrawArrays(GL_POINTS, 0, N);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
以彩色编码的速度绘制一组点,而无需将阵列复制回CPU
我想做的是画一个完整的对象,而不是一个简单的点
使用类似的方法,即不将VBO复制回CPU
基本上我想在GPU上存储一个对象的模型
(显示列表?顶点数组?)并使用GPU上的位置和方向
在不将数据发送回CPU的情况下绘制对象N次
有可能吗?怎么可能?否则,我该怎么做
PS:我喜欢保持代码干净,因此我宁愿将显示问题与群集内核分开。我相信您可以使用几何体着色器(OpenGL 3.2中提供)来实现这一点。有关具体信息,请参阅
在您的情况下,需要将几何体着色器的输入类型和输出类型分别设置为GL_点和GL_三角形,并且在几何体着色器中,为每个传入点顶点发射三角形的3个顶点。这似乎是解决我的问题的一个好办法。有没有不使用扩展的替代方案?@Simon几何体着色器在OpenGL 3.2中可用,因此如果您的驱动程序支持该版本,则不需要扩展