Note that there are some explanatory texts on larger screens.

plurals
  1. PORendering Kinect Point Cloud with Vertex Buffer Object (VBO)
    text
    copied!<p>I´m trying to make a dynamic point cloud visualizer. The points are updated every frame with Kinect Sensor. To grab the frames I´m using OpenCV and GLUT to display. The OpenCV API returns a 640 x 480 (float *), for the points xyz position , and a 640 x 480 (int *) for the rgb color data. To get the maximum performance, I´m trying to use Vertex Buffer Object in stream mode instead of a simple Vertex Array. I´m being able to render it with Vertex Array, but nothing is being rendered with my VBO implementation. I tryied a bunch of different orders in the declarations, but i can't find what I'm missing. Can someone try to point me to the right direction? Here is the simpflified code: (I´ve rewrited the wrong version as asked by Christian Rau, so you guys can understand my mistakes)</p> <pre><code>int main() { //Delaring variables, inittiating glut, setting camera and checking the compatibility as http://www.songho.ca/opengl/gl_vbo.html glutDisplayFunc(displayCB); glutIdleFunc(displayCB); ... //Inittiating the vertex buffers if(vboSupported) { glGenBuffers(1, &amp;vertex_buffer); glBindBuffer(GL_ARRAY_BUFFER_ARB, buffer); glBufferData(GL_ARRAY_BUFFER_ARB, (sizeof(GLfloat) * 640 * 480 * 3), 0, GL_STREAM_DRAW_ARB); glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, (sizeof(float) * 640 * 480 * 3), point_cloud.points_position); glGenBuffers(2, &amp;color_buffer); glBindBuffer(GL_ARRAY_BUFFER_ARB, buffer); glBufferData(GL_ARRAY_BUFFER_ARB, (sizeof(GLbyte) * 640 * 480 * 3), 0, GL_STREAM_DRAW_ARB); glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, (sizeof(char) * 640 * 480 * 3), point_cloud.points_color); } //glutMainLoop(), cleaning memory, ending main .. } //Updating the screen void displayCB() { point_cloud.update(); // clear buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // save the initial ModelView matrix before modifying ModelView matrix glPushMatrix(); glBindBuffer(GL_ARRAY_BUFFER_ARB, color_buffer); glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, (sizeof(char) * 640 * 480 * 3), point_cloud.points_color); glColorPointer(3, GL_UNSIGNED_BYTE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER_ARB, vertex_buffer); glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, (sizeof(float) * 640 * 480 * 3), point_cloud.points_position); glVertexPointer(3, GL_FLOAT, 0, 0)); // enable vertex arrays glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glDrawArrays(GL_POINT, 0, 640*480); glDisableClientState(GL_VERTEX_ARRAY); // disable vertex arrays glDisableClientState(GL_COLOR_ARRAY); glBindBuffer(GL_ARRAY_BUFFER_ARB, 0); glPopMatrix(); glutSwapBuffers(); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload