我有大量的球体。我做了一个 cudamemcpy 并将质量位置、电荷、初始速度和半径传输到设备。我计算所有球体之间的相互作用并计算最终位置。我的问题是我想渲染这些球体
GLuint vbo[2];
glGenBuffers( 2, vbo);
glBindBuffer( GL_ARRAY_BUFFER, vbo[0]);
unsigned int size = numBodies * 4 * sizeof( float);
float4* initialpos = (float4*)malloc(numBodies*4*sizeof(float));
for(unsigned int i = 0; i < numBodies; i++)
{
// Initialize initialpos which are the centers of the spheres
}
glBufferData( GL_ARRAY_BUFFER, size, initialpos, GL_DYNAMIC_DRAW);
free(initialpos);
glBindBuffer( GL_ARRAY_BUFFER, vbo[1]);
glBufferData(GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW);
glBindBuffer( GL_ARRAY_BUFFER, 0);
// register vbo with CUDA
cudaGLRegisterBufferObject(vbo[0]);
cudaGLRegisterBufferObject(vbo[1]);
//inside the display function
float4* oldPos;
float4* newPos;
cudaGLMapBufferObject( (void**)&newPos, vbo[1-swap])
cudaGLMapBufferObject( (void**)&oldPos, vbo[swap]);
//Call a C function which calls LAUNCHES CUDA KERNEL with old and new Positions
// Unmap Buffer Objects
swap = 1 - swap;
我在内核中更改了 newpos 和 oldPos。现在画点我会使用 glDrawElements(GL_POINTS,.....);
我的问题是如何用这些数据绘制球体,因为 newpos 数组的 4 个字节中的每一个都有一个球体的中心,基本上类似于“GL_SPHERES”而不是 GL_POINTS。