How to display a point cloud with openGL

user3228135 picture user3228135 · Mar 8, 2014 · Viewed 17.3k times · Source

I'm trying to display a point cloud with OpenGL.

I have followed some tutorials and I managed to display some geometric schema but when i try to display a point cloud read from a csv file, it does not work. The reading of file work very well.

the includes

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <boost/tokenizer.hpp>
#include <sstream>
#include <vector>

#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <algorithm>

#include "Point.cpp"
#include "drawing.cpp"

using namespace std;

declarations

void draw(vector<Point> v);

int pointsNBR = 200;

char *theFileName;

main method

int main (int argc, char** argv) {

  if(argv[1]){
    theFileName = argv[1];
  }else{
    cout << "Please enter the file name !!\n";
    exit(0);
  }

  if(argv[2]){
    pointsNBR = atoi(argv[2]);
  }
  PCEngine(theFileName, pointsNBR);

    SDL_Init(SDL_INIT_VIDEO);
  atexit(SDL_Quit);
  SDL_WM_SetCaption("Point Cloud", NULL);
  SDL_SetVideoMode(720,640, 32, SDL_OPENGL);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(70,(double)640/480,1,1000);

  bool continuer = true;
  SDL_Event event;

  vector<Point> v = getCloudPoint(theFileName);
    draw(v);

  for (;;)    {
    SDL_WaitEvent(&event);
    switch(event.type){
        case SDL_QUIT:
        exit(0);
        break;
    }
  }

}

draw method

void draw(vector<Point> v){

  glPushAttrib(GL_ALL_ATTRIB_BITS);
  glPushMatrix();

  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();

  gluLookAt(3,4,2,0,0,0,0,0,1);

  glPointSize(2.0);

  glBegin(GL_POINTS);
    for (size_t n = 0; n < v.size(); n++){
        glColor3ub(v[n].r, v[n].g, v[n].b);
        glVertex3d(v[n].x, v[n].y, v[n].z);
    }
  glEnd();

  glFlush();
  SDL_GL_SwapBuffers();

  glPopMatrix();
  glPopAttrib();
}

My problem is that I haven't any display.

Can someone help me please?

Answer

ديناصور الأمة picture ديناصور الأمة · Mar 8, 2014

You should use the GL_MODELVIEW to position your cloud in the scene.

In the draw method change glMatrixMode(GL_PROJECTION); to glMatrixMode(GL_MODELVIEW);