球がたくさんあります。私は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_POINTSの代わりに「GL_SPHERES」のような球の中心を持っているため、このデータを使用して球を描画する方法です。